@@ -46,7 +46,7 @@ class CodeAnalyzer(ast.NodeVisitor):
4646 """
4747
4848 def __init__ (self ):
49- self .structure : List [Dict [str , Any ]] = []
49+ self .analyzed_classes : List [Dict [str , Any ]] = []
5050 self .imports : set [str ] = set ()
5151 self .types : set [str ] = set ()
5252 self ._current_class_info : Dict [str , Any ] | None = None
@@ -98,13 +98,19 @@ def _collect_types_from_node(self, node: ast.AST | None) -> None:
9898 if type_str :
9999 self .types .add (type_str )
100100 elif isinstance (node , ast .Subscript ):
101- self ._collect_types_from_node (node .value )
101+ # Add the base type of the subscript (e.g., "List", "Dict")
102+ if isinstance (node .value , ast .Name ):
103+ self .types .add (node .value .id )
104+ self ._collect_types_from_node (node .value ) # Recurse on value just in case
102105 self ._collect_types_from_node (node .slice )
103106 elif isinstance (node , (ast .Tuple , ast .List )):
104107 for elt in node .elts :
105108 self ._collect_types_from_node (elt )
106- elif isinstance (node , ast .Constant ) and isinstance (node .value , str ):
107- self .types .add (node .value )
109+ elif isinstance (node , ast .Constant ):
110+ if isinstance (node .value , str ): # Forward references
111+ self .types .add (node .value )
112+ elif node .value is None : # None type
113+ self .types .add ("None" )
108114 elif isinstance (node , ast .BinOp ) and isinstance (
109115 node .op , ast .BitOr
110116 ): # For | union type
0 commit comments