@@ -486,8 +486,6 @@ class C[T]:
486486 {}
487487 """
488488 error_cases = [
489- "type Alias1[T] = lambda: T" ,
490- "type Alias2 = lambda: T" ,
491489 "type Alias3[T] = (T for _ in (1,))" ,
492490 "type Alias4 = (T for _ in (1,))" ,
493491 "type Alias5[T] = [T for _ in (1,)]" ,
@@ -499,6 +497,54 @@ class C[T]:
499497 r"Cannot use [a-z]+ in annotation scope within class scope" ):
500498 run_code (code .format (case ))
501499
500+ def test_lambda_in_alias_in_class (self ):
501+ code = """
502+ T = "global"
503+ class C:
504+ T = "class"
505+ type Alias = lambda: T
506+ """
507+ C = run_code (code )["C" ]
508+ self .assertEqual (C .Alias .__value__ (), "global" )
509+
510+ def test_lambda_in_alias_in_generic_class (self ):
511+ code = """
512+ class C[T]:
513+ T = "class"
514+ type Alias = lambda: T
515+ """
516+ C = run_code (code )["C" ]
517+ self .assertIs (C .Alias .__value__ (), C .__type_params__ [0 ])
518+
519+ def test_lambda_in_generic_alias_in_class (self ):
520+ # A lambda nested in the alias cannot see the class scope, but can see
521+ # a surrounding annotation scope.
522+ code = """
523+ T = U = "global"
524+ class C:
525+ T = "class"
526+ U = "class"
527+ type Alias[T] = lambda: (T, U)
528+ """
529+ C = run_code (code )["C" ]
530+ T , U = C .Alias .__value__ ()
531+ self .assertIs (T , C .Alias .__type_params__ [0 ])
532+ self .assertEqual (U , "global" )
533+
534+ def test_lambda_in_generic_alias_in_generic_class (self ):
535+ # A lambda nested in the alias cannot see the class scope, but can see
536+ # a surrounding annotation scope.
537+ code = """
538+ class C[T, U]:
539+ T = "class"
540+ U = "class"
541+ type Alias[T] = lambda: (T, U)
542+ """
543+ C = run_code (code )["C" ]
544+ T , U = C .Alias .__value__ ()
545+ self .assertIs (T , C .Alias .__type_params__ [0 ])
546+ self .assertIs (U , C .__type_params__ [1 ])
547+
502548
503549def make_base (arg ):
504550 class Base :
0 commit comments