""" This is a module for various lookup functions: functions that will find a semantic node by its name. """ from __future__ import annotations from mypy.nodes import MypyFile, SymbolTableNode, TypeInfo # TODO: gradually move existing lookup functions to this module. def lookup_fully_qualified( name: str, modules: dict[str, MypyFile], *, raise_on_missing: bool = False ) -> SymbolTableNode | None: """Find a symbol using it fully qualified name. The algorithm has two steps: first we try splitting the name on '.' to find the module, then iteratively look for each next chunk after a '.' (e.g. for nested classes). This function should *not* be used to find a module. Those should be looked in the modules dictionary. """ # 1. Exclude the names of ad hoc instance intersections from step 2. i = name.find("