aboutsummaryrefslogtreecommitdiff
path: root/doc/develop
diff options
context:
space:
mode:
authorSimon Glass2021-11-21 20:48:40 -0700
committerTom Rini2022-01-24 17:36:15 -0500
commitfeafc61ea66c1f1f36aadda7d36a63814f086a4e (patch)
tree92cbc7531fa462dfd710c361c8b5421f4e7ef334 /doc/develop
parentc761cf778fc6fe309f4be20a9e157165bc3b4841 (diff)
Makefile: Add a pylint checker to the build
At present the Python code in U-Boot is somewhat inconsistent, with some files passing pylint quite cleanly and others not. Add a way to track progress on this clean-up, by checking that no module has got any worse as a result of changes. This can be used with 'make pylint'. Signed-off-by: Simon Glass <sjg@chromium.org> [trini: Re-generate pylint.base]
Diffstat (limited to 'doc/develop')
-rw-r--r--doc/develop/index.rst8
-rw-r--r--doc/develop/python_cq.rst80
2 files changed, 88 insertions, 0 deletions
diff --git a/doc/develop/index.rst b/doc/develop/index.rst
index c84b10ea887..97148875ef4 100644
--- a/doc/develop/index.rst
+++ b/doc/develop/index.rst
@@ -62,3 +62,11 @@ Refactoring
checkpatch
coccinelle
moveconfig
+
+Code quality
+------------
+
+.. toctree::
+ :maxdepth: 1
+
+ python_cq
diff --git a/doc/develop/python_cq.rst b/doc/develop/python_cq.rst
new file mode 100644
index 00000000000..3f99f1d9c0b
--- /dev/null
+++ b/doc/develop/python_cq.rst
@@ -0,0 +1,80 @@
+.. 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`.
+
+
+.. _`PEP 8`: https://www.python.org/dev/peps/pep-0008/