mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-11-03 21:48:15 +00:00 
			
		
		
		
	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/
 |