@@ -6407,46 +6407,46 @@ def lookup_fully_qualified_or_none(self, fullname: str) -> SymbolTableNode | Non
64076407 # TODO: unify/clean-up/simplify lookup methods, see #4157.
64086408 # TODO: support nested classes (but consider performance impact,
64096409 # we might keep the module level only lookup for thing like 'builtins.int').
6410- assert "." in fullname
6411-
6412- splitted_modules = fullname .rsplit ("." )
6413- names = []
6414-
6415- while splitted_modules and "." .join (splitted_modules ) not in self .modules :
6416- """
6417- Try to find the module in the modules dictionary.
6410+ module , name = fullname .rsplit ("." , maxsplit = 1 )
6411+
6412+ if module in self .modules :
6413+ # If the module exists, look up the name in the module.
6414+ # This is the common case.
6415+ filenode = self .modules [module ]
6416+ result = filenode .names .get (name )
6417+ if result is None and self .is_incomplete_namespace (module ):
6418+ # TODO: More explicit handling of incomplete refs?
6419+ self .record_incomplete_ref ()
6420+ return result
6421+ else :
6422+ # Else, try to find the longest prefix of the module name that is in the modules dictionary.
6423+ splitted_modules = fullname .split ("." )
6424+ names = []
64186425
6419- If the module is not found, pop the last element of the splitted list and append it to the names list.
6426+ while splitted_modules and "." .join (splitted_modules ) not in self .modules :
6427+ names .append (splitted_modules .pop ())
64206428
6421- This is to find the longest prefix of the module name that is in the modules dictionary.
6422- """
6423- names . append ( splitted_modules . pop ())
6429+ if not splitted_modules or not names :
6430+ # If no module or name is found, return None.
6431+ return None
64246432
6425- if not splitted_modules or not names :
6426- """
6427- If no module or name is found, return None.
6428- """
6429- return None
6433+ # Reverse the names list to get the correct order of names.
6434+ names .reverse ()
64306435
6431- """
6432- Reverse the names list to get the correct order of names.
6433- """
6434- names .reverse ()
6436+ module = "." .join (splitted_modules )
6437+ filenode = self .modules [module ]
6438+ result = filenode .names .get (names [0 ])
64356439
6436- module = "." .join (splitted_modules )
6437- filenode = self .modules [module ]
6438- result = filenode .names .get (names [0 ])
6439-
6440- if result is None and self .is_incomplete_namespace (module ):
6441- # TODO: More explicit handling of incomplete refs?
6442- self .record_incomplete_ref ()
6440+ if result is None and self .is_incomplete_namespace (module ):
6441+ # TODO: More explicit handling of incomplete refs?
6442+ self .record_incomplete_ref ()
64436443
6444- for part in names [1 :]:
6445- if result is not None and isinstance (result .node , TypeInfo ):
6446- result = result .node .names .get (part )
6447- else :
6448- return None
6449- return result
6444+ for part in names [1 :]:
6445+ if result is not None and isinstance (result .node , TypeInfo ):
6446+ result = result .node .names .get (part )
6447+ else :
6448+ return None
6449+ return result
64506450
64516451 def object_type (self ) -> Instance :
64526452 return self .named_type ("builtins.object" )
0 commit comments