mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 21:11:28 +07:00
PY-42520 Impl filter repeated named args
GitOrigin-RevId: f68f51219b49792f109f94352e83f5671d53f3dd
This commit is contained in:
committed by
intellij-monorepo-bot
parent
49f52250f1
commit
c4bf5bc2fc
@@ -1829,6 +1829,18 @@ public abstract class PythonCommonCompletionTest extends PythonCommonTestCase {
|
||||
assertSdkRootsNotParsed(file);
|
||||
}
|
||||
|
||||
// PY-42520
|
||||
public void testNoRepeatingNamedArgs() {
|
||||
runWithLanguageLevel(
|
||||
LanguageLevel.getLatest(),
|
||||
() -> {
|
||||
List<String> suggested = doTestByText("print(end='.', <caret>");
|
||||
assertContainsElements(suggested, "sep=", "file=");
|
||||
assertDoesntContain(suggested, "end=");
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
private void doTestHasattrContributor(String[] inList, String[] notInList) {
|
||||
doTestHasattrContributor("hasattrCompletion/" + getTestName(true) + ".py", inList, notInList);
|
||||
}
|
||||
|
||||
@@ -1,45 +1,24 @@
|
||||
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.jetbrains.python.psi.impl.references;
|
||||
|
||||
import static com.jetbrains.python.psi.PyUtil.as;
|
||||
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.jetbrains.python.PyNames;
|
||||
import com.jetbrains.python.psi.PyCallExpression;
|
||||
import com.jetbrains.python.psi.PyCallable;
|
||||
import com.jetbrains.python.psi.PyElement;
|
||||
import com.jetbrains.python.psi.PyElementVisitor;
|
||||
import com.jetbrains.python.psi.PyExpression;
|
||||
import com.jetbrains.python.psi.PyFunction;
|
||||
import com.jetbrains.python.psi.PyNamedParameter;
|
||||
import com.jetbrains.python.psi.PyParameter;
|
||||
import com.jetbrains.python.psi.PyReferenceExpression;
|
||||
import com.jetbrains.python.psi.PyStarArgument;
|
||||
import com.jetbrains.python.psi.PyStringLiteralExpression;
|
||||
import com.jetbrains.python.psi.PySubscriptionExpression;
|
||||
import com.jetbrains.python.psi.PyTypedElement;
|
||||
import com.jetbrains.python.psi.PyUtil;
|
||||
import com.jetbrains.python.psi.*;
|
||||
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.PyCallableParameter;
|
||||
import com.jetbrains.python.psi.types.PyCallableType;
|
||||
import com.jetbrains.python.psi.types.PyClassType;
|
||||
import com.jetbrains.python.psi.types.PyType;
|
||||
import com.jetbrains.python.psi.types.PyTypeUtil;
|
||||
import com.jetbrains.python.psi.types.TypeEvalContext;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import com.jetbrains.python.psi.types.*;
|
||||
import one.util.streamex.StreamEx;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import static com.jetbrains.python.psi.PyUtil.as;
|
||||
|
||||
public class KeywordArgumentCompletionUtil {
|
||||
public static void collectFunctionArgNames(PyElement element,
|
||||
List<? super LookupElement> ret,
|
||||
@@ -56,9 +35,14 @@ public class KeywordArgumentCompletionUtil {
|
||||
calleeType = context.getType(implicit);
|
||||
}
|
||||
}
|
||||
Set<String> namedArgsAlready = StreamEx.of(callExpr.getArgumentList().getArguments())
|
||||
.select(PyKeywordArgument.class)
|
||||
.map(PyKeywordArgument::getKeyword)
|
||||
.toSet();
|
||||
final List<LookupElement> extra = PyTypeUtil.toStream(calleeType)
|
||||
.select(PyCallableType.class)
|
||||
.flatMap(type -> collectParameterNamesFromType(type, callExpr, context).stream())
|
||||
.filter(it -> !namedArgsAlready.contains(it))
|
||||
.map(name -> PyUtil.createNamedParameterLookup(name, element.getContainingFile(), addEquals))
|
||||
.toList();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user