ruff/crates/red_knot/docs/mypy_primer.md
Carl Meyer 8fe2dd5e03
[red-knot] pull primer projects to run from file (#17473)
## Summary

The long line of projects in `mypy_primer.yaml` is hard to work with
when adding projects or checking whether they are currently run. Use a
one-per-line text file instead.

## Test Plan

Ecosystem check on this PR.
2025-04-18 21:20:18 +00:00

2.3 KiB

Running mypy_primer

Basics

For now, we use our own fork of mypy primer. It can be run using uvx --from "…" mypy_primer. For example, to see the help message, run:

uvx --from "git+https://github.com/astral-sh/mypy_primer.git@add-red-knot-support" mypy_primer -h

Alternatively, you can install the forked version of mypy_primer using:

uv tool install "git+https://github.com/astral-sh/mypy_primer.git@add-red-knot-support"

and then run it using uvx mypy_primer or just mypy_primer, if your PATH is set up accordingly (see: Tool executables).

Showing the diagnostics diff between two Git revisions

To show the diagnostics diff between two Git revisions (e.g. your feature branch and main), run:

mypy_primer \
    --type-checker knot \
    --old origin/main \
    --new my/feature \
    --debug \
    --output concise \
    --project-selector '/black$'

This will show the diagnostics diff for the black project between the main branch and your my/feature branch. To run the diff for all projects we currently enable in CI, use --project-selector "/($(paste -s -d'|' crates/red_knot_python_semantic/resources/primer/good.txt))\$".

You can also take a look at the full list of ecosystem projects. Note that some of them might still need a knot_paths configuration option to work correctly.

Avoiding recompilation

If you want to run mypy_primer repeatedly, e.g. for different projects, but for the same combination of --old and --new, you can use set the MYPY_PRIMER_NO_REBUILD environment variable to avoid recompilation of Red Knot:

MYPY_PRIMER_NO_REBUILD=1 mypy_primer …

Running from a local copy of the repository

If you are working on a local branch, you can use mypy_primer's --repo option to specify the path to your local copy of the ruff repository. This allows mypy_primer to check out local branches:

mypy_primer --repo /path/to/ruff --old origin/main --new my/local-branch …

Note that you might need to clean up /tmp/mypy_primer in order for this to work correctly.