diff --git a/jedi/api/__init__.py b/jedi/api/__init__.py index 98709a3f..92909606 100644 --- a/jedi/api/__init__.py +++ b/jedi/api/__init__.py @@ -582,8 +582,8 @@ class Interpreter(Script): super(Interpreter, self).__init__(source, **kwds) self.namespaces = namespaces - # Here we add the namespaces to the current parser. - interpreter.create(self._evaluator, namespaces[0], self._parser.module()) + interpreter.add_namespaces_to_parser(self._evaluator, namespaces, + self._parser.module()) def _simple_complete(self, path, dot, like): user_stmt = self._parser.user_stmt_with_whitespace() diff --git a/jedi/api/interpreter.py b/jedi/api/interpreter.py index 9375b8d9..465f1439 100644 --- a/jedi/api/interpreter.py +++ b/jedi/api/interpreter.py @@ -18,34 +18,13 @@ from jedi.evaluate import iterable from jedi.evaluate import representation as er -class InterpreterNamespace(pt.Module): - def __init__(self, evaluator, namespace, parser_module): - self.namespace = namespace - self.parser_module = parser_module - self._evaluator = evaluator - - for key, value in self.namespace.items(): - arr = self.parser_module.names_dict.setdefault(key, []) - arr.append(LazyName(self._evaluator, parser_module, key, value)) - - @underscore_memoization - def get_defined_names(self): - raise NotImplementedError - for name in self.parser_module.get_defined_names(): - yield name - for key, value in self.namespace.items(): - yield LazyName(self._evaluator, key, value) - - @underscore_memoization - def used_names(self): - raise NotImplementedError - for name in self.parser_module.get_defined_names(): - yield name - for key, value in self.namespace.items(): - yield LazyName(self._evaluator, key, value) - - def __getattr__(self, name): - return getattr(self.parser_module, name) +def add_namespaces_to_parser(evaluator, namespaces, parser_module): + for namespace in namespaces: + for key, value in namespace.items(): + # Name lookups in an ast tree work by checking names_dict. + # Therefore we just add fake names to that and we're done. + arr = parser_module.names_dict.setdefault(key, []) + arr.append(LazyName(evaluator, parser_module, key, value)) class LazyName(helpers.FakeName): @@ -124,10 +103,3 @@ class LazyName(helpers.FakeName): @parent.setter def parent(self, value): """Needed because of the ``representation.Simple`` super class.""" - - -def create(evaluator, namespace, parser_module): - ns = InterpreterNamespace(evaluator, namespace, parser_module) - #for attr_name in pt.SCOPE_CONTENTS: - # for something in getattr(parser_module, attr_name): - # something.parent = ns