Skip to content

Commit 73f3a64

Browse files
typeshed_serializer should serialize correctly aliased symbols
1 parent 933f498 commit 73f3a64

File tree

3 files changed

+24
-13
lines changed

3 files changed

+24
-13
lines changed

python-frontend/typeshed_serializer/serializer/symbols.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,8 @@ def to_proto(self) -> symbols_pb2.ParameterSymbol:
182182

183183

184184
class OverloadedFunctionSymbol:
185-
def __init__(self, overloaded_func_def: mpn.OverloadedFuncDef):
186-
self.name = overloaded_func_def.name
185+
def __init__(self, overloaded_func_def: mpn.OverloadedFuncDef, name: str = None):
186+
self.name = overloaded_func_def.name if name is None else name
187187
self.fullname = overloaded_func_def.fullname
188188
self.definitions = []
189189
for item in overloaded_func_def.items:
@@ -218,8 +218,8 @@ def to_proto(self) -> symbols_pb2.OverloadedFunctionSymbol:
218218

219219

220220
class FunctionSymbol:
221-
def __init__(self, func_def: mpn.FuncDef, decorators=None):
222-
self.name = func_def.name
221+
def __init__(self, func_def: mpn.FuncDef, decorators=None, name: str = None):
222+
self.name = func_def.name if name is None else name
223223
self.fullname = func_def.fullname
224224
self.return_type = extract_return_type(func_def)
225225
self.parameters = extract_parameters(func_def)
@@ -262,8 +262,8 @@ def to_proto(self) -> symbols_pb2.FunctionSymbol:
262262

263263

264264
class ClassSymbol:
265-
def __init__(self, type_info: mpn.TypeInfo):
266-
self.name = type_info.name
265+
def __init__(self, type_info: mpn.TypeInfo, name: str = None):
266+
self.name = type_info.name if name is None else name
267267
self.fullname = type_info.fullname
268268
self.super_classes = []
269269
self.methods = []
@@ -336,8 +336,8 @@ def __init__(self, name: str, fullname: str, is_imported_module=False, type_desc
336336
self.type = type_descriptor
337337

338338
@classmethod
339-
def from_var(cls, var: mpn.Var):
340-
return cls(var.name, var.fullname, type_descriptor=TypeDescriptor(var.type) if var.type else None)
339+
def from_var(cls, var: mpn.Var, name: str = None):
340+
return cls(var.name if name is None else name, var.fullname, type_descriptor=TypeDescriptor(var.type) if var.type else None)
341341

342342
def __eq__(self, other):
343343
return isinstance(other, VarSymbol) and self.to_proto() == other.to_proto()
@@ -363,13 +363,13 @@ def __init__(self, mypy_file: mpn.MypyFile):
363363
name = mypy_file.names.get(key)
364364
symbol_table_node = name.node
365365
if isinstance(symbol_table_node, mpn.FuncDef):
366-
self.functions.append(FunctionSymbol(symbol_table_node))
366+
self.functions.append(FunctionSymbol(symbol_table_node, name=key))
367367
if isinstance(symbol_table_node, mpn.OverloadedFuncDef):
368-
self.overloaded_functions.append(OverloadedFunctionSymbol(symbol_table_node))
368+
self.overloaded_functions.append(OverloadedFunctionSymbol(symbol_table_node, name=key))
369369
if isinstance(symbol_table_node, mpn.TypeInfo):
370-
self.classes.append(ClassSymbol(symbol_table_node))
370+
self.classes.append(ClassSymbol(symbol_table_node, name=key))
371371
if isinstance(symbol_table_node, mpn.Var) and symbol_table_node.name not in DEFAULT_EXPORTED_VARS:
372-
self.vars.append(VarSymbol.from_var(symbol_table_node))
372+
self.vars.append(VarSymbol.from_var(symbol_table_node, name=key))
373373
if isinstance(symbol_table_node, mpn.MypyFile):
374374
module_name = symbol_table_node.fullname
375375
if module_name != "builtins":

python-frontend/typeshed_serializer/tests/resources/fakemodule.pyi

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import sys
22
from typing import overload
3+
from sys import flags as my_flags
34

45
if sys.version_info >= (3, 8):
56
class SomeClassUnique38:

python-frontend/typeshed_serializer/tests/test_symbols_merger.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ def test_actual_module_merge(fake_module_36_38):
205205
assert len(fakemodule_proto.overloaded_functions) == len(flattened_overloaded_funcs)
206206

207207
all_vars = merged_fakemodule_module.vars
208-
assert len(all_vars) == 6
208+
assert len(all_vars) == 7
209209
common_var = all_vars['fakemodule.common_var']
210210
assert len(common_var) == 1
211211
assert common_var[0].valid_for == ["36", "38"]
@@ -327,3 +327,13 @@ def assert_abc_merged_module(merged_modules, expected_valid_for):
327327
assert f[0].valid_for == expected_valid_for
328328
assert len(abc_merged_symbol.overloaded_functions) == 0
329329

330+
331+
def test_alias(fake_module_36_38):
332+
fake_module_36 = symbols.ModuleSymbol(fake_module_36_38[0])
333+
fake_module_38 = symbols.ModuleSymbol(fake_module_36_38[1])
334+
merged_modules = symbols_merger.merge_modules({"fakemodule"}, {"36": {"fakemodule": fake_module_36},
335+
"38": {"fakemodule": fake_module_38}})
336+
merged_fakemodule_module = merged_modules['fakemodule']
337+
sys_flags = merged_fakemodule_module.vars["sys.flags"][0].var_symbol
338+
assert sys_flags is not None
339+
assert sys_flags.name == "my_flags"

0 commit comments

Comments
 (0)