mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Fixed unresolved reference to parameter inside lambda in decorator (PY-6083)
This commit is contained in:
@@ -57,10 +57,12 @@ public class ScopeUtil {
|
||||
|
||||
@Nullable
|
||||
public static ScopeOwner getResolveScopeOwner(PsiElement element) {
|
||||
// References in default values of parameters are defined somewhere in outer scopes, as well as references in decorators and
|
||||
// superclasses
|
||||
if (PsiTreeUtil.getParentOfType(element, PyParameter.class, PyDecorator.class) != null) {
|
||||
element = getScopeOwner(element);
|
||||
// References in default values of parameters are defined somewhere in outer scopes, as well as references in decorators (if they are
|
||||
// not inside a lambda, see PY-6083) and superclasses
|
||||
final ScopeOwner initialScopeOwner = getScopeOwner(element);
|
||||
if (!(initialScopeOwner instanceof PyLambdaExpression && PsiTreeUtil.getParentOfType(element, PyDecorator.class) != null) &&
|
||||
PsiTreeUtil.getParentOfType(element, PyParameter.class, PyDecorator.class) != null) {
|
||||
element = initialScopeOwner;
|
||||
}
|
||||
final PyClass containingClass = PsiTreeUtil.getParentOfType(element, PyClass.class);
|
||||
if (containingClass != null && element != null &&
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
def f(y):
|
||||
return y
|
||||
|
||||
@f(lambda xx: xx<ref>)
|
||||
def g():
|
||||
pass
|
||||
@@ -457,4 +457,9 @@ public class PyResolveTest extends PyResolveTestCase {
|
||||
final PyFunction function = assertResolvesTo(PyFunction.class, "getStore");
|
||||
assertEquals("PluginMetaclass", function.getContainingClass().getName());
|
||||
}
|
||||
|
||||
// PY-6083
|
||||
public void testLambdaParameterInDecorator() {
|
||||
assertResolvesTo(PyNamedParameter.class, "xx");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user