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

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.

Site web

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.

Site web

Archive v20.8b1 du 26/08/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
lang/python/linter.txt · Dernière modification : de root