Code completion: changed dummy identifier for basic completion to ignore context ahead + no invisible symbols on first completion even if nothing matches
This commit is contained in:
@@ -42,6 +42,8 @@ public class JetCompletionContributor : CompletionContributor() {
|
||||
private val EXTENSION_RECEIVER_TYPE_DUMMY_IDENTIFIER = "KotlinExtensionDummy.fake() {}" // A way to add reference into file at completion place
|
||||
private val EXTENSION_RECEIVER_TYPE_ACTIVATION_PATTERN = psiElement().afterLeaf(JetTokens.FUN_KEYWORD.toString(), JetTokens.VAL_KEYWORD.toString(), JetTokens.VAR_KEYWORD.toString())
|
||||
|
||||
private val DEFAULT_DUMMY_IDENTIFIER = CompletionUtilCore.DUMMY_IDENTIFIER_TRIMMED + "$" // add '$' to ignore context after the caret
|
||||
|
||||
;{
|
||||
val provider = object : CompletionProvider<CompletionParameters>() {
|
||||
override fun addCompletions(parameters: CompletionParameters, context: ProcessingContext, result: CompletionResultSet) {
|
||||
@@ -60,7 +62,7 @@ public class JetCompletionContributor : CompletionContributor() {
|
||||
val tokenBefore = psiFile.findElementAt(Math.max(0, offset - 1))
|
||||
|
||||
val dummyIdentifier = when {
|
||||
context.getCompletionType() == CompletionType.SMART -> CompletionUtilCore.DUMMY_IDENTIFIER_TRIMMED + "$" // add '$' to ignore context after the caret
|
||||
context.getCompletionType() == CompletionType.SMART -> DEFAULT_DUMMY_IDENTIFIER
|
||||
|
||||
PackageDirectiveCompletion.ACTIVATION_PATTERN.accepts(tokenBefore) -> PackageDirectiveCompletion.DUMMY_IDENTIFIER
|
||||
|
||||
@@ -68,7 +70,7 @@ public class JetCompletionContributor : CompletionContributor() {
|
||||
|
||||
tokenBefore != null && isExtensionReceiverAfterDot(tokenBefore) -> CompletionUtilCore.DUMMY_IDENTIFIER_TRIMMED + "."
|
||||
|
||||
else -> CompletionUtilCore.DUMMY_IDENTIFIER_TRIMMED
|
||||
else -> DEFAULT_DUMMY_IDENTIFIER
|
||||
}
|
||||
context.setDummyIdentifier(dummyIdentifier)
|
||||
|
||||
@@ -153,7 +155,8 @@ public class JetCompletionContributor : CompletionContributor() {
|
||||
val somethingAdded = BasicCompletionSession(configuration, parameters, result).complete()
|
||||
if (!somethingAdded && parameters.getInvocationCount() < 2) {
|
||||
// Rerun completion if nothing was found
|
||||
val newConfiguration = CompletionSessionConfiguration(completeNonImportedDeclarations = true, completeNonAccessibleDeclarations = parameters.getInvocationCount() > 0)
|
||||
val newConfiguration = CompletionSessionConfiguration(completeNonImportedDeclarations = true,
|
||||
completeNonAccessibleDeclarations = false)
|
||||
BasicCompletionSession(newConfiguration, parameters, result).complete()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,8 +59,8 @@ object NamedParametersCompletion {
|
||||
val callElement = PsiTreeUtil.getParentOfType(thisArgument, javaClass<JetCallElement>()) ?: return false
|
||||
|
||||
for (argument in callElement.getValueArguments()) {
|
||||
if (argument.isNamed()) return true
|
||||
if (argument == thisArgument) break
|
||||
if (argument.isNamed()) return true
|
||||
}
|
||||
|
||||
return false
|
||||
|
||||
@@ -5,5 +5,5 @@ fun test(p: Int) = foo(12, <caret>, third = "")
|
||||
|
||||
// EXIST: p
|
||||
// ABSENT: first
|
||||
// ABSENT: third
|
||||
// EXIST: third
|
||||
// EXIST: second
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
fun foo(first: Int, second: Int, third: String) {
|
||||
}
|
||||
|
||||
fun test(p: Int) = foo(<caret>second = 3)
|
||||
|
||||
// EXIST: p
|
||||
// EXIST: first
|
||||
// EXIST: second
|
||||
// EXIST: third
|
||||
@@ -7,3 +7,4 @@ fun test(p: Int) = foo(12, third = "", <caret>)
|
||||
// ABSENT: first
|
||||
// ABSENT: third
|
||||
// EXIST: second
|
||||
// NUMBER: 1
|
||||
@@ -7,6 +7,6 @@ fun test() = small(param<caret>First = 12)
|
||||
|
||||
// EXIST: paramFirst
|
||||
// EXIST: paramSecond
|
||||
// ABSENT: paramTest
|
||||
// EXIST: paramTest
|
||||
|
||||
// NUMBER: 2
|
||||
// NUMBER: 3
|
||||
@@ -1,5 +1,5 @@
|
||||
val x = LinesStream<caret>
|
||||
|
||||
// INVOCATION_COUNT: 1
|
||||
// INVOCATION_COUNT: 2
|
||||
// EXIST: { lookupString:"LinesStream", tailText:" (kotlin.io)" }
|
||||
// NUMBER: 1
|
||||
|
||||
@@ -565,6 +565,11 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes
|
||||
doTest("idea/testData/completion/basic/common/namedParameters/NotOnlyNamedParameters.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("NotOnlyNamedParameters2.kt")
|
||||
public void testNotOnlyNamedParameters2() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/namedParameters/NotOnlyNamedParameters2.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("OnlyNamedParameters.kt")
|
||||
public void testOnlyNamedParameters() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/namedParameters/OnlyNamedParameters.kt");
|
||||
|
||||
@@ -565,6 +565,11 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT
|
||||
doTest("idea/testData/completion/basic/common/namedParameters/NotOnlyNamedParameters.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("NotOnlyNamedParameters2.kt")
|
||||
public void testNotOnlyNamedParameters2() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/namedParameters/NotOnlyNamedParameters2.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("OnlyNamedParameters.kt")
|
||||
public void testOnlyNamedParameters() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/namedParameters/OnlyNamedParameters.kt");
|
||||
|
||||
Reference in New Issue
Block a user