# Code linting

IVRE uses code linters to prevent some easy-to-spot (for a computer) mistakes and to enforce a consistent code style (or at least, attempt to do so).

So far, only the Python code uses such linters (Flake8, Pylint, Mypy, Bandit and Black). Adding similar code linting capabilities to the Zeek scripts (zeek/), LUA capabilities to the Zeek scripts (zeek/), LUA (patches/nmap/scripts/) and JavaScript / HTML (web/static/) could be a good PR idea!

For all the code and the documentation, we also use Codespell to prevent typos.

## Running the linters

To install the Python code linters and Codespell you can simply use the `requirements-linting.txt` file with Pip, or use any method to install the latest versions of the `black`, `codespell`, `flake8` and `pylint` Python modules.

The script `pkg/runchecks` will run all the tests for you with the expected options and exceptions.

## GitHub actions

Code linting and spell checking is performed in a dedicated GitHub action (see GitHub actions), togethter with the Maxmind tests. Pylint and Codespell only run with Python 3.11, while Flake8 runs with all Python versions.