Ceci est une ancienne révision du document !
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
Analyseur statique de code spécialisé dans le typing.
Arguments à activer, ici dans un fichier racine .mypy.ini
:
- .mypy.ini
[mypy] ignore_missing_imports = True follow_imports = silent show_column_numbers = True disallow_untyped_calls = True disallow_untyped_defs = True disallow_incomplete_defs = True check_untyped_defs = True no_implicit_optional = True warn_redundant_casts = True warn_unused_ignores = True warn_unreachable = True strict_equality = True
Il est aussi possible d'interdir l'utilisation des Any mais cela peut être problématique si on utilise une librairie avec ces propres classes et ne supporte pas le typage.
--disallow-any-unimported --disallow-any-expr --disallow-any-decorated --disallow-any-explicit --disallow-any-generics --disallow-subclassing-any
Black
Il existe 3 formateurs de code : autopep8, yapf et black. Ce dernier est le plus populaire en 2020.
La presque seule option disponible est :
--line-length=79
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
Il n'y a presque rien a paramétrer.
Il existe les modules Python flake8-bugbear
et flake8-import-order
.
- tox.ini
[flake8] ignore = E203, W503 application-import-names = ...,... import-order-style = google
On ignore les erreurs de formatage en conflit avec Black.
application-import-names
est utilisé par import-order
pour savoir si le module est un Third party ou interne au module.