Skip to content

Remove the Anys from mypy/config_parser.py #19637

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 16 commits into
base: master
Choose a base branch
from

Conversation

wyattscarpenter
Copy link
Contributor

@wyattscarpenter wyattscarpenter commented Aug 10, 2025

This pull request removes the Anys (and the ignore) from mypy/config_parser.py, fixing #19566. This is a refactor, but it also ensures that the class of bugs (unfriendly error messages) triggered by runtime type errors do not occur here further. Sort of. Somewhat. Actually there are still a number of implicit Anys in the code that sneak in through the stubs from typeshed, sad to say.

Even adding this block at the top doesn't stop them:

#mypy: disallow-any-expr, disallow_any_unimported, disallow_any_decorated, disallow_any_explicit, disallow_any_generics, disallow_subclassing_any

But, anyway, it prevents... some future bugs.

This comment has been minimized.

@wyattscarpenter wyattscarpenter changed the title Removes some of the Anys from mypy/config_parser.py Remove some of the Anys from mypy/config_parser.py Aug 10, 2025
@wyattscarpenter wyattscarpenter marked this pull request as ready for review August 10, 2025 14:40

This comment has been minimized.

@wyattscarpenter wyattscarpenter changed the title Remove some of the Anys from mypy/config_parser.py Remove the Anys from mypy/config_parser.py Aug 14, 2025
wyattscarpenter and others added 4 commits August 13, 2025 22:02
this actually did not matter for the code, I guess. The only reason to change it was because mypy was complaining because mypy doesn't allow redefinition that way (at least with these settings). But instead of beating mypy into doing what I want, I just made the types follow the error message here.
This attempts to get at mypy/config_parser.py:620: error: Incompatible types in assignment (expression has type tuple[int, int], variable has type Optional[bool])  [assignment]

however, I think this leaves v undefined in the else path, which is bad
@wyattscarpenter wyattscarpenter marked this pull request as draft August 14, 2025 05:25

This comment has been minimized.

@wyattscarpenter wyattscarpenter marked this pull request as ready for review August 14, 2025 07:06

This comment has been minimized.

@wyattscarpenter wyattscarpenter marked this pull request as draft August 14, 2025 07:20
@wyattscarpenter
Copy link
Contributor Author

wyattscarpenter commented Aug 14, 2025

Oh, that's funny. Now the only failing tests are the tests we put in to check the values the other way...

Makes sense, I suppose. (Although... it only fails some of the time?!)

return filename.lower().endswith(".toml")


def destructure_overrides(toml_data: dict[str, Any]) -> dict[str, Any]:
def destructure_overrides(toml_data: _TomlDictDict) -> _ParserHelper:
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Suggested change
def destructure_overrides(toml_data: _TomlDictDict) -> _ParserHelper:
def destructure_overrides(toml_data: _TomlDictDict) -> _TomlDictDict:

Copy link
Contributor

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

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.

1 participant