update style guide

This commit is contained in:
shibao 2022-02-10 00:32:12 -05:00
parent bb4e6954eb
commit 3b0850852e
1 changed files with 20 additions and 11 deletions

View File

@ -13,14 +13,14 @@ If you're multilingual, this project can use your translations! Visit
## Style Tips ## Style Tips
- In order to cut down on code verbosity and readability, please try to use - In order to keep code concise and improve readability, please try to make your
inline `do:` blocks for short functions and make your aliases as short as functions as short as possible while keeping variable names descriptive! For
possible without introducing ambiguity. instance, use inline `do:` blocks for short functions and make your aliases as
short as possible without introducing ambiguity.
- I.e. since there's only one `Changeset` in the app, please alias - I.e. since there's only one `Changeset` in the app, please alias
`Changeset.t(Type.t())` instead of using `Ecto.Changeset.t(Long.Type.t())` `Changeset.t(Type.t())` instead of using `Ecto.Changeset.t(Long.Type.t())`
- Use pipelines when possible. If a function only calls a single method, a - Use pipelines when possible. If only calling a single method, a pipeline isn't
pipeline isn't strictly necessary but still encouraged for future strictly necessary but still encouraged for future modification.
modification.
- Please add typespecs to your functions! Even your private functions may be - Please add typespecs to your functions! Even your private functions may be
used by others later down the line, and typespecs will be able to help used by others later down the line, and typespecs will be able to help
document your code just a little bit better, and improve the debugging document your code just a little bit better, and improve the debugging
@ -29,7 +29,7 @@ If you're multilingual, this project can use your translations! Visit
return_type()`. Please use these for generic types, such as `map()` when the return_type()`. Please use these for generic types, such as `map()` when the
input data isn't immediately obvious. input data isn't immediately obvious.
- Please define all typespecs for a function together in one place, instead of - Please define all typespecs for a function together in one place, instead of
each function. each function header.
- When making new models, please take inspiration from the existing models in - When making new models, please take inspiration from the existing models in
regards to layout of sections, typespec design, and formatting. regards to layout of sections, typespec design, and formatting.
- With Elixir convention, for methods that raise on error please name them like - With Elixir convention, for methods that raise on error please name them like
@ -38,6 +38,11 @@ If you're multilingual, this project can use your translations! Visit
status tuples for other functions like `{:ok, result}` or `{:error, status tuples for other functions like `{:ok, result}` or `{:error,
reason_or_changeset}` instead of just returning `result` or `nil` for easy reason_or_changeset}` instead of just returning `result` or `nil` for easy
pattern matching. pattern matching.
- Instead of using the `.` operator, try to use pattern matching instead,
especially for function headers. `.` in templates is fine to keep things
concise.
- Use `Enum` functions over comprehensions whenever possible for clarity.
However, comprehensions in templates are fine for legibility.
- When adding text, please use `gettext` macros to enable things to be - When adding text, please use `gettext` macros to enable things to be
translated in the future. After adding `gettext` macros, run `mix format` in translated in the future. After adding `gettext` macros, run `mix format` in
order to add your new text strings to the files in `priv/gettext`. order to add your new text strings to the files in `priv/gettext`.
@ -45,15 +50,17 @@ If you're multilingual, this project can use your translations! Visit
(informational messages as a result of the user doing an action, i.e. in (informational messages as a result of the user doing an action, i.e. in
flashes), `"actions"` (actions that the user can take), `"emails"`, and flashes), `"actions"` (actions that the user can take), `"emails"`, and
`"errors"`. Using these domains accurately will let translators know which `"errors"`. Using these domains accurately will let translators know which
messages are higher and lower priority. Thank you! translations are higher and lower priority. Thank you!
- Before submitting a PR, please make sure all tests are passing using `mix test`. - Before submitting a PR, please make sure all tests are passing using `mix
test`.
And as always, thank you! And as always, thank you!
# Technical Information # Technical Information
- Created using the [Phoenix Framework](https://www.phoenixframework.org) - Created using the [Phoenix Framework](https://www.phoenixframework.org)
- User Registration/Sign in via [`phx_gen_auth`](https://hexdocs.pm/phx_gen_auth/). - User Registration/Sign in via
[`phx_gen_auth`](https://hexdocs.pm/phx_gen_auth/).
- `Dockerfile` and example `docker-compose.yml` - `Dockerfile` and example `docker-compose.yml`
- Automatic migrations in `MIX_ENV=prod` or Docker image - Automatic migrations in `MIX_ENV=prod` or Docker image
- JS linting with [standard.js](https://standardjs.com), HEEx linting with - JS linting with [standard.js](https://standardjs.com), HEEx linting with
@ -73,7 +80,9 @@ Check them out!
which will use the `.tool-versions` file to install the correct versions of which will use the `.tool-versions` file to install the correct versions of
Erlang, Elixir and npm for this project! Erlang, Elixir and npm for this project!
1. Run `mix deps.get` and `mix compile` to fetch all dependencies 1. Run `mix deps.get` and `mix compile` to fetch all dependencies
1. Run `mix setup` to initialize your database. 1. Run `mix setup` to initialize your database. You can reset your database at
any time with `mix ecto.reset`.
1. Run migrations with `mix ecto.migrate` or rollback with `mix ecto.rollback`.
1. Run `mix phx.server` to start the development server. 1. Run `mix phx.server` to start the development server.
# Configuration # Configuration