Outils pour utilisateurs

Outils du site


lang:python:linter

pylint

Site web

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 (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.

Site web

Archive v0.782 du 22/06/2020

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.

Site web

Archive v20.8b1 du 26/08/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.

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
lang/python/linter.txt · Dernière modification : 2021/04/11 20:48 de root