From 3fb64f4fa659febc282d00edeab9ce8bd64ff72f Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Wed, 2 Nov 2016 20:45:22 +0300 Subject: [PATCH] Fixed completion list sorting so that "shouldCompleteTopLevelCallablesFromIndex" not be first when typing "st" --- .../kotlin/idea/completion/BasicCompletionSession.kt | 2 +- .../jetbrains/kotlin/idea/completion/CompletionSession.kt | 4 ++++ idea/idea-completion/testData/weighers/basic/Prefix.kt | 8 ++++++++ .../weighers/BasicCompletionWeigherTestGenerated.java | 6 ++++++ 4 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 idea/idea-completion/testData/weighers/basic/Prefix.kt diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt index fd5ac40e79a..0a804a33572 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt @@ -497,7 +497,7 @@ class BasicCompletionSession( override fun addWeighers(sorter: CompletionSorter): CompletionSorter { if (shouldCompleteParameterNameAndType()) { - return sorter.weighBefore(DeprecatedWeigher.toString(), ParameterNameAndTypeCompletion.Weigher) + return sorter.weighBefore("prefix", ParameterNameAndTypeCompletion.Weigher) } return sorter } diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt index 39b04bc661a..82b4c7e9b69 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt @@ -21,6 +21,7 @@ import com.intellij.codeInsight.completion.CompletionResultSet import com.intellij.codeInsight.completion.CompletionSorter import com.intellij.codeInsight.completion.CompletionUtil import com.intellij.codeInsight.completion.impl.CamelHumpMatcher +import com.intellij.codeInsight.completion.impl.RealPrefixMatchingWeigher import com.intellij.codeInsight.lookup.LookupElement import com.intellij.patterns.PatternCondition import com.intellij.patterns.StandardPatterns @@ -244,6 +245,9 @@ abstract class CompletionSession( sorter = sorter.weighBefore("middleMatching", PreferMatchingItemWeigher) + // we insert one more RealPrefixMatchingWeigher because one inserted in default sorter is placed in a bad position (after "stats") + sorter = sorter.weighAfter("lift.shorter", RealPrefixMatchingWeigher()) + sorter = sorter.weighAfter("kotlin.proximity", ByNameAlphabeticalWeigher, PreferLessParametersWeigher) return sorter diff --git a/idea/idea-completion/testData/weighers/basic/Prefix.kt b/idea/idea-completion/testData/weighers/basic/Prefix.kt new file mode 100644 index 00000000000..c6122d64830 --- /dev/null +++ b/idea/idea-completion/testData/weighers/basic/Prefix.kt @@ -0,0 +1,8 @@ +fun shouldCompleteTopLevelCallablesFromIndex() = true + +fun foo(statement: String) { + if (st) +} + +// ORDER: statement +// ORDER: shouldCompleteTopLevelCallablesFromIndex diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/weighers/BasicCompletionWeigherTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/weighers/BasicCompletionWeigherTestGenerated.java index 50ec2ef1c61..119f3663ad7 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/weighers/BasicCompletionWeigherTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/weighers/BasicCompletionWeigherTestGenerated.java @@ -167,6 +167,12 @@ public class BasicCompletionWeigherTestGenerated extends AbstractBasicCompletion doTest(fileName); } + @TestMetadata("Prefix.kt") + public void testPrefix() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/weighers/basic/Prefix.kt"); + doTest(fileName); + } + @TestMetadata("PropertiesBeforeKeywords.kt") public void testPropertiesBeforeKeywords() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/weighers/basic/PropertiesBeforeKeywords.kt");