forked from VimPlug/jedi
Fix param issues in goto definition.
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user