Skip to content

Commit 74c5fae

Browse files
JukkaLilevkivskyi
authored andcommitted
Refactoring: Remove attribute mod_id from SymbolTableNode (#4077)
1 parent 5d86e14 commit 74c5fae

File tree

4 files changed

+41
-36
lines changed

4 files changed

+41
-36
lines changed

mypy/nodes.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2247,8 +2247,6 @@ class SymbolTableNode:
22472247
# AST node of definition (FuncDef/Var/TypeInfo/Decorator/TypeVarExpr,
22482248
# or None for a bound type variable).
22492249
node = None # type: Optional[SymbolNode]
2250-
# Module id (e.g. "foo.bar") or None
2251-
mod_id = '' # type: Optional[str]
22522250
# If this not None, override the type of the 'node' attribute.
22532251
type_override = None # type: Optional[mypy.types.Type]
22542252
# For generic aliases this stores the (qualified) names of type variables.
@@ -2270,7 +2268,6 @@ class SymbolTableNode:
22702268
def __init__(self,
22712269
kind: int,
22722270
node: Optional[SymbolNode],
2273-
mod_id: Optional[str] = None,
22742271
typ: 'Optional[mypy.types.Type]' = None,
22752272
module_public: bool = True,
22762273
normalized: bool = False,
@@ -2280,7 +2277,6 @@ def __init__(self,
22802277
self.kind = kind
22812278
self.node = node
22822279
self.type_override = typ
2283-
self.mod_id = mod_id
22842280
self.module_hidden = module_hidden
22852281
self.module_public = module_public
22862282
self.normalized = normalized
@@ -2310,8 +2306,8 @@ def type(self) -> 'Optional[mypy.types.Type]':
23102306

23112307
def __str__(self) -> str:
23122308
s = '{}/{}'.format(node_kinds[self.kind], short_type(self.node))
2313-
if self.mod_id is not None:
2314-
s += ' ({})'.format(self.mod_id)
2309+
if isinstance(self.node, SymbolNode):
2310+
s += ' ({})'.format(self.node.fullname())
23152311
# Include declared type of variables and functions.
23162312
if self.type is not None:
23172313
s += ' : {}'.format(self.type)

mypy/semanal.py

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -283,8 +283,8 @@ def visit_file(self, file_node: MypyFile, fnam: str, options: Options,
283283

284284
with experiments.strict_optional_set(options.strict_optional):
285285
if 'builtins' in self.modules:
286-
self.globals['__builtins__'] = SymbolTableNode(
287-
MODULE_REF, self.modules['builtins'], self.cur_mod_id)
286+
self.globals['__builtins__'] = SymbolTableNode(MODULE_REF,
287+
self.modules['builtins'])
288288

289289
for name in implicit_module_attrs:
290290
v = self.globals[name].node
@@ -1409,7 +1409,7 @@ def add_submodules_to_parent_modules(self, id: str, module_public: bool) -> None
14091409
if parent_mod and child not in parent_mod.names:
14101410
child_mod = self.modules.get(id)
14111411
if child_mod:
1412-
sym = SymbolTableNode(MODULE_REF, child_mod, parent,
1412+
sym = SymbolTableNode(MODULE_REF, child_mod,
14131413
module_public=module_public)
14141414
parent_mod.names[child] = sym
14151415
id = parent
@@ -1418,7 +1418,7 @@ def add_module_symbol(self, id: str, as_id: str, module_public: bool,
14181418
context: Context, module_hidden: bool = False) -> None:
14191419
if id in self.modules:
14201420
m = self.modules[id]
1421-
self.add_symbol(as_id, SymbolTableNode(MODULE_REF, m, self.cur_mod_id,
1421+
self.add_symbol(as_id, SymbolTableNode(MODULE_REF, m,
14221422
module_public=module_public,
14231423
module_hidden=module_hidden), context)
14241424
else:
@@ -1438,7 +1438,7 @@ def visit_import_from(self, imp: ImportFrom) -> None:
14381438
if not node or node.kind == UNBOUND_IMPORTED:
14391439
mod = self.modules.get(possible_module_id)
14401440
if mod is not None:
1441-
node = SymbolTableNode(MODULE_REF, mod, import_id)
1441+
node = SymbolTableNode(MODULE_REF, mod)
14421442
self.add_submodules_to_parent_modules(possible_module_id, True)
14431443
elif possible_module_id in self.missing_modules:
14441444
missing = True
@@ -1456,7 +1456,7 @@ def visit_import_from(self, imp: ImportFrom) -> None:
14561456
else:
14571457
name = id
14581458
ast_node = Var(name, type=typ)
1459-
symbol = SymbolTableNode(GDEF, ast_node, name)
1459+
symbol = SymbolTableNode(GDEF, ast_node)
14601460
self.add_symbol(name, symbol, imp)
14611461
return
14621462
if node and node.kind != UNBOUND_IMPORTED and not node.module_hidden:
@@ -1474,7 +1474,6 @@ def visit_import_from(self, imp: ImportFrom) -> None:
14741474
module_public = not self.is_stub_file or as_id is not None
14751475
module_hidden = not module_public and possible_module_id not in self.modules
14761476
symbol = SymbolTableNode(node.kind, node.node,
1477-
self.cur_mod_id,
14781477
node.type_override,
14791478
module_public=module_public,
14801479
normalized=node.normalized,
@@ -1530,8 +1529,7 @@ def normalize_type_alias(self, node: SymbolTableNode,
15301529
node = self.lookup_qualified(collections_type_aliases[fullname], ctx)
15311530
normalized = True
15321531
if normalized:
1533-
node = SymbolTableNode(node.kind, node.node,
1534-
node.mod_id, node.type_override,
1532+
node = SymbolTableNode(node.kind, node.node, node.type_override,
15351533
normalized=True, alias_tvars=node.alias_tvars)
15361534
return node
15371535

@@ -1576,7 +1574,6 @@ def visit_import_all(self, i: ImportAll) -> None:
15761574
name, existing_symbol, node, i):
15771575
continue
15781576
self.add_symbol(name, SymbolTableNode(node.kind, node.node,
1579-
self.cur_mod_id,
15801577
node.type_override,
15811578
normalized=node.normalized,
15821579
alias_tvars=node.alias_tvars), i)
@@ -1597,7 +1594,7 @@ def add_unknown_symbol(self, name: str, context: Context, is_import: bool = Fals
15971594
any_type = AnyType(TypeOfAny.from_error)
15981595
var.type = any_type
15991596
var.is_suppressed_import = is_import
1600-
self.add_symbol(name, SymbolTableNode(GDEF, var, self.cur_mod_id), context)
1597+
self.add_symbol(name, SymbolTableNode(GDEF, var), context)
16011598

16021599
#
16031600
# Statements
@@ -1831,8 +1828,7 @@ def analyze_lvalue(self, lval: Lvalue, nested: bool = False,
18311828
lval.is_def = True
18321829
lval.kind = GDEF
18331830
lval.fullname = v._fullname
1834-
self.globals[lval.name] = SymbolTableNode(GDEF, v,
1835-
self.cur_mod_id)
1831+
self.globals[lval.name] = SymbolTableNode(GDEF, v)
18361832
elif isinstance(lval.node, Var) and lval.is_def:
18371833
# Since the is_def flag is set, this must have been analyzed
18381834
# already in the first pass and added to the symbol table.
@@ -2276,7 +2272,7 @@ def check_namedtuple(self, node: Expression, var_name: str = None) -> Optional[T
22762272
info = self.build_namedtuple_typeinfo(name, items, types, {})
22772273
# Store it as a global just in case it would remain anonymous.
22782274
# (Or in the nearest class if there is one.)
2279-
stnode = SymbolTableNode(GDEF, info, self.cur_mod_id)
2275+
stnode = SymbolTableNode(GDEF, info)
22802276
if self.type:
22812277
self.type.names[name] = stnode
22822278
else:
@@ -2535,7 +2531,7 @@ def check_typeddict(self, node: Expression, var_name: str = None) -> Optional[Ty
25352531
info = self.build_typeddict_typeinfo(name, items, types, required_keys)
25362532
# Store it as a global just in case it would remain anonymous.
25372533
# (Or in the nearest class if there is one.)
2538-
stnode = SymbolTableNode(GDEF, info, self.cur_mod_id)
2534+
stnode = SymbolTableNode(GDEF, info)
25392535
if self.type:
25402536
self.type.names[name] = stnode
25412537
else:
@@ -2767,7 +2763,7 @@ class A(enum.Enum):
27672763
info = self.build_enum_call_typeinfo(name, items, fullname)
27682764
# Store it as a global just in case it would remain anonymous.
27692765
# (Or in the nearest class if there is one.)
2770-
stnode = SymbolTableNode(GDEF, info, self.cur_mod_id)
2766+
stnode = SymbolTableNode(GDEF, info)
27712767
if self.type:
27722768
self.type.names[name] = stnode
27732769
else:
@@ -3851,7 +3847,7 @@ def visit_file(self, file: MypyFile, fnam: str, mod_id: str, options: Options) -
38513847
typ = UnboundType(t)
38523848
v = Var(name, typ)
38533849
v._fullname = self.sem.qualified_name(name)
3854-
self.sem.globals[name] = SymbolTableNode(GDEF, v, self.sem.cur_mod_id)
3850+
self.sem.globals[name] = SymbolTableNode(GDEF, v)
38553851

38563852
for d in defs:
38573853
d.accept(self)
@@ -3886,7 +3882,7 @@ def visit_file(self, file: MypyFile, fnam: str, mod_id: str, options: Options) -
38863882
for name, typ in literal_types:
38873883
v = Var(name, typ)
38883884
v._fullname = self.sem.qualified_name(name)
3889-
self.sem.globals[name] = SymbolTableNode(GDEF, v, self.sem.cur_mod_id)
3885+
self.sem.globals[name] = SymbolTableNode(GDEF, v)
38903886

38913887
del self.sem.options
38923888

@@ -3920,7 +3916,7 @@ def visit_func_def(self, func: FuncDef) -> None:
39203916
sem.check_no_global(func.name(), func)
39213917
else:
39223918
if at_module:
3923-
sem.globals[func.name()] = SymbolTableNode(GDEF, func, sem.cur_mod_id)
3919+
sem.globals[func.name()] = SymbolTableNode(GDEF, func)
39243920
# Also analyze the function body (in case there are conditional imports).
39253921
sem.function_stack.append(func)
39263922
sem.errors.push_function(func.name())
@@ -3936,7 +3932,7 @@ def visit_overloaded_func_def(self, func: OverloadedFuncDef) -> None:
39363932
self.sem.check_no_global(func.name(), func, True)
39373933
func._fullname = self.sem.qualified_name(func.name())
39383934
if kind == GDEF:
3939-
self.sem.globals[func.name()] = SymbolTableNode(kind, func, self.sem.cur_mod_id)
3935+
self.sem.globals[func.name()] = SymbolTableNode(kind, func)
39403936
if func.impl:
39413937
impl = func.impl
39423938
# Also analyze the function body (in case there are conditional imports).
@@ -3969,7 +3965,7 @@ def visit_class_def(self, cdef: ClassDef) -> None:
39693965
info.set_line(cdef.line, cdef.column)
39703966
cdef.info = info
39713967
if kind == GDEF:
3972-
self.sem.globals[cdef.name] = SymbolTableNode(kind, info, self.sem.cur_mod_id)
3968+
self.sem.globals[cdef.name] = SymbolTableNode(kind, info)
39733969
self.process_nested_classes(cdef)
39743970

39753971
def process_nested_classes(self, outer_def: ClassDef) -> None:

mypy/server/astdiff.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ def is_similar_node_shallow(n: SymbolTableNode, m: SymbolTableNode) -> bool:
5656
# tvar_def
5757
# type_override
5858
if (n.kind != m.kind
59-
or n.mod_id != m.mod_id
6059
or n.module_public != m.module_public):
6160
return False
6261
if type(n.node) != type(m.node): # noqa

test-data/unit/semanal-symtable.test

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,21 @@ x = 1
99
[out]
1010
__main__:
1111
SymbolTable(
12-
x : Gdef/Var (__main__))
12+
x : Gdef/Var (__main__.x))
1313

1414
[case testFuncDef]
1515
def f(): pass
1616
[out]
1717
__main__:
1818
SymbolTable(
19-
f : Gdef/FuncDef (__main__))
19+
f : Gdef/FuncDef (__main__.f))
2020

2121
[case testEmptyClassDef]
2222
class c: pass
2323
[out]
2424
__main__:
2525
SymbolTable(
26-
c : Gdef/TypeInfo (__main__))
26+
c : Gdef/TypeInfo (__main__.c))
2727

2828
[case testImport]
2929
import m
@@ -32,10 +32,10 @@ x = 1
3232
[out]
3333
__main__:
3434
SymbolTable(
35-
m : ModuleRef/MypyFile (__main__))
35+
m : ModuleRef/MypyFile (m))
3636
m:
3737
SymbolTable(
38-
x : Gdef/Var (m))
38+
x : Gdef/Var (m.x))
3939

4040
[case testImportFromModule]
4141
from m import x
@@ -45,8 +45,22 @@ y = 1
4545
[out]
4646
__main__:
4747
SymbolTable(
48-
x : Gdef/TypeInfo (__main__))
48+
x : Gdef/TypeInfo (m.x))
4949
m:
5050
SymbolTable(
51-
x : Gdef/TypeInfo (m)
52-
y : Gdef/Var (m))
51+
x : Gdef/TypeInfo (m.x)
52+
y : Gdef/Var (m.y))
53+
54+
[case testImportAs]
55+
from m import x as xx
56+
[file m.py]
57+
class x: pass
58+
y = 1
59+
[out]
60+
__main__:
61+
SymbolTable(
62+
xx : Gdef/TypeInfo (m.x))
63+
m:
64+
SymbolTable(
65+
x : Gdef/TypeInfo (m.x)
66+
y : Gdef/Var (m.y))

0 commit comments

Comments
 (0)