Closed
Description
It's possible to get crashes like this when using module-level __getattr__
in incremental mode:
/Users/jukka/src/mypy/mypy/build.py:179: in build
result = _build(
/Users/jukka/src/mypy/mypy/build.py:253: in _build
graph = dispatch(sources, manager, stdout)
/Users/jukka/src/mypy/mypy/build.py:2688: in dispatch
process_graph(graph, manager)
/Users/jukka/src/mypy/mypy/build.py:3005: in process_graph
process_fresh_modules(graph, prev_scc, manager)
/Users/jukka/src/mypy/mypy/build.py:3083: in process_fresh_modules
graph[id].fix_cross_refs()
/Users/jukka/src/mypy/mypy/build.py:1990: in fix_cross_refs
fixup_module(self.tree, self.manager.modules,
/Users/jukka/src/mypy/mypy/fixup.py:26: in fixup_module
node_fixer.visit_symbol_table(tree.names, tree.fullname)
/Users/jukka/src/mypy/mypy/fixup.py:77: in visit_symbol_table
stnode = lookup_qualified_stnode(self.modules, cross_ref,
/Users/jukka/src/mypy/mypy/fixup.py:303: in lookup_qualified_stnode
return lookup_fully_qualified(name, modules, raise_on_missing=not allow_missing)
/Users/jukka/src/mypy/mypy/lookup.py:47: in lookup_fully_qualified
assert key in names, "Cannot find component %r for %r" % (key, name)
E AssertionError: Cannot find component 'A' for 'd.A'
This happens at least when importing a re-exported name that is originally from __getattr__
.
This seems to only/mostly happen on the third or later run (i.e. second incremental run).