fune/docs/code-quality/coding-style/coding_style_python.rst
Sylvestre Ledru f9328d2021 Bug 1613526 - Create a code quality documentation and move the appropriate docs r=ahal
This for a few reasons:
* The summary becomes the landing page for code quality:
  https://firefox-source-docs.mozilla.org/tools/static-analysis/summary.html
* I don't think we need a full code quality category
* Closer to the source-code-doc
* All the files at the same place

Differential Revision: https://phabricator.services.mozilla.com/D61767

--HG--
rename : tools/lint/docs/coding-style/coding_style_java.rst => docs/code-quality/coding-style/coding_style_java.rst
rename : tools/lint/docs/coding-style/coding_style_other.rst => docs/code-quality/coding-style/coding_style_other.rst
rename : tools/lint/docs/coding-style/coding_style_python.rst => docs/code-quality/coding-style/coding_style_python.rst
rename : tools/lint/docs/coding-style/format_cpp_code_with_clang-format.rst => docs/code-quality/coding-style/format_cpp_code_with_clang-format.rst
rename : tools/clang-tidy/docs/summary.rst => docs/code-quality/index.rst
rename : tools/lint/docs/create.rst => docs/code-quality/lint/create.rst
rename : tools/lint/docs/index.rst => docs/code-quality/lint/index.rst
rename : tools/lint/docs/index.rst => docs/code-quality/lint/lint.rst
rename : tools/lint/docs/linters/codespell.rst => docs/code-quality/lint/linters/codespell.rst
rename : tools/lint/docs/linters/cpp-virtual-final.rst => docs/code-quality/lint/linters/cpp-virtual-final.rst
rename : tools/lint/docs/linters/eslint-plugin-mozilla.rst => docs/code-quality/lint/linters/eslint-plugin-mozilla.rst
rename : tools/lint/docs/linters/eslint-plugin-spidermonkey-js.rst => docs/code-quality/lint/linters/eslint-plugin-spidermonkey-js.rst
rename : tools/lint/docs/linters/eslint.rst => docs/code-quality/lint/linters/eslint.rst
rename : tools/lint/docs/linters/file-perm.rst => docs/code-quality/lint/linters/file-perm.rst
rename : tools/lint/docs/linters/file-whitespace.rst => docs/code-quality/lint/linters/file-whitespace.rst
rename : tools/lint/docs/linters/flake8.rst => docs/code-quality/lint/linters/flake8.rst
rename : tools/lint/docs/linters/l10n.rst => docs/code-quality/lint/linters/l10n.rst
rename : tools/lint/docs/linters/license.rst => docs/code-quality/lint/linters/license.rst
rename : tools/lint/docs/linters/lintpref.rst => docs/code-quality/lint/linters/lintpref.rst
rename : tools/lint/docs/linters/mingw-capitalization.rst => docs/code-quality/lint/linters/mingw-capitalization.rst
rename : tools/lint/docs/linters/perfdocs.rst => docs/code-quality/lint/linters/perfdocs.rst
rename : tools/lint/docs/linters/rstlinter.rst => docs/code-quality/lint/linters/rstlinter.rst
rename : tools/lint/docs/linters/rustfmt.rst => docs/code-quality/lint/linters/rustfmt.rst
rename : tools/lint/docs/usage.rst => docs/code-quality/lint/usage.rst
rename : tools/clang-tidy/docs/index.rst => docs/code-quality/static-analysis.rst
extra : moz-landing-system : lando
2020-02-11 09:11:44 +00:00

77 lines
2.4 KiB
ReStructuredText

===================
Python Coding style
===================
Coding style
~~~~~~~~~~~~
`black <https://github.com/psf/black/>`_ is the tool used to reformat the Python code.
Linting
~~~~~~~
The Python linting is done by `flake8 <https://gitlab.com/pycqa/flake8>`_.
flake8 is executed by mozlint both at review phase and in the CI.
See the :ref:`flake8` documentation for more information.
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.
.. code-block:: python
var += [
'foo',
'bar'
]
- Use ``CONFIG['CPU_ARCH'] {=arm}`` to test for generic classes of
architecture rather than ``CONFIG['OS_TEST'] {=armv7}`` (re: bug 886689).
Other advices
~~~~~~~~~~~~~
- Install the
`mozext <https://hg.mozilla.org/hgcustom/version-control-tools/file/default/hgext/mozext>`__
Mercurial extension, and address every issue reported on commit,
qrefresh, or the output of ``hg critic``.
- Follow `PEP 8 <https://www.python.org/dev/peps/pep-0008/>`__.
- 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).``
- Utilize tools like
`pylint <https://pypi.python.org/pypi/pylint>`__ or
`pychecker <http://pychecker.sourceforge.net>`__ to screen
sources for common problems.
- Testing/Unit tests, please write them.