basedpyright is a fast type checker for Python, forked from Pyright. Unlike Pyright, however, it does not depend on an active Node.js installation. This makes it simpler to integrate Pyright-compatible type checking into pure Python projects without depending on a separate JavaScript runtime.
basedpyright also provides several other benefits like baseline support.
This repo contains a plugin for the Pants monorepo build system to integrate basedpyright
into Pants's type checking workflow.
Supports Pants versions v2.27 and v2.28.
- Runs basedpyright type checking during
$ pants check
goal against appropriate Python targets. - No dependency on Node.js, making it easier to integrate
pyright
checks into monorepos that don't want to manage Node.js environments and dependencies for Python tooling. - Automatic config file detection in the workspace root (
pyrightconfig.json
as well as the[tool.basedpyright]
or[tool.pyright]
sections of apyproject.toml
file). - Explicit config file path support via
[basedpyright].config
section ofpants.toml
or CLI arguments , e.g.$ pants check --basedpyright-config="path/to/config.<json|toml>" ::
. - Supports installation from resolves
Add pants-basedpyright
to your plugins
list in pants.toml
:
[GLOBAL]
plugins = [
"pants-basedpyright==0.2.0",
]
Then enable the backend in your pants.toml
:
[GLOBAL]
backend_packages = [
# ...other backends...
"pants_basedpyright",
]
By default, the plugin will look for a pyrightconfig.json
or pyproject.toml
file in the workspace root.
A pyproject.toml
will be considered a config file candidate if it contains a [tool.basedpyright]
or [tool.pyright]
section,
as basedpyright
supports both formats for backwards compatibility with pyright
.
If both files are present, basedpyright
will give precedence to pyrightconfig.json
.
You can also specify a custom config file path in your pants.toml
that will take precedence over the default discovery behavior:
[basedpyright]
config = "path/to/your/pyproject.toml" # or "path/to/your/pyrightconfig.json"
Or via the CLI (taking precedence over the pants.toml
setting, if it exists):
pants check --basedpyright-config="path/to/your/pyproject.toml" :: # or "path/to/your/pyrightconfig.json"
See the Pants options docs for more details on general option setting.
Run basedpyright
checks:
pants check :: # Check all targets
Pants resolves provide a mechanism to manage multiple sets of third-party dependencies.
Using resolves, you can install a different version of basedpyright
than the default version specified by the plugin.
It's also possible to install basedpyright
from a resolve so the tool is version-locked alongside your other Python dependencies.
See Lockfiles for tools for more details.
- To install
basedpyright
itself from a particular Pants Python resolve, first ensure resolves are enabled in yourpants.toml
:
[python]
# ...other python settings...
enable_resolves = true
default_resolve = "python-default" # Optional, this is the default if not set
[python.resolves]
python-default = "3rdparty/python/python-default.lock"
custom-resolve-with-basedpyright = "path/to/your/custom-resolve.lock"
-
Run
pants generate-lockfiles
to create the lockfile if you haven't already. See Lockfiles for tools for an exampleBUILD
and requirements file thatgenerate-lockfiles
will use to create a resolve that includespytest
a tool dependency. -
Specify the resolve from which to install
basedpyright
in the[basedpyright]
section of yourpants.toml
:
[basedpyright]
install_from_resolve = "custom-resolve-with-basedpyright"
Now when you run pants check
, the plugin will use the basedpyright
version installed from the specified resolve.
MIT