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 - 2.29.
- Runs basedpyright type checking during
$ pants checkgoal against appropriate Python targets. - No dependency on Node.js, making it easier to integrate
pyrightchecks 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.jsonas well as the[tool.basedpyright]or[tool.pyright]sections of apyproject.tomlfile). - Explicit config file path support via
[basedpyright].configsection ofpants.tomlor 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 targetsPants 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
basedpyrightitself 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-lockfilesto create the lockfile if you haven't already. See Lockfiles for tools for an exampleBUILDand requirements file thatgenerate-lockfileswill use to create a resolve that includespytesta tool dependency. -
Specify the resolve from which to install
basedpyrightin 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