-
Notifications
You must be signed in to change notification settings - Fork 1.7k
[red-knot] Add redundant-cast error #17100
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
Conversation
|
carljm
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is great, really impressive first PR, thank you! I do have some suggestions, though ;)
crates/red_knot_python_semantic/resources/mdtest/directives/cast.md
Outdated
Show resolved
Hide resolved
8a77256 to
adbb233
Compare
96a2734 to
2826e31
Compare
carljm
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks great!
Head branch was pushed to by a user without write access
c4de6c6 to
26b59eb
Compare
|
The mypy_primer hits don't look ideal: we may want to special-case |
|
Sorry... I ran cargo and black on the docs to fix the errors. |
Oh yeah, good call. We probably should do that before landing this, to avoid adding new false positives. Looks like we need to special case "Todo type" and "union with todo type" to avoid adding new false positives. |
Would this be some check |
|
We usually just add methods on |
Ok, I think I was able to implement this. I wasn't sure how to specify an explicity Todo type in |
|
I think it's OK not to add a test for this -- it's not important behavior we want to preserve, it's just a temporary thing to reduce false positives from the ecosystem check. So the ecosystem check itself will avoid regression (and whenever it doesn't see any false positives anymore, then we also don't want to keep this code around anymore.) |
|
Looks great, thanks! And ecosystem check is now reporting no changes. Setting to auto-merge when CI finishes. |
## Summary There are quite a few places we infer `Todo` types currently, and some of them are nested somewhat deeply in type expressions. These can cause spurious issues for the new `redundant-cast` diagnostics. We fixed all the false positives we saw in the mypy_primer report before merging #17100, but I think there are still lots of places where we'd emit false positives due to this check -- we currently don't run on that many projects at all in our mypy_primer check: https://github.com/astral-sh/ruff/blob/d0c8eaa0923352ccc4ec30c9fac1f573f20998b3/.github/workflows/mypy_primer.yaml#L71 This PR fixes some more false positives from this diagnostic by making the `Type::contains_todo()` method more expansive. ## Test Plan I added a regression test which causes us to emit a spurious diagnostic on `main`, but does not with this PR.
* main: [red-knot] Add property tests for callable types (#17006) [red-knot] Disjointness for callable types (#17094) [red-knot] Flatten `Type::Callable` into four `Type` variants (#17126) mdtest.py: do a full mdtest run immediately when the script is executed (#17128) [red-knot] Fix callable subtyping for standard parameters (#17125) [red-knot] Fix more `redundant-cast` false positives (#17119) Sync vendored typeshed stubs (#17106) [red-knot] support Any as a class in typeshed (#17107) Visit `Identifier` node as part of the `SourceOrderVisitor` (#17110) [red-knot] Don't infer Todo for quite so many tuple type expressions (#17116) CI: Run pre-commit on depot machine (#17120) Error instead of `panic!` when running Ruff from a deleted directory (#16903) (#17054) Control flow graph: setup (#17064) [red-knot] Playground improvements (#17109) [red-knot] IDE crate (#17045) Update dependency vite to v6.2.4 (#17104) [red-knot] Add redundant-cast error (#17100) [red-knot] Narrowing on `in tuple[...]` and `in str` (#17059)
Summary
Following up from earlier discussion on Discord, this PR adds logic to flag casts as redundant when the inferred type of the expression is the same as the target type. It should follow the semantics from mypy.
Example:
However, I don't think the comparison is quite right yet...there's probably some type comparison behavior I'm misunderstanding. Hopefully it's close enough that the fix is straightforward.