diff --git a/jedi/evaluate/finder.py b/jedi/evaluate/finder.py index c0bd70fd..ee334499 100644 --- a/jedi/evaluate/finder.py +++ b/jedi/evaluate/finder.py @@ -79,6 +79,8 @@ class NameFinder(object): search_str = str(self.name_str) try: names = names_dict[search_str] + if not names: # There must be something in there otherwise stop. + return [] except KeyError: return [] @@ -348,7 +350,7 @@ class NameFinder(object): return result -@memoize_default(evaluator_is_first_arg=True) +@memoize_default([], evaluator_is_first_arg=True) def _name_to_types(evaluator, name, scope): types = [] typ = name.get_definition() diff --git a/jedi/evaluate/helpers.py b/jedi/evaluate/helpers.py index 291a1ec9..050dec46 100644 --- a/jedi/evaluate/helpers.py +++ b/jedi/evaluate/helpers.py @@ -169,6 +169,9 @@ class FakeImport(pr.Import): self._level = level self.name = name + def get_defined_names(self): + return [self.name] + def aliases(self): return {} @@ -183,6 +186,9 @@ class FakeImport(pr.Import): def paths(self): return [[self.name]] + def is_definition(self): + return True + class FakeName(pr.Name): def __init__(self, name_str, parent=None, start_pos=(0, 0), is_definition=None): diff --git a/jedi/evaluate/representation.py b/jedi/evaluate/representation.py index cf1279c3..baa4237a 100644 --- a/jedi/evaluate/representation.py +++ b/jedi/evaluate/representation.py @@ -905,7 +905,7 @@ class ModuleWrapper(use_metaclass(CachedMetaClass, pr.Module, Wrapper)): # It's obviously a relative import to the current module. imp = helpers.FakeImport(fake_n, self, level=1) fake_n.parent = imp - names[name] = fake_n + names[name] = [fake_n] # TODO add something like this in the future, its cleaner than the # import hacks.