mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-11 16:21:51 +08:00
decorator dotted_names goto lookups.
This commit is contained in:
@@ -76,7 +76,6 @@ 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.helpers import call_of_name
|
|
||||||
|
|
||||||
|
|
||||||
class Evaluator(object):
|
class Evaluator(object):
|
||||||
@@ -281,7 +280,7 @@ class Evaluator(object):
|
|||||||
def_ = name.get_definition()
|
def_ = name.get_definition()
|
||||||
if def_.type == 'expr_stmt' and name in def_.get_defined_names():
|
if def_.type == 'expr_stmt' and name in def_.get_defined_names():
|
||||||
return self.eval_statement(def_, name)
|
return self.eval_statement(def_, name)
|
||||||
call = call_of_name(name)
|
call = helpers.call_of_name(name)
|
||||||
return self.eval_element(call)
|
return self.eval_element(call)
|
||||||
|
|
||||||
def goto(self, name):
|
def goto(self, name):
|
||||||
@@ -328,10 +327,19 @@ class Evaluator(object):
|
|||||||
return [name]
|
return [name]
|
||||||
elif isinstance(stmt, pr.Import):
|
elif isinstance(stmt, pr.Import):
|
||||||
return imports.ImportWrapper(self, name).follow(is_goto=True)
|
return imports.ImportWrapper(self, name).follow(is_goto=True)
|
||||||
|
elif par.type == 'dotted_name': # Is a decorator.
|
||||||
|
index = par.children.index(name)
|
||||||
|
if index > 0:
|
||||||
|
new_dotted = helpers.deep_ast_copy(par)
|
||||||
|
new_dotted.children[index - 1:] = []
|
||||||
|
types = self.eval_element(new_dotted)
|
||||||
|
return resolve_implicit_imports(iterable.unite(
|
||||||
|
self.find_types(typ, name, is_goto=True) for typ in types
|
||||||
|
))
|
||||||
|
|
||||||
scope = name.get_parent_scope()
|
scope = name.get_parent_scope()
|
||||||
if pr.is_node(name.parent, 'trailer'):
|
if pr.is_node(name.parent, 'trailer'):
|
||||||
call = call_of_name(name, cut_own_trailer=True)
|
call = helpers.call_of_name(name, cut_own_trailer=True)
|
||||||
types = self.eval_element(call)
|
types = self.eval_element(call)
|
||||||
return resolve_implicit_imports(iterable.unite(
|
return resolve_implicit_imports(iterable.unite(
|
||||||
self.find_types(typ, name, is_goto=True) for typ in types
|
self.find_types(typ, name, is_goto=True) for typ in types
|
||||||
|
|||||||
@@ -202,3 +202,17 @@ def dec(dec_param=3):
|
|||||||
@dec(dec_param=5)
|
@dec(dec_param=5)
|
||||||
def y():
|
def y():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
class ClassDec():
|
||||||
|
def class_func(func):
|
||||||
|
return func
|
||||||
|
|
||||||
|
#! 14 ['def class_func']
|
||||||
|
@ClassDec.class_func
|
||||||
|
def x():
|
||||||
|
pass
|
||||||
|
|
||||||
|
#! 2 ['class ClassDec']
|
||||||
|
@ClassDec.class_func
|
||||||
|
def z():
|
||||||
|
pass
|
||||||
|
|||||||
Reference in New Issue
Block a user