ruff 0.16 discovers .md files during `ruff format` in order to format the python code blocks they contain. Declare `md` in the ruff-format config so mozlint routes markdown to it as well, and reformat the affected docs. Differential Revision: https://phabricator.services.mozilla.com/D314932
65 lines
2.0 KiB
Markdown
65 lines
2.0 KiB
Markdown
# Python Coding style
|
|
|
|
## Coding style
|
|
|
|
{ref}`black` is the tool used to reformat the Python code.
|
|
|
|
## Linting
|
|
|
|
The Python linting is done by {ref}`ruff` which includes rules from `flake8` and `pylint`.
|
|
It is executed by mozlint both at review phase and in the CI.
|
|
|
|
## Indentation
|
|
|
|
Four spaces in Python code.
|
|
|
|
### Makefile/moz.build practices
|
|
|
|
- Changes to makefile and moz.build variables do not require
|
|
build-config peer review. Any other build system changes, such as
|
|
adding new scripts or rules, require review from the build-config
|
|
team.
|
|
|
|
- Suffix long `if`/`endif` conditionals with #{ & #}, so editors
|
|
can display matched tokens enclosing a block of statements.
|
|
|
|
```
|
|
ifdef CHECK_TYPE #{
|
|
ifneq ($(flavor var_type),recursive) #{
|
|
$(warning var should be expandable but detected var_type=$(flavor var_type))
|
|
endif #}
|
|
endif #}
|
|
```
|
|
|
|
- moz.build are python and follow normal Python style.
|
|
|
|
- List assignments should be written with one element per line. Align
|
|
closing square brace with start of variable assignment. If ordering
|
|
is not important, variables should be in alphabetical order.
|
|
|
|
```python
|
|
var += [
|
|
"foo",
|
|
"bar",
|
|
]
|
|
```
|
|
|
|
- Use `CONFIG['TARGET_CPU'] {=arm}` to test for generic classes of
|
|
architecture rather than `CONFIG['OS_TEST'] {=armv7}` (re: bug 886689).
|
|
|
|
## Other advice
|
|
|
|
- Install the
|
|
[mozext](https://hg.mozilla.org/hgcustom/version-control-tools/file/default/hgext/mozext)
|
|
Mercurial extension, and address every issue reported on commit
|
|
or the output of `hg critic`.
|
|
- Follow [PEP 8](https://www.python.org/dev/peps/pep-0008/). Please run {ref}`black` for this.
|
|
- Do not place statements on the same line as `if/elif/else`
|
|
conditionals to form a one-liner.
|
|
- Global vars, please avoid them at all cost.
|
|
- Exclude outer parenthesis from conditionals.Use
|
|
`if x > 5:,`rather than `if (x > 5):`
|
|
- Use string formatters, rather than var + str(val).
|
|
`var = 'Type %s value is %d'% ('int', 5).`
|
|
- Testing/Unit tests, please write them and make sure that they are executed in the CI.
|