6767JsonDict : _TypeAlias = dict [str , Any ]
6868
6969
70- def convert_binary_cache_to_json (data : bytes ) -> JsonDict :
70+ class Config :
71+ def __init__ (self , * , implicit_names : bool = True ) -> None :
72+ self .implicit_names = implicit_names
73+
74+
75+ def convert_binary_cache_to_json (data : bytes , * , implicit_names : bool = True ) -> JsonDict :
7176 tree = MypyFile .read (Buffer (data ))
72- return convert_mypy_file_to_json (tree )
77+ return convert_mypy_file_to_json (tree , Config ( implicit_names = implicit_names ) )
7378
7479
75- def convert_mypy_file_to_json (self : MypyFile ) -> JsonDict :
80+ def convert_mypy_file_to_json (self : MypyFile , cfg : Config ) -> JsonDict :
7681 return {
7782 ".class" : "MypyFile" ,
7883 "_fullname" : self ._fullname ,
79- "names" : convert_symbol_table (self .names , self . _fullname ),
84+ "names" : convert_symbol_table (self .names , cfg ),
8085 "is_stub" : self .is_stub ,
8186 "path" : self .path ,
8287 "is_partial_stub_package" : self .is_partial_stub_package ,
8388 "future_import_flags" : sorted (self .future_import_flags ),
8489 }
8590
8691
87- def convert_symbol_table (self : SymbolTable , fullname : str ) -> JsonDict :
92+ def convert_symbol_table (self : SymbolTable , cfg : Config ) -> JsonDict :
8893 data : JsonDict = {".class" : "SymbolTable" }
8994 for key , value in self .items ():
9095 # Skip __builtins__: it's a reference to the builtins
@@ -93,11 +98,20 @@ def convert_symbol_table(self: SymbolTable, fullname: str) -> JsonDict:
9398 # accessed by users of the module.
9499 if key == "__builtins__" or value .no_serialize :
95100 continue
96- data [key ] = convert_symbol_table_node (value , fullname , key )
101+ if not cfg .implicit_names and key in {
102+ "__spec__" ,
103+ "__package__" ,
104+ "__file__" ,
105+ "__doc__" ,
106+ "__annotations__" ,
107+ "__name__" ,
108+ }:
109+ continue
110+ data [key ] = convert_symbol_table_node (value , cfg )
97111 return data
98112
99113
100- def convert_symbol_table_node (self : SymbolTableNode , prefix : str | None , name : str ) -> JsonDict :
114+ def convert_symbol_table_node (self : SymbolTableNode , cfg : Config ) -> JsonDict :
101115 data : JsonDict = {".class" : "SymbolTableNode" , "kind" : node_kinds [self .kind ]}
102116 if self .module_hidden :
103117 data ["module_hidden" ] = True
@@ -110,11 +124,11 @@ def convert_symbol_table_node(self: SymbolTableNode, prefix: str | None, name: s
110124 if self .cross_ref :
111125 data ["cross_ref" ] = self .cross_ref
112126 elif self .node is not None :
113- data ["node" ] = convert_symbol_node (self .node )
127+ data ["node" ] = convert_symbol_node (self .node , cfg )
114128 return data
115129
116130
117- def convert_symbol_node (self : SymbolNode ) -> JsonDict :
131+ def convert_symbol_node (self : SymbolNode , cfg : Config ) -> JsonDict :
118132 if isinstance (self , FuncDef ):
119133 return convert_func_def (self )
120134 elif isinstance (self , OverloadedFuncDef ):
@@ -124,7 +138,7 @@ def convert_symbol_node(self: SymbolNode) -> JsonDict:
124138 elif isinstance (self , Var ):
125139 return convert_var (self )
126140 elif isinstance (self , TypeInfo ):
127- return convert_type_info (self )
141+ return convert_type_info (self , cfg )
128142 elif isinstance (self , TypeAlias ):
129143 return convert_type_alias (self )
130144 elif isinstance (self , TypeVarExpr ):
@@ -210,12 +224,12 @@ def convert_var(self: Var) -> JsonDict:
210224 return data
211225
212226
213- def convert_type_info (self : TypeInfo ) -> JsonDict :
227+ def convert_type_info (self : TypeInfo , cfg : Config ) -> JsonDict :
214228 data = {
215229 ".class" : "TypeInfo" ,
216230 "module_name" : self .module_name ,
217231 "fullname" : self .fullname ,
218- "names" : convert_symbol_table (self .names , self . fullname ),
232+ "names" : convert_symbol_table (self .names , cfg ),
219233 "defn" : convert_class_def (self .defn ),
220234 "abstract_attributes" : self .abstract_attributes ,
221235 "type_vars" : self .type_vars ,
@@ -250,7 +264,12 @@ def convert_type_info(self: TypeInfo) -> JsonDict:
250264
251265
252266def convert_class_def (self : ClassDef ) -> JsonDict :
253- return {}
267+ return {
268+ ".class" : "ClassDef" ,
269+ "name" : self .name ,
270+ "fullname" : self .fullname ,
271+ "type_vars" : [convert_type (v ) for v in self .type_vars ],
272+ }
254273
255274
256275def convert_type_alias (self : TypeAlias ) -> JsonDict :
0 commit comments