Metadata-Version: 2.1
Name: multilint
Version: 3.0.0
Summary: Run multiple python linters easily
Home-page: https://github.com/adamchainz/multilint
Author: Adam Johnson
Author-email: me@adamj.eu
License: ISC license
Keywords: lint,flake8,pep8,pycodestyle,codestyle,mccabe,setup.py
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: ISC License (ISCL)
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Requires-Python: >=3.5

=========
multilint
=========

.. image:: https://img.shields.io/pypi/v/multilint.svg
        :target: https://pypi.python.org/pypi/multilint

.. image:: https://img.shields.io/travis/adamchainz/multilint.svg
        :target: https://travis-ci.org/adamchainz/multilint

Run multiple python linters easily.

Installation and Usage
----------------------

Install with **pip**:

.. code-block:: sh

    pip install multilint

Run with:

.. code-block:: sh

    multilint

Python 3.5-3.7 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 <https://pypi.org/project/black/>`_, to autoformat code
* `Flake8 <https://pypi.org/project/flake8/>`, to check code quality
* `Isort <https://pypi.org/project/isort/>`, in 'diff' mode to show where imports aren't sorted
* `Modernize <https://pypi.org/project/modernize/>`, in 'diff' mode to show where python 2/3 compatibility with
  ``six`` is missing
* ``python setup.py check``, to check your ``setup.py`` is well
  configured. This will require ``docutils``, and also ``Pygments`` if your
  ``long_description`` uses any code highlighting.

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:

.. code-block:: ini

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

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

.. code-block:: sh

    multilint path/my_file.py path/folder1

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.7 and do your linting on Python
3.7 would look like:

.. code-block:: ini

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

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

    [testenv:py37-codestyle]
    commands = multilint

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


=======
History
=======

Pending Release
---------------

.. Modify the below with new release notes

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 <https://pypi.org/project/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.


