@@ -174,7 +174,9 @@ def _get_unpacking_extra_info(node: nodes.Assign, inferred: InferenceResult) ->
174
174
175
175
176
176
def _detect_global_scope (
177
- node : nodes .Name , frame : nodes .LocalsDictNodeNG , defframe : nodes .LocalsDictNodeNG
177
+ node : nodes .Name ,
178
+ frame : nodes .LocalsDictNodeNG ,
179
+ defframe : nodes .LocalsDictNodeNG ,
178
180
) -> bool :
179
181
"""Detect that the given frames share a global scope.
180
182
@@ -324,7 +326,8 @@ def _find_frame_imports(name: str, frame: nodes.LocalsDictNodeNG) -> bool:
324
326
325
327
326
328
def _import_name_is_global (
327
- stmt : nodes .Global | _base_nodes .ImportNode , global_names : set [str ]
329
+ stmt : nodes .Global | _base_nodes .ImportNode ,
330
+ global_names : set [str ],
328
331
) -> bool :
329
332
for import_name , import_alias in stmt .names :
330
333
# If the import uses an alias, check only that.
@@ -695,7 +698,9 @@ def get_next_to_consume(self, node: nodes.Name) -> list[nodes.NodeNG] | None:
695
698
return found_nodes
696
699
697
700
def _inferred_to_define_name_raise_or_return (
698
- self , name : str , node : nodes .NodeNG
701
+ self ,
702
+ name : str ,
703
+ node : nodes .NodeNG ,
699
704
) -> bool :
700
705
"""Return True if there is a path under this `if_node`
701
706
that is inferred to define `name`, raise, or return.
@@ -775,7 +780,9 @@ def _branch_handles_name(self, name: str, body: Iterable[nodes.NodeNG]) -> bool:
775
780
)
776
781
777
782
def _uncertain_nodes_if_tests (
778
- self , found_nodes : list [nodes .NodeNG ], node : nodes .NodeNG
783
+ self ,
784
+ found_nodes : list [nodes .NodeNG ],
785
+ node : nodes .NodeNG ,
779
786
) -> list [nodes .NodeNG ]:
780
787
"""Identify nodes of uncertain execution because they are defined under if
781
788
tests.
@@ -988,7 +995,8 @@ def _defines_name_raises_or_returns(name: str, node: nodes.NodeNG) -> bool:
988
995
989
996
@staticmethod
990
997
def _defines_name_raises_or_returns_recursive (
991
- name : str , node : nodes .NodeNG
998
+ name : str ,
999
+ node : nodes .NodeNG ,
992
1000
) -> bool :
993
1001
"""Return True if some child of `node` defines the name `name`,
994
1002
raises, or returns.
@@ -1012,7 +1020,8 @@ def _defines_name_raises_or_returns_recursive(
1012
1020
1013
1021
@staticmethod
1014
1022
def _check_loop_finishes_via_except (
1015
- node : nodes .NodeNG , other_node_try_except : nodes .Try
1023
+ node : nodes .NodeNG ,
1024
+ other_node_try_except : nodes .Try ,
1016
1025
) -> bool :
1017
1026
"""Check for a specific control flow scenario.
1018
1027
@@ -1055,7 +1064,8 @@ def _check_loop_finishes_via_except(
1055
1064
return False
1056
1065
1057
1066
def _try_in_loop_body (
1058
- other_node_try_except : nodes .Try , loop : nodes .For | nodes .While
1067
+ other_node_try_except : nodes .Try ,
1068
+ loop : nodes .For | nodes .While ,
1059
1069
) -> bool :
1060
1070
"""Return True if `other_node_try_except` is a descendant of `loop`."""
1061
1071
return any (
@@ -1085,7 +1095,8 @@ def _try_in_loop_body(
1085
1095
1086
1096
@staticmethod
1087
1097
def _recursive_search_for_continue_before_break (
1088
- stmt : _base_nodes .Statement , break_stmt : nodes .Break
1098
+ stmt : _base_nodes .Statement ,
1099
+ break_stmt : nodes .Break ,
1089
1100
) -> bool :
1090
1101
"""Return True if any Continue node can be found in descendants of `stmt`
1091
1102
before encountering `break_stmt`, ignoring any nested loops.
@@ -1105,7 +1116,8 @@ def _recursive_search_for_continue_before_break(
1105
1116
1106
1117
@staticmethod
1107
1118
def _uncertain_nodes_in_try_blocks_when_evaluating_except_blocks (
1108
- found_nodes : list [nodes .NodeNG ], node_statement : _base_nodes .Statement
1119
+ found_nodes : list [nodes .NodeNG ],
1120
+ node_statement : _base_nodes .Statement ,
1109
1121
) -> list [nodes .NodeNG ]:
1110
1122
"""Return any nodes in ``found_nodes`` that should be treated as uncertain.
1111
1123
@@ -1705,7 +1717,9 @@ def leave_excepthandler(self, node: nodes.ExceptHandler) -> None:
1705
1717
self ._except_handler_names_queue .pop ()
1706
1718
1707
1719
def _undefined_and_used_before_checker (
1708
- self , node : nodes .Name , stmt : nodes .NodeNG
1720
+ self ,
1721
+ node : nodes .Name ,
1722
+ stmt : nodes .NodeNG ,
1709
1723
) -> None :
1710
1724
frame = stmt .scope ()
1711
1725
start_index = len (self ._to_consume ) - 1
@@ -1753,7 +1767,10 @@ def _undefined_and_used_before_checker(
1753
1767
self .add_message ("undefined-variable" , args = node .name , node = node )
1754
1768
1755
1769
def _should_node_be_skipped (
1756
- self , node : nodes .Name , consumer : NamesConsumer , is_start_index : bool
1770
+ self ,
1771
+ node : nodes .Name ,
1772
+ consumer : NamesConsumer ,
1773
+ is_start_index : bool ,
1757
1774
) -> bool :
1758
1775
"""Tests a consumer and node for various conditions in which the node shouldn't
1759
1776
be checked for the undefined-variable and used-before-assignment checks.
@@ -1995,7 +2012,9 @@ def _check_consumer(
1995
2012
return (VariableVisitConsumerAction .RETURN , found_nodes )
1996
2013
1997
2014
def _report_unfound_name_definition (
1998
- self , node : nodes .NodeNG , current_consumer : NamesConsumer
2015
+ self ,
2016
+ node : nodes .NodeNG ,
2017
+ current_consumer : NamesConsumer ,
1999
2018
) -> None :
2000
2019
"""Reports used-before-assignment when all name definition nodes
2001
2020
get filtered out by NamesConsumer.
@@ -2034,7 +2053,9 @@ def _report_unfound_name_definition(
2034
2053
)
2035
2054
2036
2055
def _filter_type_checking_import_from_consumption (
2037
- self , node : nodes .NodeNG , nodes_to_consume : list [nodes .NodeNG ]
2056
+ self ,
2057
+ node : nodes .NodeNG ,
2058
+ nodes_to_consume : list [nodes .NodeNG ],
2038
2059
) -> list [nodes .NodeNG ]:
2039
2060
"""Do not consume type-checking import node as used-before-assignment
2040
2061
may invoke in different scopes.
@@ -2169,7 +2190,8 @@ def _allow_global_unused_variables(self) -> bool:
2169
2190
2170
2191
@staticmethod
2171
2192
def _defined_in_function_definition (
2172
- node : nodes .NodeNG , frame : nodes .NodeNG
2193
+ node : nodes .NodeNG ,
2194
+ frame : nodes .NodeNG ,
2173
2195
) -> bool :
2174
2196
in_annotation_or_default_or_decorator = False
2175
2197
if isinstance (frame , nodes .FunctionDef ) and node .statement () is frame :
@@ -2192,7 +2214,8 @@ def _defined_in_function_definition(
2192
2214
2193
2215
@staticmethod
2194
2216
def _in_lambda_or_comprehension_body (
2195
- node : nodes .NodeNG , frame : nodes .NodeNG
2217
+ node : nodes .NodeNG ,
2218
+ frame : nodes .NodeNG ,
2196
2219
) -> bool :
2197
2220
"""Return True if node within a lambda/comprehension body (or similar) and thus
2198
2221
should not have access to class attributes in frame.
@@ -2404,7 +2427,8 @@ def _is_builtin(self, name: str) -> bool:
2404
2427
2405
2428
@staticmethod
2406
2429
def _is_only_type_assignment (
2407
- node : nodes .Name , defstmt : _base_nodes .Statement
2430
+ node : nodes .Name ,
2431
+ defstmt : _base_nodes .Statement ,
2408
2432
) -> bool :
2409
2433
"""Check if variable only gets assigned a type and never a value."""
2410
2434
if not isinstance (defstmt , nodes .AnnAssign ) or defstmt .value :
@@ -2462,7 +2486,9 @@ def _is_only_type_assignment(
2462
2486
2463
2487
@staticmethod
2464
2488
def _is_first_level_self_reference (
2465
- node : nodes .Name , defstmt : nodes .ClassDef , found_nodes : list [nodes .NodeNG ]
2489
+ node : nodes .Name ,
2490
+ defstmt : nodes .ClassDef ,
2491
+ found_nodes : list [nodes .NodeNG ],
2466
2492
) -> tuple [VariableVisitConsumerAction , list [nodes .NodeNG ] | None ]:
2467
2493
"""Check if a first level method's annotation or default values
2468
2494
refers to its own class, and return a consumer action.
@@ -2483,7 +2509,8 @@ def _is_first_level_self_reference(
2483
2509
2484
2510
@staticmethod
2485
2511
def _is_never_evaluated (
2486
- defnode : nodes .NamedExpr , defnode_parent : nodes .IfExp
2512
+ defnode : nodes .NamedExpr ,
2513
+ defnode_parent : nodes .IfExp ,
2487
2514
) -> bool :
2488
2515
"""Check if a NamedExpr is inside a side of if ... else that never
2489
2516
gets evaluated.
@@ -2798,7 +2825,9 @@ def _check_is_unused(
2798
2825
self .add_message (message_name , args = name , node = stmt )
2799
2826
2800
2827
def _is_name_ignored (
2801
- self , stmt : nodes .NodeNG , name : str
2828
+ self ,
2829
+ stmt : nodes .NodeNG ,
2830
+ name : str ,
2802
2831
) -> re .Pattern [str ] | re .Match [str ] | None :
2803
2832
authorized_rgx = self .linter .config .dummy_variables_rgx
2804
2833
if (
@@ -2963,7 +2992,8 @@ def _store_type_annotation_node(self, type_annotation: nodes.NodeNG) -> None:
2963
2992
)
2964
2993
2965
2994
def _store_type_annotation_names (
2966
- self , node : nodes .For | nodes .Assign | nodes .With
2995
+ self ,
2996
+ node : nodes .For | nodes .Assign | nodes .With ,
2967
2997
) -> None :
2968
2998
type_annotation = node .type_annotation
2969
2999
if not type_annotation :
@@ -3001,7 +3031,10 @@ def _check_self_cls_assign(self, node: nodes.Assign) -> None:
3001
3031
self .add_message ("self-cls-assignment" , node = node , args = (self_cls_name ,))
3002
3032
3003
3033
def _check_unpacking (
3004
- self , inferred : InferenceResult , node : nodes .Assign , targets : list [nodes .NodeNG ]
3034
+ self ,
3035
+ inferred : InferenceResult ,
3036
+ node : nodes .Assign ,
3037
+ targets : list [nodes .NodeNG ],
3005
3038
) -> None :
3006
3039
"""Check for unbalanced tuple unpacking
3007
3040
and unpacking non sequences.
@@ -3130,7 +3163,9 @@ def _check_module_attrs(
3130
3163
return None
3131
3164
3132
3165
def _check_all (
3133
- self , node : nodes .Module , not_consumed : dict [str , list [nodes .NodeNG ]]
3166
+ self ,
3167
+ node : nodes .Module ,
3168
+ not_consumed : dict [str , list [nodes .NodeNG ]],
3134
3169
) -> None :
3135
3170
try :
3136
3171
assigned = next (node .igetattr ("__all__" ))
@@ -3298,7 +3333,9 @@ def _check_metaclasses(self, node: nodes.Module | nodes.FunctionDef) -> None:
3298
3333
scope_locals .pop (name , None )
3299
3334
3300
3335
def _check_classdef_metaclasses (
3301
- self , klass : nodes .ClassDef , parent_node : nodes .Module | nodes .FunctionDef
3336
+ self ,
3337
+ klass : nodes .ClassDef ,
3338
+ parent_node : nodes .Module | nodes .FunctionDef ,
3302
3339
) -> list [tuple [dict [str , list [nodes .NodeNG ]], str ]]:
3303
3340
if not klass ._metaclass :
3304
3341
# Skip if this class doesn't use explicitly a metaclass, but inherits it from ancestors
@@ -3357,7 +3394,9 @@ def visit_subscript(self, node: nodes.Subscript) -> None:
3357
3394
self ._check_potential_index_error (node , inferred_slice )
3358
3395
3359
3396
def _check_potential_index_error (
3360
- self , node : nodes .Subscript , inferred_slice : nodes .NodeNG | None
3397
+ self ,
3398
+ node : nodes .Subscript ,
3399
+ inferred_slice : nodes .NodeNG | None ,
3361
3400
) -> None :
3362
3401
"""Check for the potential-index-error message."""
3363
3402
# Currently we only check simple slices of a single integer
0 commit comments