32cc6ae273
Fix pylint errors that can be fixed and mask those that seem to be incorrect. Signed-off-by: Simon Glass <sjg@chromium.org>
92 lines
2.8 KiB
ReStructuredText
92 lines
2.8 KiB
ReStructuredText
.. SPDX-License-Identifier: GPL-2.0+
|
|
|
|
Python code quality
|
|
===================
|
|
|
|
U-Boot has about 60k lines of Python code, mainly in the following areas:
|
|
|
|
- tests
|
|
- pytest hooks
|
|
- patman patch submission tool
|
|
- buildman build / analysis tool
|
|
- dtoc devicetree-to-C tool
|
|
- binman firmware packaging tool
|
|
|
|
`PEP 8`_ is used for the code style, with the single quote (') used by default for
|
|
strings and double quote for doc strings. All non-trivial functions should be
|
|
commented.
|
|
|
|
Pylint is used to help check this code and keep a consistent code style. The
|
|
build system tracks the current 'score' of the source code and detects
|
|
regressions in any module.
|
|
|
|
To run this locally you should use this version of pylint::
|
|
|
|
# pylint --version
|
|
pylint 2.11.1
|
|
astroid 2.8.6
|
|
Python 3.8.10 (default, Sep 28 2021, 16:10:42)
|
|
[GCC 9.3.0]
|
|
|
|
|
|
You should be able to select and this install other required tools with::
|
|
|
|
pip install pylint==2.11.1
|
|
pip install -r test/py/requirements.txt
|
|
pip install asteval pyopenssl
|
|
|
|
Note that if your distribution is a year or two old, you make need to use `pip3`
|
|
instead.
|
|
|
|
To configure pylint, make sure it has docparams enabled, e.g. with::
|
|
|
|
echo "[MASTER]" >> .pylintrc
|
|
echo "load-plugins=pylint.extensions.docparams" >> .pylintrc
|
|
|
|
Once everything is ready, use this to check the code::
|
|
|
|
make pylint
|
|
|
|
This creates a directory called `pylint.out` which contains the pylint output
|
|
for each Python file in U-Boot. It also creates a summary file called
|
|
`pylint.cur` which shows the pylint score for each module::
|
|
|
|
_testing 0.83
|
|
atf_bl31 -6.00
|
|
atf_fip 0.49
|
|
binman.cbfs_util 7.70
|
|
binman.cbfs_util_test 9.19
|
|
binman.cmdline 7.73
|
|
binman.control 4.39
|
|
binman.elf 6.42
|
|
binman.elf_test 5.41
|
|
...
|
|
|
|
This file is in alphabetical order. The build system compares the score of each
|
|
module to `scripts/pylint.base` (which must also be sorted and have exactly the
|
|
same modules in it) and reports any files where the score has dropped. Use
|
|
pylint to check what is wrong and fix up the code before you send out your
|
|
patches.
|
|
|
|
New or removed files results in an error which can be resolved by updating the
|
|
`scripts/pylint.base` file to add/remove lines for those files, e.g.::
|
|
|
|
meld pylint.cur scripts/pylint.base
|
|
|
|
If the pylint version is updated in CI, this may result in needing to regenerate
|
|
`scripts/pylint.base`.
|
|
|
|
|
|
Checking for errors
|
|
-------------------
|
|
|
|
If you only want to check for pylint errors, use::
|
|
|
|
PYTHONPATH=/path/to/scripts/dtc/pylibfdt/ make pylint_err
|
|
|
|
This will show only pylint errors. Note that you must set PYTHONPATH to point
|
|
to the pylibfdt directory build by U-Boot (typically the sandbox_spl board). If
|
|
you have used `make qcheck` then it sill be in `board-sandbox_spl`.
|
|
|
|
.. _`PEP 8`: https://www.python.org/dev/peps/pep-0008/
|