Make sure inferring works even if a stub doesn't have all variables defined

This commit is contained in:
Dave Halter
2019-05-17 14:45:22 +02:00
parent 063eef3eaf
commit 9d5f57d798
3 changed files with 17 additions and 6 deletions

View File

@@ -29,6 +29,7 @@ from jedi.evaluate.filters import get_global_filters
from jedi.evaluate.names import TreeNameDefinition from jedi.evaluate.names import TreeNameDefinition
from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS
from jedi.parser_utils import is_scope, get_parent_scope from jedi.parser_utils import is_scope, get_parent_scope
from jedi.evaluate.gradual.conversion import stub_to_actual_context_set
class NameFinder(object): class NameFinder(object):
@@ -116,7 +117,17 @@ class NameFinder(object):
return get_global_filters(self._evaluator, self._context, position, origin_scope) return get_global_filters(self._evaluator, self._context, position, origin_scope)
else: else:
return self._context.get_filters(search_global, self._position, origin_scope=origin_scope) return self._get_context_filters(origin_scope)
def _get_context_filters(self, origin_scope):
for f in self._context.get_filters(False, self._position, origin_scope=origin_scope):
yield f
# This covers the case where a stub files are incomplete.
if self._context.is_stub():
contexts = stub_to_actual_context_set(self._context, ignore_compiled=True)
for c in contexts:
for f in c.get_filters():
yield f
def filter_name(self, filters): def filter_name(self, filters):
""" """

View File

@@ -8,7 +8,7 @@ from stub_folder import with_stub, stub_only, with_stub_folder, stub_only_folder
stub_only.in_stub_only stub_only.in_stub_only
#? str() #? str()
with_stub.in_with_stub_both with_stub.in_with_stub_both
#? #? int()
with_stub.in_with_stub_python with_stub.in_with_stub_python
#? float() #? float()
with_stub.in_with_stub_stub with_stub.in_with_stub_stub
@@ -22,7 +22,7 @@ with_stub.in_with_stub_stub
stub_only_folder.in_stub_only_folder stub_only_folder.in_stub_only_folder
#? str() #? str()
with_stub_folder.in_with_stub_both_folder with_stub_folder.in_with_stub_both_folder
#? #? int()
with_stub_folder.in_with_stub_python_folder with_stub_folder.in_with_stub_python_folder
#? float() #? float()
with_stub_folder.in_with_stub_stub_folder with_stub_folder.in_with_stub_stub_folder
@@ -38,7 +38,7 @@ from stub_folder.with_stub_folder import nested_stub_only, nested_with_stub, \
nested_stub_only.in_stub_only nested_stub_only.in_stub_only
#? float() #? float()
nested_with_stub.in_both nested_with_stub.in_both
#? #? str()
nested_with_stub.in_python nested_with_stub.in_python
#? int() #? int()
nested_with_stub.in_stub nested_with_stub.in_stub
@@ -56,7 +56,7 @@ from stub_folder.stub_only_folder import nested_stub_only, nested_with_stub, \
nested_stub_only.in_stub_only nested_stub_only.in_stub_only
#? float() #? float()
nested_with_stub.in_both nested_with_stub.in_both
#? #? str()
nested_with_stub.in_python nested_with_stub.in_python
#? int() #? int()
nested_with_stub.in_stub nested_with_stub.in_stub

View File

@@ -16,7 +16,7 @@ def ScriptInStubFolder(Script):
('code', 'expected'), [ ('code', 'expected'), [
('from no_python import foo', ['int']), ('from no_python import foo', ['int']),
('from with_python import stub_only', ['str']), ('from with_python import stub_only', ['str']),
('from with_python import python_only', []), ('from with_python import python_only', ['int']),
('from with_python import both', ['int']), ('from with_python import both', ['int']),
('from with_python import something_random', []), ('from with_python import something_random', []),
('from with_python.module import in_sub_module', ['int']), ('from with_python.module import in_sub_module', ['int']),