Get rid of follow_definition and replace it with infer

This commit is contained in:
Dave Halter
2019-05-31 00:35:18 +02:00
parent 9a713bc36f
commit f7076da700
2 changed files with 12 additions and 30 deletions

View File

@@ -14,10 +14,10 @@ from jedi.cache import memoize_method
from jedi.evaluate import imports from jedi.evaluate import imports
from jedi.evaluate import compiled from jedi.evaluate import compiled
from jedi.evaluate.imports import ImportName from jedi.evaluate.imports import ImportName
from jedi.evaluate.names import ParamName from jedi.evaluate.context import FunctionExecutionContext
from jedi.evaluate.context import FunctionExecutionContext, MethodContext
from jedi.evaluate.gradual.typeshed import StubModuleContext from jedi.evaluate.gradual.typeshed import StubModuleContext
from jedi.evaluate.gradual.conversion import name_to_stub, stub_to_actual_context_set from jedi.evaluate.gradual.conversion import name_to_stub, \
stub_to_actual_context_set, try_stubs_to_actual_context_set
from jedi.api.keywords import KeywordName from jedi.api.keywords import KeywordName
@@ -342,26 +342,12 @@ class BaseDefinition(object):
if not self._name.is_context_name: if not self._name.is_context_name:
return [] return []
tree_name = self._name.tree_name
parent_context = self._name.parent_context
# Param names are special because they are not handled by # Param names are special because they are not handled by
# the evaluator method. # the evaluator method.
if tree_name is None or parent_context is None or isinstance(self._name, ParamName): context_set = try_stubs_to_actual_context_set(
context_set = self._name.infer() self._name.infer(),
else: prefer_stub_to_compiled=True,
)
# TODO remove this paragraph, it's ugly and shouldn't be needed
inferred = self._name.infer()
if inferred:
inferred = next(iter(inferred))
if isinstance(inferred, MethodContext):
c = inferred.class_context
else:
c = self._name.parent_context
else:
c = self._name.parent_context
context_set = self._evaluator.goto_definitions(c, tree_name)
return [Definition(self._evaluator, d.name) for d in context_set] return [Definition(self._evaluator, d.name) for d in context_set]
@property @property
@@ -520,11 +506,7 @@ class Completion(BaseDefinition):
DeprecationWarning, DeprecationWarning,
stacklevel=2 stacklevel=2
) )
if not self._name.is_context_name: return self.infer()
return []
defs = self._name.infer()
return [Definition(self._evaluator, d.name) for d in defs]
class Definition(BaseDefinition): class Definition(BaseDefinition):

View File

@@ -7,14 +7,14 @@ from ..helpers import cwd_at
def test_import_empty(Script): def test_import_empty(Script):
""" github #340, return the full word. """ """ github #340, return the full word. """
completion = Script("import ").completions()[0] completion = Script("import ").completions()[0]
definition = completion.follow_definition()[0] definition = completion.infer()[0]
assert definition assert definition
def check_follow_definition_types(Script, source): def check_follow_definition_types(Script, source):
# nested import # nested import
completions = Script(source, path='some_path.py').completions() completions = Script(source, path='some_path.py').completions()
defs = chain.from_iterable(c.follow_definition() for c in completions) defs = chain.from_iterable(c.infer() for c in completions)
return [d.type for d in defs] return [d.type for d in defs]
@@ -30,7 +30,7 @@ def test_follow_import_incomplete(Script, environment):
itert = jedi.Script("from itertools import ").completions() itert = jedi.Script("from itertools import ").completions()
definitions = [d for d in itert if d.name == 'chain'] definitions = [d for d in itert if d.name == 'chain']
assert len(definitions) == 1 assert len(definitions) == 1
assert [d.type for d in definitions[0].follow_definition()] == ['class'] assert [d.type for d in definitions[0].infer()] == ['class']
# incomplete `from * import` part # incomplete `from * import` part
datetime = check_follow_definition_types(Script, "from datetime import datetim") datetime = check_follow_definition_types(Script, "from datetime import datetim")
@@ -40,7 +40,7 @@ def test_follow_import_incomplete(Script, environment):
assert set(datetime) == {'class', 'instance'} # py3: builtin and pure py version assert set(datetime) == {'class', 'instance'} # py3: builtin and pure py version
# os.path check # os.path check
ospath = check_follow_definition_types(Script, "from os.path import abspat") ospath = check_follow_definition_types(Script, "from os.path import abspat")
assert ospath == ['function'] assert set(ospath) == {'function'}
# alias # alias
alias = check_follow_definition_types(Script, "import io as abcd; abcd") alias = check_follow_definition_types(Script, "import io as abcd; abcd")