Table des matières
pylint
- Arguments à mettre par défaut
pylint --enable=all --disable=missing-module-docstring,missing-function-docstring,missing-class-docstring,locally-disabled,use-symbolic-message-instead,suppressed-message
pylint respecte l'ordre d'entrée des paramètres. Un --enable=all réactive les --disable le précédent.
--indent-string="\_\_" et --indent-after-paren=2 peuvent être utilisés pour forcer une indentation à 2 espaces. Mais Python recommande 4 espaces et sa personnalisation n'est pas supporté par Black (Configurable Indent Levels?, archive du 25/06/2018 le 04/10/2020).
--disable=locally-disabled,use-symbolic-message-instead,suppressed-message sont pour ne pas afficher d'avertissements si des avertissements sont masqués.
- Désactiver des avertissements spécifiques
Ajouter sur la ligne problématique :
# pylint: disable=R0913
Le numéro s'obtient depuis le message d'erreur de pylint. Il est aussi possible d'avoir la liste complète avec la commande pylint --list-msgs.
Configuration par fichier
Création du fichier de base : pylint --generate-rcfile > .pylintrc
Modification :
- .pylintrc
[MESSAGES CONTROL] enable=all disable=missing-module-docstring, missing-function-docstring, missing-class-docstring, locally-disabled, use-symbolic-message-instead, suppressed-message, bad-continuation, too-many-locals, fixme, too-few-public-methods, unsubscriptable-object, cell-var-from-loop
cell-var-from-loop peut être intéressant,
unsubscriptable-object a été ajouté car il crée des faux positifs unsubscriptable-object errors with Python 3.9 Archive du 22/11/2020 le 27/12/2020
bad-continuation : pylint peut être en conflit avec Black.
Messages d'erreur
Unable to import:
pylint affiche ce message pour les sous-modules. Il faut avoir le fichier vide __init__.py dans chaque sous-dossier ayant des fichiers python. Normalement, ce fichier n'est plus nécessaire depuis Python 3 mais pylint continue à en avoir besoin.
mypy
Options
Fichier pyproject.toml.
- Règles générales:
- pyproject.toml
[tool.mypy] files = "." exclude = [".*venv.*", "install", "vcpkg"] follow_imports = "skip" show_column_numbers = true ignore_missing_imports = true # Importations disallow_any_unimported = true disallow_any_expr = true disallow_any_decorated = true disallow_any_explicit = true disallow_any_generics = true disallow_subclassing_any = true # Annotations disallow_untyped_calls = true disallow_untyped_defs = true disallow_incomplete_defs = true check_untyped_defs = true disallow_untyped_decorators = true # None et Optional implicit_optional = true strict_optional = true # Warnings warn_redundant_casts = true warn_unused_ignores = true warn_no_return = true warn_return_any = true warn_unreachable = true # Comportement strict strict_equality = true extra_checks = true local_partial_types = true # Divers implicit_reexport = false strict = true
- Règles spécifiques à un ou plusieurs fichiers
Pour le module cmake_build_extension, ignorer les imports manquants. De toute façon, ce module n'est pas typé.
[[tool.mypy.overrides]] module = ["cmake_build_extension"] ignore_missing_imports = true
Pour le fichier ultrasound_rawdata_exchange/bindings.pyi, ignorer les erreurs car ce fichier est généré automatiquement.
[[tool.mypy.overrides]] module = "ultrasound_rawdata_exchange.bindings" ignore_errors = true
pyright
Analyseur statique de code spécialisé dans le typing.
Options
- pyproject.toml
[tool.pyright] ignore = ["python/ultrasound_rawdata_exchange/bindings.pyi", "install"] typeCheckingMode = "strict"
exclude : les fichiers / dossiers ne sont pas analysés. ignore : les fichiers / dossiers sont analysés mais les erreurs ne sont pas rapportées (intéressant pour les .pyi auto générés).
Attention à exclude qui peut ralentir très fortement. Pyright is surprisingly slow, possibly hangs, when given an exclude path.
Black
Il existe 3 formateurs de code : autopep8, yapf et black. Ce dernier est le plus populaire en 2020.
Options
- pyproject.toml
[tool.black] line-length = 79 extend-exclude = '\.pyi$'
prospector
Un autre analyseur statique de code.
Fichier de configuration racine .prospector.yaml :
- .prospector.yaml
strictness: veryhigh pylint: disable: - too-many-locals - too-few-public-methods - fixme pep8: disable: - W503
flake8
Analyseur du style de code et inclut pycodestyle (vérification d).
On peut installer les modules flake8-bugbear, flake8-import-order, pep8-naming.
Ne pas utiliser flake8-import-order mais formater automatiquement le code avec isort.
Options
Il faut utiliser le fichier tox.ini. pyproject.toml ne sera pas supporté Configure flake8 via pyproject.toml.
- tox.ini
[flake8] # Désactiver les conflits de formattage avec black. ignore = E203, W503 max-line-length = 999 exclude = install,*venv*,*.pyi,__init__.py import-order-style = google # Est utilisé par ''import-order'' pour savoir si le module est un Third party ou interne au module. application-import-names = ...
safety
Vérifie si les paquets contenus dans un fichier requirements.txt contiennent des failles de sécurité connues (se base sur le numéro de version).
safety check -r requirements.txt
