📄 Coding standard

In emote we strive to maintain a consistent style, both visually and implementation-wise. In order to achieve this we rely on tools to check and validate our code as we work, and we require that all those tools are used for CI to pass.

To have a smooth developer experience, we suggest you integrate these with your editor. We'll provide some example configurations below; and we welcome contributions to these pages. However, we strive to avoid committing editor configurations to the repository, as that'll more easily lead to mismatch between different editors - the description below is authoritative, not any specific editor configuration.

We also require that all commits are made using LF-only line endings. Windows users will need to configure using the below command, or set up their editor appropriately. This helps keep emote platform-generic, and reduces risk for spurious diffs or tools misbehaving.

git config --global core.autocrlf true

Tools

To run the tools mentioned below on the whole repo, the easiest way is with

pants lint ::

black

Black is an auto-formatter for Python, which mostly matches the PEP8 rules. We use black because it doesn't support a lot of configuration, and will format for you - instead of just complaining. We do allow overrides to these styles, nor do we allow disabling of formatting anywhere.

isort

isort is another formatting tool, but deals only with sorting imports. Isort is configured to be consistent with Black from within pyproject.toml.

Example configurations

emacs

(use-package python-black
    :demand t
    :after python
    :hook (python-mode . python-black-on-save-mode-enable-dwim))

(use-package python-isort
    :demand t
    :after python
    :hook (python-mode . python-isort-on-save-mode))