python-lsp / pylsp-mypy

Mypy plugin for the Python LSP Server.
MIT License
118 stars 35 forks source link

Mypy plugin for PYLSP

.. image:: https://badge.fury.io/py/pylsp-mypy.svg :target: https://badge.fury.io/py/pylsp-mypy

.. image:: https://github.com/python-lsp/pylsp-mypy/workflows/Python%20package/badge.svg?branch=master :target: https://github.com/python-lsp/pylsp-mypy/

This is a plugin for the Python LSP Server_.

.. _Python LSP Server: https://github.com/python-lsp/python-lsp-server

It, like mypy, requires Python 3.8 or newer.

Installation

Install into the same virtualenv as python-lsp-server itself.

pip install pylsp-mypy

Configuration

pylsp-mypy supports the use of pyproject.toml for configuration. It can also be configuered using configs provided to the LSP server. The configuration keys are listed in the following.

.. list-table:: Configuration :header-rows: 1

Using a pyproject.toml for configuration, which is in fact the preferred way, your configuration could look like this:

::

[tool.pylsp-mypy]
enabled = true
live_mode = true
strict = true
exclude = ["tests/*"]

A pyproject.toml does not conflict with the legacy config file (deprecated) given that it does not contain a pylsp-mypy section. The following explanation uses the syntax of the legacy config file (deprecated). However, all these options also apply to the pyproject.toml configuration (note the lowercase bools). Depending on your editor, the configuration (found in a file called pylsp-mypy.cfg in your workspace or a parent directory) should be roughly like this for a standard configuration:

::

{
    "enabled": True,
    "live_mode": True,
    "strict": False,
    "exclude": ["tests/*"]
}

With dmypy enabled your config should look like this:

::

{
    "enabled": True,
    "live_mode": False,
    "dmypy": True,
    "strict": False
}

With overrides specified (for example to tell mypy to use a different python than the currently active venv), your config could look like this:

::

{
    "enabled": True,
    "overrides": ["--python-executable", "/home/me/bin/python", True]
}

With dmypy_status_file your config could look like this:

::

{
    "enabled": True,
    "live_mode": False,
    "dmypy": True,
    "strict": False,
    "dmypy_status_file": ".custom_dmypy_status_file.json"
}

With config_sub_paths your config could look like this:

::

{
    "enabled": True,
    "config_sub_paths": [".config"]
}

With report_progress your config could look like this:

::

{
    "enabled": True,
    "report_progress": True
}

Developing

Install development dependencies with (you might want to create a virtualenv first):

::

pip install -r requirements.txt

The project is formatted with black_. You can either configure your IDE to automatically format code with it, run it manually (black .) or rely on pre-commit (see below) to format files on git commit.

The project is formatted with isort_. You can either configure your IDE to automatically sort imports with it, run it manually (isort .) or rely on pre-commit (see below) to sort files on git commit.

The project uses two rst tests in order to assure uploadability to pypi: rst-linter as a pre-commit hook and rstcheck in a GitHub workflow. This does not catch all errors.

This project uses pre-commit_ to enforce code-quality. After cloning the repository install the pre-commit hooks with:

::

pre-commit install

After that pre-commit will run all defined hooks_ on every git commit and keep you from committing if there are any errors.

.. _black: https://github.com/psf/black .. _isort: https://github.com/PyCQA/isort .. _rst-linter: https://github.com/Lucas-C/pre-commit-hooks-markup .. _rstcheck: https://github.com/myint/rstcheck .. _pre-commit: https://pre-commit.com/ .. _all defined hooks: .pre-commit-config.yaml