forked from VimPlug/jedi
Fix param position lookups. Also forward annotations have the correct resolution path now (starting at the end of the file).
This commit is contained in:
@@ -322,6 +322,13 @@ class Evaluator(object):
|
|||||||
# This is the first global lookup.
|
# This is the first global lookup.
|
||||||
stmt = atom.get_definition()
|
stmt = atom.get_definition()
|
||||||
scope = stmt.get_parent_until(tree.IsScope, include_current=True)
|
scope = stmt.get_parent_until(tree.IsScope, include_current=True)
|
||||||
|
if isinstance(scope, (tree.Function, er.FunctionExecution)):
|
||||||
|
# Adjust scope: If the name is not in the suite, it's a param
|
||||||
|
# default or annotation and will be resolved as part of the
|
||||||
|
# parent scope.
|
||||||
|
colon = scope.children.index(':')
|
||||||
|
if atom.start_pos < scope.children[colon + 1].start_pos:
|
||||||
|
scope = scope.get_parent_scope()
|
||||||
if isinstance(stmt, tree.CompFor):
|
if isinstance(stmt, tree.CompFor):
|
||||||
stmt = stmt.get_parent_until((tree.ClassOrFunc, tree.ExprStmt))
|
stmt = stmt.get_parent_until((tree.ClassOrFunc, tree.ExprStmt))
|
||||||
if stmt.type != 'expr_stmt':
|
if stmt.type != 'expr_stmt':
|
||||||
|
|||||||
@@ -37,7 +37,9 @@ def _evaluate_for_annotation(evaluator, annotation):
|
|||||||
if element is None:
|
if element is None:
|
||||||
debug.warning('Annotation not parsed: %s' % definition.obj)
|
debug.warning('Annotation not parsed: %s' % definition.obj)
|
||||||
else:
|
else:
|
||||||
element.parent = annotation.parent
|
module = annotation.get_parent_until()
|
||||||
|
p.position_modifier.line = module.end_pos[0]
|
||||||
|
element.parent = module
|
||||||
definitions |= evaluator.eval_element(element)
|
definitions |= evaluator.eval_element(element)
|
||||||
else:
|
else:
|
||||||
definitions.add(definition)
|
definitions.add(definition)
|
||||||
|
|||||||
@@ -178,6 +178,23 @@ nested_default(a=1.0)[1]
|
|||||||
#? str()
|
#? str()
|
||||||
nested_default(a=1.0, b='')[1]
|
nested_default(a=1.0, b='')[1]
|
||||||
|
|
||||||
|
# Defaults should only work if they are defined before - not after.
|
||||||
|
def default_function(a=default):
|
||||||
|
#?
|
||||||
|
return a
|
||||||
|
|
||||||
|
#?
|
||||||
|
default_function()
|
||||||
|
|
||||||
|
default = int()
|
||||||
|
|
||||||
|
def default_function(a=default):
|
||||||
|
#? int()
|
||||||
|
return a
|
||||||
|
|
||||||
|
#? int()
|
||||||
|
default_function()
|
||||||
|
|
||||||
|
|
||||||
# -----------------
|
# -----------------
|
||||||
# closures
|
# closures
|
||||||
|
|||||||
@@ -137,9 +137,7 @@ function_with_non_pep_0484_annotation(1, 2, 3, "force string")
|
|||||||
def function_forward_reference_dynamic(
|
def function_forward_reference_dynamic(
|
||||||
x: return_str_type(),
|
x: return_str_type(),
|
||||||
y: "return_str_type()") -> None:
|
y: "return_str_type()") -> None:
|
||||||
# technically should not be resolvable since out of scope,
|
#?
|
||||||
# but jedi is not smart enough for that
|
|
||||||
#? str()
|
|
||||||
x
|
x
|
||||||
#? str()
|
#? str()
|
||||||
y
|
y
|
||||||
|
|||||||
Reference in New Issue
Block a user