@@ -263,17 +263,34 @@ def visit_Assign(self, node: ast.Assign) -> None:
263263 return
264264
265265 # Check if the assignment is a class instantiation
266- if isinstance (node .value , ast .Call ) and isinstance (node .value .func , ast .Name ):
267- class_name = node .value .func .id
266+ value = node .value
267+ if isinstance (value , ast .Call ) and isinstance (value .func , ast .Name ):
268+ class_name = value .func .id
268269 if class_name in self .imported_modules :
269- # Track all target variables as instances of the imported class
270- for target in node .targets :
270+ # Map the variable to the actual class name (handling aliases)
271+ original_class = self .alias_mapping .get (class_name , class_name )
272+ # Use list comprehension for direct assignment to instance_mapping, reducing loop overhead
273+ targets = node .targets
274+ instance_mapping = self .instance_mapping
275+ # since ast.Name nodes are heavily used, avoid local lookup for isinstance
276+ # and reuse locals for faster attribute access
277+ for target in targets :
271278 if isinstance (target , ast .Name ):
272- # Map the variable to the actual class name (handling aliases)
273- original_class = self .alias_mapping .get (class_name , class_name )
274- self .instance_mapping [target .id ] = original_class
275-
276- self .generic_visit (node )
279+ instance_mapping [target .id ] = original_class
280+
281+ # Replace self.generic_visit(node) with an optimized, inlined version that
282+ # stops traversal when self.found_any_target_function is set.
283+ # This eliminates interpretive overhead of super() and function call.
284+ stack = [node ]
285+ append = stack .append
286+ pop = stack .pop
287+ found_flag = self .found_any_target_function
288+ while stack :
289+ current_node = pop ()
290+ if self .found_any_target_function :
291+ break
292+ for child in ast .iter_child_nodes (current_node ):
293+ append (child )
277294
278295 def visit_ImportFrom (self , node : ast .ImportFrom ) -> None :
279296 """Handle 'from module import name' statements."""
0 commit comments