Vai al contenuto

Flake8

Oltre agli strumenti che consentono di formattare il codice in Python esistono diversi linter e analizzatori statici di codice.

Uno dei più popolari Linter su Python è Flake8.

Flake8 non cambia il codice in un progetto, ma fornisce uno strumento di warnings in real time

Flake8 combina tre progetti differenti:

  • pyflakes = da warnings su moduli non usati, variabili non definite, …
  • pycodestyle = da errori riguardo alle violazioni di PEP8
  • McCabe (disabilitato di default) = fornisce warnings se le funzioni sono troppo complesse o complicate

Un altro vantaggio di Flake8 che lo ha reso così popolare è il massivo catalogo di plugins ed estensioni che si possono installare ed usare per estendere le funzionalità base della libreria.

Per un elenco completo delle estensioni: https://github.com/DmytroLitvinov/awesome-flake8-extensions

Alcune estensioni utili:

  • flake8-builtins - makes sure you don’t use Python builtins as variables or parameters
  • flake8-bugbear - an additional set of checks (some are opinionated) that will complain when you, for example:
  • Use except: instead of except Exception:
  • Use ++n
  • Use .strip() on a multiline string
  • Use a length-one tuple
  • flake8-comprehensions - helps you write better list/set/dictionary comprehensions
  • flake8-docstrings - enforces PEP257
  • flake8-eradicate - reports commented out code (“dead code”)
  • flake8-isort - check if your import statements are sorted according to the isort recommendations
  • flake8-broken-line - complains you use backslash for line breaks (try using parenthesis or tripple quotes instead)
  • flake8-quotes - if you prefer single quotes over double quotes (or the other way around), this plugin can help you enforce them
  • flake8-rst-docstrings - looks for problems in your documentation (usefull if you are using Sphinx that we will talk about later)
  • flake8-mutable - checks that you don’t use mutable default arguments
  • flake8-bandit - introduce the capabilities of bandit inside flake8

Installare Flake 8

pip install flake8

#anche qui è meglio utilizzare pipx
pipx install flake8

#Installare estensioni
pip install flake8-docstrings flake8-isort
#Ancora meglio sempre con pipx
pipx inject flake8 flake8-docstrings flake8-isort flake8-bandit

# Se esce un errore di path fare
pipx ensurepath
# Riavviare il terminale

Lanciare Flake8

flake8 my_project #my_project = cartella di progetto

Per usare al meglio Flake8 il consiglio è sempre quello di integrarlo all’interno di Visual Studio Code lanciando il comando:

Python: Select Linter

Per progetti grandi e per configurare al meglio Flake8 con tutti i suoi plugin è possibile utilizzare anche l’ottima libreria: FlakeHell che è un wrapper che consente di definire un pyproject.toml file (lo stesso di Poetry) e di personalizzare le impostazioni al suo interno.

Attenzione: la libreria di FlakeHell non è piu aggiornata dal 2019 (è archiviata su github) tuttavia è stabile e perfettamente utilizzabile

Ci sono tantissimi altri strumenti che consentono di controllare il codice e di segnalare eventuali errori man mano che lo state scrivendo.

  • pylint
  • pydocstyle
  • bandit
  • vulture
  • wemake-python-style guide
  • prospector

Tuttavia vi consiglio di utilizzare Flake8 e Blake nei vostri progetti e di inserire anche Bandit