Skip to content

Crash from module level __getattr__ in incremental mode #10429

Closed
@JukkaL

Description

@JukkaL

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).

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions