| .. 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/ |