1
0
forked from VimPlug/jedi

Fix param issues in goto definition.

This commit is contained in:
Dave Halter
2017-01-04 08:58:29 +01:00
parent 24457bfe2e
commit cd23499fbe
4 changed files with 29 additions and 5 deletions

View File

@@ -9,7 +9,6 @@ import re
from jedi._compatibility import u from jedi._compatibility import u
from jedi import settings from jedi import settings
from jedi import common from jedi import common
from jedi.parser import tree
from jedi.parser.utils import load_parser from jedi.parser.utils import load_parser
from jedi.cache import memoize_method from jedi.cache import memoize_method
from jedi.evaluate import representation as er from jedi.evaluate import representation as er
@@ -324,8 +323,14 @@ class BaseDefinition(object):
if self._name.tree_name is None: if self._name.tree_name is None:
return self return self
defs = self._evaluator.goto(self._name.parent_context, self._name.tree_name) names = self._evaluator.goto(self._name.parent_context, self._name.tree_name)
return [Definition(self._evaluator, d) for d in defs] return [Definition(self._evaluator, n) for n in names]
def _goto_definitions(self):
# TODO make this function public.
print(self._name.infer(), self._name.parent_context)
x = self._name.parent_context
return [Definition(self._evaluator, d.name) for d in self._name.infer()]
@property @property
@memoize_method @memoize_method

View File

@@ -77,7 +77,7 @@ from jedi.evaluate import compiled
from jedi.evaluate import precedence from jedi.evaluate import precedence
from jedi.evaluate import param from jedi.evaluate import param
from jedi.evaluate import helpers from jedi.evaluate import helpers
from jedi.evaluate.filters import TreeNameDefinition from jedi.evaluate.filters import TreeNameDefinition, ParamName
from jedi.evaluate.instance import AnonymousInstance, BoundMethod from jedi.evaluate.instance import AnonymousInstance, BoundMethod
@@ -483,6 +483,8 @@ class Evaluator(object):
# Only take the parent, because if it's more complicated than just # Only take the parent, because if it's more complicated than just
# a name it's something you can "goto" again. # a name it's something you can "goto" again.
return [TreeNameDefinition(context, name)] return [TreeNameDefinition(context, name)]
elif par.type == 'param' and par.name:
return [ParamName(context, name)]
elif isinstance(par, (tree.Param, tree.Function, tree.Class)) and par.name is name: elif isinstance(par, (tree.Param, tree.Function, tree.Class)) and par.name is name:
return [TreeNameDefinition(context, name)] return [TreeNameDefinition(context, name)]
elif isinstance(stmt, tree.Import): elif isinstance(stmt, tree.Import):

View File

@@ -184,7 +184,7 @@ param = ClassDef
def ab1(param): pass def ab1(param): pass
#! 9 ['param param'] #! 9 ['param param']
def ab2(param): pass def ab2(param): pass
#! 11 ['param = ClassDef'] #! 11 ['param a=param']
def ab3(a=param): pass def ab3(a=param): pass
ab1(ClassDef);ab2(ClassDef);ab3(ClassDef) ab1(ClassDef);ab2(ClassDef);ab3(ClassDef)

View File

@@ -177,3 +177,20 @@ def test_goto_assignments_follow_imports():
definition, = api.Script(code).goto_assignments(follow_imports=True) definition, = api.Script(code).goto_assignments(follow_imports=True)
assert 'inspect.py' in definition.module_path assert 'inspect.py' in definition.module_path
assert definition.start_pos > (1, 0) assert definition.start_pos > (1, 0)
code = '''def param(p): pass\nparam(1)'''
start_pos = 1, len('def param(')
script = api.Script(code, *start_pos)
definition, = script.goto_assignments(follow_imports=True)
assert definition.start_pos == start_pos
assert definition.name == 'p'
result, = definition.goto_assignments()
assert result.name == 'p'
result, = definition._goto_definitions()
assert result.name == 'int'
result, = result._goto_definitions()
assert result.name == 'int'
definition, = script.goto_assignments()
assert definition.start_pos == start_pos