Skip to content

Respect file config comments for stale modules#21444

Merged
ilevkivskyi merged 1 commit into
python:masterfrom
AA-Turner:fix-disable-error-code
May 8, 2026
Merged

Respect file config comments for stale modules#21444
ilevkivskyi merged 1 commit into
python:masterfrom
AA-Turner:fix-disable-error-code

Conversation

@AA-Turner
Copy link
Copy Markdown
Member

@AA-Turner AA-Turner commented May 8, 2026

In mypy 1.19, re-running mypy with a saved cache and a file containing an inline configuration comment (e.g. # mypy: disable-error-code="import-not-found") acted 'correctly', i.e. the same behaviour on the first run vs subsequent runs.

In mypy 1.20 and newer, this is no longer the case. Running mypy with a pre-existing cache fails to respect inline configuration comments for stale modules, leading to confusing false-positive errors that can be hard to debug.

This PR introduces a failing test as at current master, and then a fix for the issue. I believe this is the right fix, though happy to change as suggested by the maintainers, I'm not nearly as familiar with mypy internals.

Notably also from L2376-80, it's by design that file-level comments aren't cached:

    # Note that the options we store in the cache are the options as
    # specified by the command line/config file and *don't* reflect
    # updates made by inline config directives in the file. This is
    # important, or otherwise the options would never match when
    # verifying the cache.

I believe that this regression was introduced in #20773, cc @ilevkivskyi @JukkaL from that PR.

A

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 8, 2026

According to mypy_primer, this change doesn't affect type check results on a corpus of open source code. ✅

Copy link
Copy Markdown
Member

@ilevkivskyi ilevkivskyi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, LG!

(fun part is that the order is already correct in the parallel mode)

@ilevkivskyi ilevkivskyi merged commit 284a6cc into python:master May 8, 2026
24 checks passed
@AA-Turner AA-Turner deleted the fix-disable-error-code branch May 8, 2026 19:55
@JukkaL JukkaL mentioned this pull request May 10, 2026
2 tasks
JukkaL pushed a commit that referenced this pull request May 10, 2026
In mypy 1.19, re-running `mypy` with a saved cache and a file containing
an inline configuration comment (e.g. `# mypy:
disable-error-code="import-not-found"`) acted 'correctly', i.e. the same
behaviour on the first run vs subsequent runs.

In mypy 1.20 and newer, this is no longer the case. Running `mypy` with
a pre-existing cache fails to respect inline configuration comments for
stale modules, leading to confusing false-positive errors that can be
hard to debug.

This PR introduces a failing test as at current master, and then a fix
for the issue. I believe this is the right fix, though happy to change
as suggested by the maintainers, I'm not nearly as familiar with mypy
internals.

Notably also from L2376-80, it's by design that file-level comments
aren't cached:

```python
    # Note that the options we store in the cache are the options as
    # specified by the command line/config file and *don't* reflect
    # updates made by inline config directives in the file. This is
    # important, or otherwise the options would never match when
    # verifying the cache.
```

I believe that this regression was introduced in #20773

A

Co-authored-by: Adam Turner <turner@hudson-trading.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants