mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 03:21:12 +07:00
PY-17052 Keyword arguments provided for unions with callables
This commit is contained in:
@@ -26,7 +26,7 @@ import com.jetbrains.python.psi.impl.PyKeywordArgumentProvider;
|
||||
import com.jetbrains.python.psi.resolve.PyResolveContext;
|
||||
import com.jetbrains.python.psi.resolve.QualifiedResolveResult;
|
||||
import com.jetbrains.python.psi.search.PySuperMethodsSearch;
|
||||
import com.jetbrains.python.psi.types.TypeEvalContext;
|
||||
import com.jetbrains.python.psi.types.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -51,6 +51,27 @@ public class KeywordArgumentCompletionUtil {
|
||||
addKeywordArgumentVariants(init, callExpr, ret);
|
||||
}
|
||||
}
|
||||
|
||||
final PyUnionType unionType = PyUtil.as(context.getType(callee), PyUnionType.class);
|
||||
if (unionType != null) {
|
||||
fetchCallablesFromUnion(ret, callExpr, unionType);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void fetchCallablesFromUnion(@NotNull final List<LookupElement> ret,
|
||||
@NotNull final PyCallExpression callExpr,
|
||||
@NotNull final PyUnionType unionType) {
|
||||
for (final PyType memberType : unionType.getMembers()) {
|
||||
if (memberType instanceof PyUnionType) {
|
||||
fetchCallablesFromUnion(ret, callExpr, (PyUnionType)memberType);
|
||||
}
|
||||
if (memberType instanceof PyFunctionType) {
|
||||
final PyFunctionType type = (PyFunctionType)memberType;
|
||||
if (type.isCallable()) {
|
||||
addKeywordArgumentVariants(type.getCallable(), callExpr, ret);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -75,7 +96,6 @@ public class KeywordArgumentCompletionUtil {
|
||||
else {
|
||||
addKeywordArgumentVariantsForCallable(callExpr, ret, parameters);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static void addKeywordArgumentVariantsForCallable(@NotNull final PyCallExpression callExpr,
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
spam = lambda eggs: eggs
|
||||
|
||||
spam_union = 1 if 42 != 42 else spam
|
||||
|
||||
spam(eggs=)
|
||||
spam_union(eggs=)
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
spam = lambda eggs: eggs
|
||||
|
||||
spam_union = 1 if 42 != 42 else spam
|
||||
|
||||
spam(egg<caret>)
|
||||
spam_union(egg<caret>)
|
||||
|
||||
Reference in New Issue
Block a user