diff --git a/jedi/api/interpreter.py b/jedi/api/interpreter.py index bb7268a7..101c696d 100644 --- a/jedi/api/interpreter.py +++ b/jedi/api/interpreter.py @@ -3,6 +3,7 @@ TODO Some parts of this module are still not well documented. """ from jedi.inference import compiled +from jedi.inference.filters import ParserTreeFilter, MergedFilter from jedi.inference.compiled import mixed from jedi.inference.compiled.access import create_access_path from jedi.inference.context import ModuleContext @@ -30,12 +31,18 @@ class MixedModuleContext(ModuleContext): tree_value=self._value ) - def get_filters(self, *args, **kwargs): - for filter in self._value.as_context().get_filters(*args, **kwargs): - yield filter + def get_filters(self, until_position=None, origin_scope=None): + yield MergedFilter( + ParserTreeFilter( + parent_context=self, + until_position=until_position, + origin_scope=origin_scope + ), + self.get_global_filter(), + ) for namespace_obj in self._namespace_objects: compiled_value = _create(self.inference_state, namespace_obj) mixed_object = self._get_mixed_object(compiled_value) - for filter in mixed_object.get_filters(*args, **kwargs): + for filter in mixed_object.get_filters(until_position, origin_scope): yield filter diff --git a/test/test_api/test_interpreter.py b/test/test_api/test_interpreter.py index bae881de..e6782e7f 100644 --- a/test/test_api/test_interpreter.py +++ b/test/test_api/test_interpreter.py @@ -681,3 +681,9 @@ def test_string_annotation(annotations, result, code): x.__annotations__ = annotations defs = jedi.Interpreter(code or 'x()', [locals()]).infer() assert [d.name for d in defs] == result + + +def test_variable_reuse(): + x = 1 + d, = jedi.Interpreter('y = x\ny', [locals()]).infer() + assert d.name == 'int'