24
24
TYPING_FORWARD_REF_QNAME = "typing.ForwardRef"
25
25
26
26
27
- def _get_break_loop_node (break_node ) :
27
+ def _get_break_loop_node (break_node : nodes . Break ) -> nodes . For | nodes . While | None :
28
28
"""Returns the loop node that holds the break node in arguments.
29
29
30
30
Args:
@@ -45,7 +45,7 @@ def _get_break_loop_node(break_node):
45
45
return parent
46
46
47
47
48
- def _loop_exits_early (loop ) :
48
+ def _loop_exits_early (loop : nodes . For | nodes . While ) -> bool :
49
49
"""Returns true if a loop may end with a break statement.
50
50
51
51
Args:
@@ -56,7 +56,7 @@ def _loop_exits_early(loop):
56
56
"""
57
57
loop_nodes = (nodes .For , nodes .While )
58
58
definition_nodes = (nodes .FunctionDef , nodes .ClassDef )
59
- inner_loop_nodes = [
59
+ inner_loop_nodes : list [ nodes . For | nodes . While ] = [
60
60
_node
61
61
for _node in loop .nodes_of_class (loop_nodes , skip_klass = definition_nodes )
62
62
if _node != loop
@@ -77,7 +77,7 @@ def _has_abstract_methods(node):
77
77
return len (utils .unimplemented_abstract_methods (node )) > 0
78
78
79
79
80
- def redefined_by_decorator (node ) :
80
+ def redefined_by_decorator (node : nodes . FunctionDef ) -> bool :
81
81
"""Return True if the object is a method redefined via decorator.
82
82
83
83
For example:
@@ -210,7 +210,7 @@ class BasicErrorChecker(_BasicChecker):
210
210
def visit_classdef (self , node : nodes .ClassDef ) -> None :
211
211
self ._check_redefinition ("class" , node )
212
212
213
- def _too_many_starred_for_tuple (self , assign_tuple ) :
213
+ def _too_many_starred_for_tuple (self , assign_tuple : nodes . Tuple ) -> bool :
214
214
starred_count = 0
215
215
for elem in assign_tuple .itered ():
216
216
if isinstance (elem , nodes .Tuple ):
@@ -296,7 +296,7 @@ def visit_functiondef(self, node: nodes.FunctionDef) -> None:
296
296
297
297
visit_asyncfunctiondef = visit_functiondef
298
298
299
- def _check_name_used_prior_global (self , node ) :
299
+ def _check_name_used_prior_global (self , node : nodes . FunctionDef ) -> None :
300
300
301
301
scope_globals = {
302
302
name : child
@@ -323,10 +323,10 @@ def _check_name_used_prior_global(self, node):
323
323
"used-prior-global-declaration" , node = node_name , args = (name ,)
324
324
)
325
325
326
- def _check_nonlocal_and_global (self , node ) :
326
+ def _check_nonlocal_and_global (self , node : nodes . FunctionDef ) -> None :
327
327
"""Check that a name is both nonlocal and global."""
328
328
329
- def same_scope (current ) :
329
+ def same_scope (current : nodes . Global | nodes . Nonlocal ) -> bool :
330
330
return current .scope () is node
331
331
332
332
from_iter = itertools .chain .from_iterable
@@ -391,7 +391,7 @@ def visit_unaryop(self, node: nodes.UnaryOp) -> None:
391
391
):
392
392
self .add_message ("nonexistent-operator" , node = node , args = node .op * 2 )
393
393
394
- def _check_nonlocal_without_binding (self , node , name ) :
394
+ def _check_nonlocal_without_binding (self , node : nodes . Nonlocal , name : str ) -> None :
395
395
current_scope = node .scope ()
396
396
while True :
397
397
if current_scope .parent is None :
@@ -424,7 +424,7 @@ def visit_call(self, node: nodes.Call) -> None:
424
424
for inferred in infer_all (node .func ):
425
425
self ._check_inferred_class_is_abstract (inferred , node )
426
426
427
- def _check_inferred_class_is_abstract (self , inferred , node ):
427
+ def _check_inferred_class_is_abstract (self , inferred , node : nodes . Call ):
428
428
if not isinstance (inferred , nodes .ClassDef ):
429
429
return
430
430
@@ -461,11 +461,11 @@ def _check_inferred_class_is_abstract(self, inferred, node):
461
461
"abstract-class-instantiated" , args = (inferred .name ,), node = node
462
462
)
463
463
464
- def _check_yield_outside_func (self , node ) :
464
+ def _check_yield_outside_func (self , node : nodes . Yield ) -> None :
465
465
if not isinstance (node .frame (future = True ), (nodes .FunctionDef , nodes .Lambda )):
466
466
self .add_message ("yield-outside-function" , node = node )
467
467
468
- def _check_else_on_loop (self , node ) :
468
+ def _check_else_on_loop (self , node : nodes . For | nodes . While ) -> None :
469
469
"""Check that any loop with an else clause has a break statement."""
470
470
if node .orelse and not _loop_exits_early (node ):
471
471
self .add_message (
@@ -477,7 +477,9 @@ def _check_else_on_loop(self, node):
477
477
line = node .orelse [0 ].lineno - 1 ,
478
478
)
479
479
480
- def _check_in_loop (self , node , node_name ):
480
+ def _check_in_loop (
481
+ self , node : nodes .Continue | nodes .Break , node_name : str
482
+ ) -> None :
481
483
"""Check that a node is inside a for or while loop."""
482
484
for parent in node .node_ancestors ():
483
485
if isinstance (parent , (nodes .For , nodes .While )):
@@ -495,7 +497,9 @@ def _check_in_loop(self, node, node_name):
495
497
496
498
self .add_message ("not-in-loop" , node = node , args = node_name )
497
499
498
- def _check_redefinition (self , redeftype , node ):
500
+ def _check_redefinition (
501
+ self , redeftype : str , node : nodes .Call | nodes .FunctionDef
502
+ ) -> None :
499
503
"""Check for redefinition of a function / method / class name."""
500
504
parent_frame = node .parent .frame (future = True )
501
505
0 commit comments