Fix an issue with interpreter completion, see also #1628

This commit is contained in:
Dave Halter
2020-07-12 22:01:55 +02:00
parent 0c618a4456
commit 396d7df314
2 changed files with 17 additions and 4 deletions

View File

@@ -3,6 +3,7 @@ TODO Some parts of this module are still not well documented.
""" """
from jedi.inference import compiled from jedi.inference import compiled
from jedi.inference.filters import ParserTreeFilter, MergedFilter
from jedi.inference.compiled import mixed from jedi.inference.compiled import mixed
from jedi.inference.compiled.access import create_access_path from jedi.inference.compiled.access import create_access_path
from jedi.inference.context import ModuleContext from jedi.inference.context import ModuleContext
@@ -30,12 +31,18 @@ class MixedModuleContext(ModuleContext):
tree_value=self._value tree_value=self._value
) )
def get_filters(self, *args, **kwargs): def get_filters(self, until_position=None, origin_scope=None):
for filter in self._value.as_context().get_filters(*args, **kwargs): yield MergedFilter(
yield filter ParserTreeFilter(
parent_context=self,
until_position=until_position,
origin_scope=origin_scope
),
self.get_global_filter(),
)
for namespace_obj in self._namespace_objects: for namespace_obj in self._namespace_objects:
compiled_value = _create(self.inference_state, namespace_obj) compiled_value = _create(self.inference_state, namespace_obj)
mixed_object = self._get_mixed_object(compiled_value) 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 yield filter

View File

@@ -681,3 +681,9 @@ def test_string_annotation(annotations, result, code):
x.__annotations__ = annotations x.__annotations__ = annotations
defs = jedi.Interpreter(code or 'x()', [locals()]).infer() defs = jedi.Interpreter(code or 'x()', [locals()]).infer()
assert [d.name for d in defs] == result 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'