81 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.4 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`.
 | |
| 
 | |
| 
 | |
| .. _`PEP 8`: https://www.python.org/dev/peps/pep-0008/
 |