Skip to content

jacoblearned/pants-basedpyright

Repository files navigation

pants-basedpyright

PyPI - Version PyPI - License

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.

Features

  • 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 a pyproject.toml file).
  • Explicit config file path support via [basedpyright].config section of pants.toml or CLI arguments , e.g. $ pants check --basedpyright-config="path/to/config.<json|toml>" ::.
  • Supports installation from resolves

Installation

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",
]

Configuration

Config File Discovery

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.

Explicit Config File Path

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.

Usage

Run basedpyright checks:

pants check ::  # Check all targets

Advanced

Installing basedpyright from a Resolve

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.

  1. To install basedpyright itself from a particular Pants Python resolve, first ensure resolves are enabled in your pants.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"
  1. Run pants generate-lockfiles to create the lockfile if you haven't already. See Lockfiles for tools for an example BUILD and requirements file that generate-lockfiles will use to create a resolve that includes pytest a tool dependency.

  2. Specify the resolve from which to install basedpyright in the [basedpyright] section of your pants.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.

License

MIT

About

Pants plugin for basedpyright type checking

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published