Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Propagate can_see_class_scope to annotation scopes in type param blocks
Annotation scopes now inherit can_see_class_scope from parent scopes
(not just direct Class parents), allowing annotations in generic
methods inside classes to access class variables via __classdict__.

Remove 3 expectedFailure markers from test_type_params.
  • Loading branch information
youknowone committed Feb 11, 2026
commit 6a6e3755c7a50d008e3f408060bd5186fee69a6c
3 changes: 0 additions & 3 deletions Lib/test/test_type_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,6 @@ def func[A]():
with self.assertRaisesRegex(NameError, "name 'A' is not defined"):
run_code(code)

@unittest.expectedFailure # TODO: RUSTPYTHON; NameError: name 'x' is not defined
def test_method_access_01(self):
ns = run_code("""
class ClassA:
Expand Down Expand Up @@ -318,7 +317,6 @@ def funcB[B](self): ...
with self.assertRaisesRegex(NameError, "name 'B' is not defined"):
run_code(code)

@unittest.expectedFailure # TODO: RUSTPYTHON; NameError: name 'x' is not defined
def test_class_scope_interaction_01(self):
ns = run_code("""
class C:
Expand Down Expand Up @@ -484,7 +482,6 @@ class Inner[U](make_base([T for _ in (1,)]), make_base(T)):
self.assertEqual(base1.__arg__, [ns["C"].__type_params__[0]])
self.assertEqual(base2.__arg__, "class")

@unittest.expectedFailure # TODO: RUSTPYTHON; AssertionError: ~T != 'class'
def test_gen_exp_in_generic_method(self):
code = """
class C[T]:
Expand Down
3 changes: 2 additions & 1 deletion crates/codegen/src/symboltable.rs
Original file line number Diff line number Diff line change
Expand Up @@ -951,7 +951,8 @@ impl SymbolTableBuilder {
/// Creates or reuses the annotation block for the current scope
fn enter_annotation_scope(&mut self, line_number: u32) {
let current = self.tables.last_mut().unwrap();
let can_see_class_scope = current.typ == CompilerScope::Class;
let can_see_class_scope =
current.typ == CompilerScope::Class || current.can_see_class_scope;
let has_conditional = current.has_conditional_annotations;

// Create annotation block if not exists
Expand Down