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
This commit is contained in:
77
docs/code-quality/coding-style/coding_style_python.rst
Normal file
77
docs/code-quality/coding-style/coding_style_python.rst
Normal file
@@ -0,0 +1,77 @@
|
||||
===================
|
||||
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.
|
||||
Reference in New Issue
Block a user