diff --git a/jedi/api/interpreter.py b/jedi/api/interpreter.py index befafe5a..f47bb6ff 100644 --- a/jedi/api/interpreter.py +++ b/jedi/api/interpreter.py @@ -61,6 +61,7 @@ class MixedModuleContext(ModuleContext): ) def get_filters(self, until_position=None, origin_scope=None): + yield MergedFilter( MixedParserTreeFilter( parent_context=self, @@ -72,3 +73,10 @@ class MixedModuleContext(ModuleContext): for mixed_object in self.mixed_values: yield from mixed_object.get_filters(until_position, origin_scope) + + # Now that we have merged the filter for this mixed context we have to + # remove the first entry (which is the module itself), but we want to + # add the other filters like the star imports. + filters = self._value.get_filters(origin_scope) + next(filters, None) + yield from filters diff --git a/test/test_api/test_interpreter.py b/test/test_api/test_interpreter.py index 64da73de..1b80f986 100644 --- a/test/test_api/test_interpreter.py +++ b/test/test_api/test_interpreter.py @@ -858,3 +858,12 @@ def test_custom__getitem__(class_is_findable, allow_unsafe_getattr): else: expected = ['upper'] _assert_interpreter_complete('c["a"].up', namespace, expected) + + +def test_star_import_completions(): + # From #2087 + completions = jedi.Interpreter("from json import *\ndum", []).complete(2, 3) + names = [c.name for c in completions] + + assert 'dump' in names + assert 'dumps' in names