ruff/crates
cake-monotone 649610cc98
[red-knot] Support super (#17174)
## Summary

closes #16615 

This PR includes:

- Introduces a new type: `Type::BoundSuper`
- Implements member lookup for `Type::BoundSuper`, resolving attributes
by traversing the MRO starting from the specified class
- Adds support for inferring appropriate arguments (`pivot_class` and
`owner`) for `super()` when it is used without arguments

When `super(..)` appears in code, it can be inferred into one of the
following:

- `Type::Unknown`: when a runtime error would occur (e.g. calling
`super()` out of method scope, or when parameter validation inside
`super` fails)
- `KnownClass::Super::to_instance()`: when the result is an *unbound
super object* or when a dynamic type is used as parameters (MRO
traversing is meaningless)
- `Type::BoundSuper`: the common case, representing a properly
constructed `super` instance that is ready for MRO traversal and
attribute resolution

### Terminology

Python defines the terms *bound super object* and *unbound super
object*.

An **unbound super object** is created when `super` is called with only
one argument (e.g.
`super(A)`). This object may later be bound via the `super.__get__`
method. However, this form is rarely used in practice.

A **bound super object** is created either by calling
`super(pivot_class, owner)` or by using the implicit form `super()`,
where both arguments are inferred from the context. This is the most
common usage.

### Follow-ups

- Add diagnostics for `super()` calls that would result in runtime
errors (marked as TODO)
- Add property tests for `Type::BoundSuper`

## Test Plan

- Added `mdtest/class/super.md`

---------

Co-authored-by: Carl Meyer <carl@astral.sh>
2025-04-16 18:41:55 +00:00
..
red_knot dependencies: switch from chrono to jiff 2025-04-15 07:47:55 -04:00
red_knot_ide Sync vendored typeshed stubs (#17402) 2025-04-15 09:16:42 +02:00
red_knot_project [red-knot] Add regression tests for narrowing constraints cycles (#17408) 2025-04-15 07:27:54 -07:00
red_knot_python_semantic [red-knot] Support super (#17174) 2025-04-16 18:41:55 +00:00
red_knot_server [red-knot] Use concise message for the server (#17367) 2025-04-12 04:49:28 +00:00
red_knot_test red_knot_python_semantic: update revealed type snapshots 2025-04-10 13:21:00 -04:00
red_knot_vendored Sync vendored typeshed stubs (#17402) 2025-04-15 09:16:42 +02:00
red_knot_wasm Use concise message to show diagnostics in playground (#17357) 2025-04-11 22:44:24 +05:30
ruff dependencies: switch from chrono to jiff 2025-04-15 07:47:55 -04:00
ruff_annotate_snippets ruff_annotate_snippets: address unused code warnings 2025-04-07 08:24:08 -04:00
ruff_benchmark [red-knot] make large-union benchmark slow again (#17418) 2025-04-16 14:05:42 +00:00
ruff_cache
ruff_db red_knot_python_semantic: make TextRange required for reporting a lint diagnostic 2025-04-11 12:36:36 -04:00
ruff_dev Upgrade to Rust 1.86 and bump MSRV to 1.84 (#17171) 2025-04-03 15:59:44 +00:00
ruff_diagnostics
ruff_formatter Upgrade to Rust 1.86 and bump MSRV to 1.84 (#17171) 2025-04-03 15:59:44 +00:00
ruff_graph Pass ParserOptions to the parser (#16220) 2025-02-19 10:50:50 -05:00
ruff_index [red-knot] Don't use separate ID types for each alist (#16415) 2025-02-28 14:55:55 -05:00
ruff_linter [airflow] Extend AIR311 rules (#17422) 2025-04-16 12:40:15 -04:00
ruff_macros Upgrade to Rust 1.86 and bump MSRV to 1.84 (#17171) 2025-04-03 15:59:44 +00:00
ruff_notebook Upgrade to Rust 1.86 and bump MSRV to 1.84 (#17171) 2025-04-03 15:59:44 +00:00
ruff_python_ast Add Checker::import_from_typing (#17340) 2025-04-11 13:37:55 +00:00
ruff_python_ast_integration_tests Visit Identifier node as part of the SourceOrderVisitor (#17110) 2025-04-01 16:58:09 +02:00
ruff_python_codegen Upgrade to Rust 1.86 and bump MSRV to 1.84 (#17171) 2025-04-03 15:59:44 +00:00
ruff_python_formatter Don't add chaperone space after escaped quote in triple quote (#17216) 2025-04-11 10:21:47 +02:00
ruff_python_index
ruff_python_literal Preserve triple quotes and prefixes for strings (#15818) 2025-02-04 08:41:06 -05:00
ruff_python_parser Raise syntax error when \ is at end of file (#17409) 2025-04-15 21:26:12 +05:30
ruff_python_resolver Upgrade to Rust 1.86 and bump MSRV to 1.84 (#17171) 2025-04-03 15:59:44 +00:00
ruff_python_semantic Refactor semantic syntax error scope handling (#17314) 2025-04-09 14:23:29 -04:00
ruff_python_stdlib
ruff_python_trivia [red-knot] Ignore surrounding whitespace when looking for <!-- snapshot-diagnostics --> directives in mdtests (#16380) 2025-02-27 13:25:31 +00:00
ruff_python_trivia_integration_tests Pass ParserOptions to the parser (#16220) 2025-02-19 10:50:50 -05:00
ruff_server [red-knot] Don't use latency-sensitive for handlers (#17227) 2025-04-08 08:33:30 +02:00
ruff_source_file
ruff_text_size
ruff_wasm Bump 0.11.5 (#17337) 2025-04-10 11:57:44 -05:00
ruff_workspace Use python.typing.org for typing documentation links (#17323) 2025-04-09 20:38:20 +02:00