rules_mypy
Bazel rules for the Python linter mypy.
Setup
First ensure rules_venv is setup by referring to rules_venv setup.
Next, the mypy rules work mostly off of toolchains which are used to provide the necessary python targets (aka mypy)
for the process wrappers. Users will want to make sure they have a way to get the necessary python dependencies. Tools such as
req-compile can provide these.
With the appropriate dependencies available, a py_mypy_toolchain will need to be configured:
load("@rules_venv//python:defs.bzl", "py_library")
load("@rules_venv//python/mypy:defs.bzl", "py_mypy_toolchain")
py_library(
name = "mypy_deps",
deps = [
"@pip_deps//mypy",
# Types libraries can also be added here.
],
)
py_mypy_toolchain(
name = "toolchain_impl",
mypy = ":mypy_deps",
visibility = ["//visibility:public"]
)
toolchain(
name = "toolchain",
toolchain = ":toolchain_impl",
toolchain_type = "@rules_venv//python/mypy:toolchain_type",
visibility = ["//visibility:public"]
)
This toolchain then needs to be registered in the MODULE.bazel file.
register_toolchains("//tools/python/mypy:toolchain")
From here, py_mypy_test and the py_mypy_aspect
should now be usable. Both of these rules use a global flag to determine which mypy configuration
file to use with in actions. The following snippet can be added to the .bazelrc file to chose the
desired configuration file
build --@rules_mypy//python/mypy:config=//:.mypyrc.toml
Note that these files will need to be available via exports_files
Rules
Aspects
py_mypy_test
load("@rules_venv//python/mypy:defs.bzl", "py_mypy_test")
py_mypy_test(name, config, target)
A rule for running mypy on a Python target.
ATTRIBUTES
| Name | Description | Type | Mandatory | Default |
|---|---|---|---|---|
| name | A unique name for this target. | Name | required | |
| config | The config file (mypy.ini) containing mypy settings. | Label | optional | "@rules_venv//python/mypy:config" |
| target | The target to run mypy on. | Label | required |
py_mypy_toolchain
load("@rules_venv//python/mypy:defs.bzl", "py_mypy_toolchain")
py_mypy_toolchain(name, mypy)
A toolchain for the mypy formatter rules.
ATTRIBUTES
| Name | Description | Type | Mandatory | Default |
|---|---|---|---|---|
| name | A unique name for this target. | Name | required | |
| mypy | The mypy py_library to use with the rules. | Label | required |
py_mypy_aspect
load("@rules_venv//python/mypy:defs.bzl", "py_mypy_aspect")
py_mypy_aspect()
An aspect for running mypy on targets with Python sources.
ASPECT ATTRIBUTES
ATTRIBUTES