pymultilint


Namepymultilint JSON
Version 1.1.0 PyPI version JSON
download
home_pagehttps://github.com/gkze/multilint
SummaryUtility tying multiple code quality tools together
upload_time2023-06-07 20:14:24
maintainer
docs_urlNone
authorGeorge Kontridze
requires_python>=3.8,<4.0
licenseMIT
keywords lint code-quality tools
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Multilint (for Python)

[![Actions Test Workflow Widget](https://github.com/gkze/multilint/workflows/CI/badge.svg)](https://github.com/gkze/multilint/actions?query=workflow%3ACI)
[![PyPI Version](https://img.shields.io/pypi/v/pymultilint)](https://pypi.org/project/pymultilint/)
[![Pdoc Documentation](https://img.shields.io/badge/pdoc-docs-green)](https://gkze.github.io/multilint/multilint.html)

A utility tying together multiple linting and other code quality tools

## Intro

Multilint allows running several code quality tools under the same interface.
This is convenient as it saves time on writing multiple linter / formatter /
checker invocations every time in a project.

## Installation

Since there is an existing project called
[`multilint`](https://pypi.org/project/multilint/), this Multilint can be
installed as `pymultilint`:

```bash
$ pip3 install pymultilint
```

## Usage

Multilint exposes a CLI entry point:

```bash
$ multilint [paths ...]
```

It can optionally take a set of starting paths. There are no CLI options,
as Multilint strives to have all of its configuration codified (see
[Configurability](#configurability)).

Alternatively, Multilint is also usable via its API - either the
[`main`](multilint.py#L570) method, or the
[`Multilint`](multilint.py#L488) class.

## Supported Tools

Currently, Multilint integrates the following code quality tools:

* [Autoflake](https://github.com/myint/autoflake) - removes unused imports and
  unused variables as identified by [Pyflakes](https://github.com/PyCQA/pyflakes)
* [Isort](https://pycqa.github.io/isort/) - sorts imports according to specified
  orders
* [Black](https://black.readthedocs.io/en/stable/) - the self-proclaimed
  "uncompromising code formatter" - formats Python source with an opinionated
  style
* [Mypy](http://mypy-lang.org) - static type checker for Python
* [Pylint](https://www.pylint.org) - general best practices linter
* [Pydocstyle](http://www.pydocstyle.org/en/stable/) - in-source documentation
  best practices linter
* [Pyupgrade](https://github.com/asottile/pyupgrade) - upgrades Python syntax to
  the latest for the specified version

## Configurability

Additionally, for tools that do not currently support configuration via
`pyproject.toml`([PEP-621](https://www.python.org/dev/peps/pep-0621/)),
Multilint exposes a configuration interface for them. This allows for
centralized codification of configuration of all code quality tools being used
in a project.

Example relevant sections from a `pyproject.toml`:

```toml
[tool.autoflake]
recursive = true
in_place = true
ignore_init_module_imports = true
remove_all_unused_imports = true
remove_unused_variables = true
verbose = true
srcs_paths = ["somepackage"]

[tool.mypy]
src_paths = ["someotherpackage"]

[tool.multilint]
tool_order = [
  "autoflake",
  "isort",
  "pyupgrade",
  "black",
  "mypy",
  "pylint",
  "pydocstyle"
]
src_paths = ["."]
```

At the time of writing of this README (2020-01-31), neither
[Autoflake](https://github.com/myint/autoflake/issues/59) nor
[Mypy](https://github.com/python/mypy/issues/5205https://github.com/python/mypy/issues/5205)
support configuration via `pyproject.toml`. While support for each may or may
not be added at some point in the future, with multilint configuring these tools
is possible **today**.

Currently, the only two supported configuration option for Multilint are:

* `tool_order`, which defines the execution order of supported tools, and
* `src_paths`, which specifies the source paths (can be files and directories)
  for Multilint to operate on.

Each integrated tool additionally supports `src_dirs` as an override, in case
it is desired to target a specific tool at a different set of files
/ directories.

## Extending Multilint

Support for more tools may be added by subclassing the
[`ToolRunner`](multilint.py#L128) class and overriding the
[`.run(...)`](multilint.py#L160) method.

There are some utilities provided, such as:

* A logger that masquerades as a TextIO object to allow capturing tool output
  from within and wrapping it with preferred logging
* A dictionary for tool configuration that is automatically available in the
  `ToolRunner` class, as long as the tool is registered in
  * The [`Tool`](multilint.py#L48) enum,
  * The [`TOOL_RUNNERS`](multilint.py#L480) mapping, and declared
  * The [`DEFAULT_TOOL_ORDER`](multilint.py#L500) class variable of `Multilint`.

Documentation about adding support for more tools to Multilint may be added in
the future.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/gkze/multilint",
    "name": "pymultilint",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8,<4.0",
    "maintainer_email": "",
    "keywords": "lint,code-quality,tools",
    "author": "George Kontridze",
    "author_email": "george.kontridze@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/af/1d/7889ff20466a373d9934de560f924d38eb1d60132182b60095cbab0ed876/pymultilint-1.1.0.tar.gz",
    "platform": null,
    "description": "# Multilint (for Python)\n\n[![Actions Test Workflow Widget](https://github.com/gkze/multilint/workflows/CI/badge.svg)](https://github.com/gkze/multilint/actions?query=workflow%3ACI)\n[![PyPI Version](https://img.shields.io/pypi/v/pymultilint)](https://pypi.org/project/pymultilint/)\n[![Pdoc Documentation](https://img.shields.io/badge/pdoc-docs-green)](https://gkze.github.io/multilint/multilint.html)\n\nA utility tying together multiple linting and other code quality tools\n\n## Intro\n\nMultilint allows running several code quality tools under the same interface.\nThis is convenient as it saves time on writing multiple linter / formatter /\nchecker invocations every time in a project.\n\n## Installation\n\nSince there is an existing project called\n[`multilint`](https://pypi.org/project/multilint/), this Multilint can be\ninstalled as `pymultilint`:\n\n```bash\n$ pip3 install pymultilint\n```\n\n## Usage\n\nMultilint exposes a CLI entry point:\n\n```bash\n$ multilint [paths ...]\n```\n\nIt can optionally take a set of starting paths. There are no CLI options,\nas Multilint strives to have all of its configuration codified (see\n[Configurability](#configurability)).\n\nAlternatively, Multilint is also usable via its API - either the\n[`main`](multilint.py#L570) method, or the\n[`Multilint`](multilint.py#L488) class.\n\n## Supported Tools\n\nCurrently, Multilint integrates the following code quality tools:\n\n* [Autoflake](https://github.com/myint/autoflake) - removes unused imports and\n  unused variables as identified by [Pyflakes](https://github.com/PyCQA/pyflakes)\n* [Isort](https://pycqa.github.io/isort/) - sorts imports according to specified\n  orders\n* [Black](https://black.readthedocs.io/en/stable/) - the self-proclaimed\n  \"uncompromising code formatter\" - formats Python source with an opinionated\n  style\n* [Mypy](http://mypy-lang.org) - static type checker for Python\n* [Pylint](https://www.pylint.org) - general best practices linter\n* [Pydocstyle](http://www.pydocstyle.org/en/stable/) - in-source documentation\n  best practices linter\n* [Pyupgrade](https://github.com/asottile/pyupgrade) - upgrades Python syntax to\n  the latest for the specified version\n\n## Configurability\n\nAdditionally, for tools that do not currently support configuration via\n`pyproject.toml`([PEP-621](https://www.python.org/dev/peps/pep-0621/)),\nMultilint exposes a configuration interface for them. This allows for\ncentralized codification of configuration of all code quality tools being used\nin a project.\n\nExample relevant sections from a `pyproject.toml`:\n\n```toml\n[tool.autoflake]\nrecursive = true\nin_place = true\nignore_init_module_imports = true\nremove_all_unused_imports = true\nremove_unused_variables = true\nverbose = true\nsrcs_paths = [\"somepackage\"]\n\n[tool.mypy]\nsrc_paths = [\"someotherpackage\"]\n\n[tool.multilint]\ntool_order = [\n  \"autoflake\",\n  \"isort\",\n  \"pyupgrade\",\n  \"black\",\n  \"mypy\",\n  \"pylint\",\n  \"pydocstyle\"\n]\nsrc_paths = [\".\"]\n```\n\nAt the time of writing of this README (2020-01-31), neither\n[Autoflake](https://github.com/myint/autoflake/issues/59) nor\n[Mypy](https://github.com/python/mypy/issues/5205https://github.com/python/mypy/issues/5205)\nsupport configuration via `pyproject.toml`. While support for each may or may\nnot be added at some point in the future, with multilint configuring these tools\nis possible **today**.\n\nCurrently, the only two supported configuration option for Multilint are:\n\n* `tool_order`, which defines the execution order of supported tools, and\n* `src_paths`, which specifies the source paths (can be files and directories)\n  for Multilint to operate on.\n\nEach integrated tool additionally supports `src_dirs` as an override, in case\nit is desired to target a specific tool at a different set of files\n/ directories.\n\n## Extending Multilint\n\nSupport for more tools may be added by subclassing the\n[`ToolRunner`](multilint.py#L128) class and overriding the\n[`.run(...)`](multilint.py#L160) method.\n\nThere are some utilities provided, such as:\n\n* A logger that masquerades as a TextIO object to allow capturing tool output\n  from within and wrapping it with preferred logging\n* A dictionary for tool configuration that is automatically available in the\n  `ToolRunner` class, as long as the tool is registered in\n  * The [`Tool`](multilint.py#L48) enum,\n  * The [`TOOL_RUNNERS`](multilint.py#L480) mapping, and declared\n  * The [`DEFAULT_TOOL_ORDER`](multilint.py#L500) class variable of `Multilint`.\n\nDocumentation about adding support for more tools to Multilint may be added in\nthe future.\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Utility tying multiple code quality tools together",
    "version": "1.1.0",
    "project_urls": {
        "Documentation": "https://gkze.github.io/multilint/multilint.html",
        "Homepage": "https://github.com/gkze/multilint",
        "Repository": "https://github.com/gkze/multilint"
    },
    "split_keywords": [
        "lint",
        "code-quality",
        "tools"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "dee6acd617bc9c6b8faf9fd4825900f6d1559456c3b1c3b1d5a86c9b53b941ce",
                "md5": "0648105f2c173e88999f4d2aa0721979",
                "sha256": "7ee30214a98b7eb359b184b49938e15f56500b89f6b730637572940285bc20c1"
            },
            "downloads": -1,
            "filename": "pymultilint-1.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "0648105f2c173e88999f4d2aa0721979",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8,<4.0",
            "size": 9431,
            "upload_time": "2023-06-07T20:14:23",
            "upload_time_iso_8601": "2023-06-07T20:14:23.035619Z",
            "url": "https://files.pythonhosted.org/packages/de/e6/acd617bc9c6b8faf9fd4825900f6d1559456c3b1c3b1d5a86c9b53b941ce/pymultilint-1.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "af1d7889ff20466a373d9934de560f924d38eb1d60132182b60095cbab0ed876",
                "md5": "c0b3fdc29679af0d5c950049d2b749fa",
                "sha256": "1414fdc861fc7e0e3a22d0491c61b0af427bb5d99d5921b21fa8fea6bf77ff37"
            },
            "downloads": -1,
            "filename": "pymultilint-1.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "c0b3fdc29679af0d5c950049d2b749fa",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8,<4.0",
            "size": 8750,
            "upload_time": "2023-06-07T20:14:24",
            "upload_time_iso_8601": "2023-06-07T20:14:24.180113Z",
            "url": "https://files.pythonhosted.org/packages/af/1d/7889ff20466a373d9934de560f924d38eb1d60132182b60095cbab0ed876/pymultilint-1.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-06-07 20:14:24",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "gkze",
    "github_project": "multilint",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "pymultilint"
}
        
Elapsed time: 0.53576s