Skip to main content
Version: 2.1 (deprecated)

mypy_source_plugin


A MyPy plugin loaded through source code.

To load a source plugin:

1. Write your plugin. See https://mypy.readthedocs.io/en/stable/extending_mypy.html.
2. Define a `mypy_source_plugin` target with the plugin's Python file(s) included in the
`sources` field.
3. Add `plugins = path.to.module` to your MyPy config file, using the name of the module
without source roots. For example, if your Python file is called
`pants-plugins/mypy_plugins/custom_plugin.py`, and you set `pants-plugins` as a source root,
then set `plugins = mypy_plugins.custom_plugin`. Set the `config`
option in the `[mypy]` scope to point to your MyPy config file.
4. Set the option `source_plugins` in the `[mypy]` scope to include this target's
address, e.g. `source_plugins = ["pants-plugins/mypy_plugins:plugin"]`.

To instead load a third-party plugin, set the option extra_requirements in the [mypy] scope (see https://www.pantsbuild.org/v2.0/docs/python-typecheck-goal). Set plugins in your config file, like you'd do with a source plugin.

This target type is treated similarly to a python_library target. For example, Python linters and formatters will run on this target.

You can depend on other targets and Pants's dependency inference will add them to the dependencies field, including any third-party requirements and python_library targets (even if their source files live in a different directory).

Other targets can depend on this target. This allows you to write a python_tests target for this code or a python_distribution target to distribute the plugin externally.

Backend: ``


sources

Iterable[str]
required

A list of files and globs that belong to this target. Paths are relative to the BUILD file's directory. You can ignore files/globs by prefixing them with !. Example: sources=['example.py', 'test_*.py', '!test_ignore.py'].

dependencies

Iterable[str] | None
default: None

Addresses to other targets that this target depends on, e.g. ['helloworld/subdir:lib']. Alternatively, you may include file names. Pants will find which target owns that file, and create a new target from that which only includes the file in its sources field. For files relative to the current BUILD file, prefix with ./; otherwise, put the full path, e.g. ['./sibling.txt', 'resources/demo.json']. You may exclude dependencies by prefixing with !, e.g. ['!helloworld/subdir:lib', '!./sibling.txt']. Ignores are intended for false positives with dependency inference; otherwise, simply leave off the dependency from the BUILD file.

description

str | None
default: None

A human-readable description of the target. Use ./pants list --documented :: to see all targets with descriptions.

interpreter_constraints

Iterable[str] | None
default: None

The Python interpreters this code is compatible with. Each element should be written in pip-style format, e.g. 'CPython==2.7._' or 'CPython>=3.6,<4'. You can leave off CPython as a shorthand, e.g. '>=2.7' will be expanded to 'CPython>=2.7'. Specify more than one element to OR the constraints, e.g. ['PyPy==3.7._', 'CPython==3.7.\*']means either PyPy 3.7 or CPython 3.7. If the field is not set, it will default to the option[python-setup].interpreter_constraints]. See https://www.pantsbuild.org/docs/python-interpreter-compatibility.

tags

Iterable[str] | None
default: None

Arbitrary strings that you can use to describe a target. For example, you may tag some test targets with 'integration_test' so that you could run ./pants --tags='integration_test' test :: to only run on targets with that tag.