@@ -261,16 +261,15 @@ def check_top_level(self, node: MypyFile) -> None:
261
261
262
262
def handle_cannot_determine_type (self , name : str , context : Context ) -> None :
263
263
node = self .scope .top_function ()
264
- if (self .pass_num < LAST_PASS and node is not None
265
- and isinstance (node , (FuncDef , LambdaExpr ))):
264
+ if self .pass_num < LAST_PASS and isinstance (node , (FuncDef , LambdaExpr )):
266
265
# Don't report an error yet. Just defer.
267
266
if self .errors .type_name :
268
267
type_name = self .errors .type_name [- 1 ]
269
268
else :
270
269
type_name = None
271
270
# Shouldn't we freeze the entire scope?
272
- active_class = self .scope .active_class ()
273
- self .deferred_nodes .append (DeferredNode (node , type_name , active_class ))
271
+ enclosing_class = self .scope .enclosing_class ()
272
+ self .deferred_nodes .append (DeferredNode (node , type_name , enclosing_class ))
274
273
# Set a marker so that we won't infer additional types in this
275
274
# function. Any inferred types could be bogus, because there's at
276
275
# least one type that we don't know.
@@ -3403,6 +3402,16 @@ def active_class(self) -> Optional[TypeInfo]:
3403
3402
return self .stack [- 1 ]
3404
3403
return None
3405
3404
3405
+ def enclosing_class (self ) -> Optional [TypeInfo ]:
3406
+ top = self .top_function ()
3407
+ assert top , "This method must be called from inside a function"
3408
+ index = self .stack .index (top )
3409
+ assert index , "Scope stack must always start with a module"
3410
+ enclosing = self .stack [index - 1 ]
3411
+ if isinstance (enclosing , TypeInfo ):
3412
+ return enclosing
3413
+ return None
3414
+
3406
3415
def active_self_type (self ) -> Optional [Union [Instance , TupleType ]]:
3407
3416
info = self .active_class ()
3408
3417
if info :
0 commit comments