Skip to main content

Run multiple python linters easily

Project description

multilint

https://img.shields.io/pypi/v/multilint.svg https://img.shields.io/travis/adamchainz/multilint.svg https://img.shields.io/badge/code%20style-black-000000.svg

Run multiple python linters easily.

Installation and Usage

Install with pip:

pip install multilint

Run with:

multilint

Python 3.5-3.8 supported.

How It Works

I like to keep my projects tidy with a standard set of linters. Running them all turned out to be easier with a wrapper script, which I ended up copy-pasting between them all. This project stops me needing to copy/paste, centralizing running all these neat tools.

In order, it will check if these linters are installed, and if so, run them:

  • Black, to autoformat code

  • Flake8, to check code quality

  • Isort, in ‘diff’ mode to show where imports aren’t sorted

  • Modernize, in ‘diff’ mode to show where python 2/3 compatibility with six is missing

If any of them fail, multilint stops and dies with a non-zero exit code. Otherwise it succeeds!

You need to configure the paths that will be linted (by default, only setup.py is linted). Put a section in your setup.cfg like:

[tool:multilint]
paths = my_package
        tests
        setup.py

You can also pass the paths as arguments to multilint, which will override the settings, like:

multilint path/my_file.py path/folder1

Note: previously multilint supported running setup.py check if you passed a setup.py file. This was removed as the command is deprecated. You should instead use twine check as per the python packaging documentation.

Usage With tox

I normally run my tests with tox. An example tox.ini to use multilint to run your tests on Python 3.5-3.8 and do your linting on Python 3.8 would look like:

[tox]
envlist =
    py{35,36,37,38},
    py38-codestyle

[testenv]
deps = -rrequirements.txt
commands = pytest

[testenv:py38-codestyle]
commands = multilint

Then just put multilint, plus the linters you want it to run (e.g. flake8) in your requirements.txt.

History

4.1.0 (2019-11-15)

  • Support Python 3.8.

  • Converted setuptools metadata to configuration file. This meant removing the __version__ attribute from the package. If you want to inspect the installed version, use importlib.metadata.version("multilint") (docs / backport).

4.0.0 (2019-08-11)

  • Drop setup.py check support since twine check is the new, more complete, recommended way of checking distributable file correctness, as per the warning:

    warning: Check: This command has been deprecated. Use `twine check`
    instead: https://packaging.python.org/guides/making-a-pypi-friendly-readme#validating-restructuredtext-markup

    multilint can’t run twine check since it needs running on your dist files instead of the setup.py file.

    You can integrate it on a typical tox setup with an extra command tox dist/*. For more information see the twine check documentation and the packaging documentation.

3.0.0 (2019-05-13)

  • Drop Python 2 and 3.4 support, only Python 3.5+ is supported now.

  • Add support for running Black, the Python code auto-formatter.

  • Drop support for Flake8 < 3.0.0.

2.4.0 (2018-09-30)

  • Support positional arguments for paths.

2.3.0 (2018-04-28)

  • Fix for modernize 0.6.1+

  • Run modernize on the multilint codebase itself, so it now requires six

2.2.1 (2018-03-08)

  • Fix crash when setup.cfg doesn’t exist.

2.2.0 (2017-09-19)

  • Add --skip argument which can be used to skip particular linters even though they’re installed.

2.1.0 (2017-06-02)

  • Use entry_points in setup.py instead of scripts

  • Support python -m multilint

2.0.2 (2016-12-06)

  • Don’t invoke python setup.py check if there is no setup.py.

2.0.1 (2016-10-20)

  • Remove default for paths in setup.cfg.

  • Check that paths exist before running the linters.

2.0.0 (2016-09-24)

  • Use the config header tool:multilint in setup.cfg, rather than multilint, to avoid clashing with any potential setup.py commands. Your setup.cfg will need updating.

1.0.2 (2016-07-26)

  • Work with flake8 3.0+ which changed the way its main function worked.

1.0.1 (2016-07-16)

  • Fix modernize running on Python 2.

  • Run isort in the same Python process rather than with subprocess

  • Properly gate flake8 and isort so that they run only if they are installed.

1.0.0 (2016-06-19)

  • First release on PyPI.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

multilint-4.1.0.tar.gz (6.9 kB view details)

Uploaded Source

Built Distribution

multilint-4.1.0-py3-none-any.whl (6.7 kB view details)

Uploaded Python 3

File details

Details for the file multilint-4.1.0.tar.gz.

File metadata

  • Download URL: multilint-4.1.0.tar.gz
  • Upload date:
  • Size: 6.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.4

File hashes

Hashes for multilint-4.1.0.tar.gz
Algorithm Hash digest
SHA256 795573aeb096b939f3c00b343c113be86b027d8347e9b587169b3a7de6b6810f
MD5 b6a9bd3126e3a9006fdd6e60fe8b99b2
BLAKE2b-256 ba6772fa3824d4ae464771852dc848a1c7e8b509baf07827e8a43ab3af3ea0fa

See more details on using hashes here.

File details

Details for the file multilint-4.1.0-py3-none-any.whl.

File metadata

  • Download URL: multilint-4.1.0-py3-none-any.whl
  • Upload date:
  • Size: 6.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.4

File hashes

Hashes for multilint-4.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ff3919f7af9b4e6db6306258715160a33537979cd494e0b611f224517c035478
MD5 93f85a466a29d5b4b0ed75ce5ba265df
BLAKE2b-256 f64c804e9efc559dd8830bb3e3a525c21f99b06065211235dd68e4ad9507bb0e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page