-
Notifications
You must be signed in to change notification settings - Fork 1.6k
[red-knot] Detect (some) invalid protocols #17488
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.
Looks good!
| && !(base_class.is_protocol(self.db()) | ||
| || base_class.is_known(self.db(), KnownClass::Object)) | ||
| { | ||
| self.context.report_lint_old( |
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.
Not sure if it makes sense to add new uses of report_lint_old?
But I guess there is some argument for keeping consistency with nearby code, and changing them all together?
cc @BurntSushi
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.
Heh, yeah, I also wondered about this... I think I'll keep it as-is for now, purely for local consistency if nothing else 😄 apologies to @BurntSushi if this causes annoyance for him!
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.
Yeah it's okay, I'll fix it up. Thanks for highlighting this!
e3d05ac to
d301713
Compare
* main: Update pre-commit dependencies (#17506) [red-knot] Simplify visibility constraint handling for `*`-import definitions (#17486) [red-knot] Detect (some) invalid protocols (#17488) [red-knot] Correctly identify protocol classes (#17487) Update dependency ruff to v0.11.6 (#17516) Update Rust crate shellexpand to v3.1.1 (#17512) Update Rust crate proc-macro2 to v1.0.95 (#17510) Update Rust crate rand to v0.9.1 (#17511) Update Rust crate libc to v0.2.172 (#17509) Update Rust crate jiff to v0.2.9 (#17508) Update Rust crate clap to v4.5.37 (#17507) Update astral-sh/setup-uv action to v5.4.2 (#17504) Update taiki-e/install-action digest to 09dc018 (#17503) [red-knot] infer attribute assignments bound in comprehensions (#17396) [red-knot] simplify gradually-equivalent types out of unions and intersections (#17467) [red-knot] pull primer projects to run from file (#17473)
* main: (37 commits) [red-knot] Add list of failing/slow ecosystem projects (#17474) [red-knot] mypy_primer: extend ecosystem checks (#17544) [red-knot] Move `InstanceType` to its own submodule (#17525) [red-knot] mypy_primer: capture backtraces (#17543) [red-knot] mypy_primer: Use upstream repo (#17500) [red-knot] `typing.dataclass_transform` (#17445) Update dependency react-resizable-panels to v2.1.8 (#17513) Update dependency smol-toml to v1.3.3 (#17505) Update dependency uuid to v11.1.0 (#17517) Update actions/setup-node action to v4.4.0 (#17514) [red-knot] Fix variable name (#17532) [red-knot] Add basic subtyping between class literal and callable (#17469) [`pyupgrade`] Add fix safety section to docs (`UP030`) (#17443) [`perflint`] Allow list function calls to be replaced with a comprehension (`PERF401`) (#17519) Update pre-commit dependencies (#17506) [red-knot] Simplify visibility constraint handling for `*`-import definitions (#17486) [red-knot] Detect (some) invalid protocols (#17488) [red-knot] Correctly identify protocol classes (#17487) Update dependency ruff to v0.11.6 (#17516) Update Rust crate shellexpand to v3.1.1 (#17512) ...
Summary
Stacked on top of #17487.
If a class includes
ProtocolorProtocol[]in its bases, it cannot also include any non-protocol classes in its bases, orTypeErroris raised at runtime. This PR adds the logic to detect this error by adding a new lint,invalid-protocol.Test Plan
existing mdtests updated