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

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)
  • darglint - checks if your docstrings are matching functions definitions (for example, if you remembered to describe all the parameters and the return value)
  • 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