=====pylint=====
[[https://github.com/PyCQA/pylint|Site web]]
{{ :prog:pylint:pylint-2.6.0.zip |Archive v2.6.0}}
* 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|Black]] ([[https://github.com/psf/black/issues/378|Configurable Indent Levels?]], {{ :prog:pylint:configurable_indent_levels_issue_378_psf_black_2020-10-04_18_05_05_.html |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 :
[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 [[https://github.com/PyCQA/pylint/issues/3760|unsubscriptable-object errors with Python 3.9]] {{ :prog:pylint:unsubscriptable-object_errors_with_python_3.9_issue_3760_pycqa_pylint_2020-12-27_11_52_24_.html |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=====
Analyseur statique de code spécialisé dans le typing.
[[https://github.com/python/mypy|Site web]]
{{ :prog:mypy:mypy-0.782.zip |Archive v0.782 du 22/06/2020}}
====Options====
Fichier ''pyproject.toml''.
* Règles générales:
[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.
[[https://github.com/microsoft/pyright|Site web]]
====Options====
[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. [[https://github.com/microsoft/pyright/issues/10159|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.
[[https://github.com/psf/black|Site web]]
{{ :prog:black:black-20.8b1.zip |Archive v20.8b1 du 26/08/2020}}
====Options====
[tool.black]
line-length = 79
extend-exclude = '\.pyi$'
=====prospector=====
Un autre analyseur statique de code.
Fichier de configuration racine ''.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é [[https://github.com/microsoft/vscode-flake8/issues/135|Configure flake8 via pyproject.toml]].
[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