From 843a005aecd517e56b7a81a26c7c1113ce882fe7 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Tue, 17 Dec 2013 21:16:13 +0400 Subject: [PATCH] Fixed KT-4318 Keyword should be selected in completion if there's exact match #KT-4318 Fixed --- .../plugin/completion/weigher/JetCompletionSorting.kt | 11 +++++++++++ .../completion/weighers/ExactMatchForKeyword.kt | 11 +++++++++++ .../completion/weighers/LocalFileBeforeImported.kt | 2 +- .../completion/weighers/PropertiesBeforeKeywords.kt | 2 +- .../weighers/CompletionWeigherTestGenerated.java | 5 +++++ 5 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 idea/testData/completion/weighers/ExactMatchForKeyword.kt diff --git a/idea/src/org/jetbrains/jet/plugin/completion/weigher/JetCompletionSorting.kt b/idea/src/org/jetbrains/jet/plugin/completion/weigher/JetCompletionSorting.kt index dee6ddb1bf8..a9c91999fab 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/weigher/JetCompletionSorting.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/weigher/JetCompletionSorting.kt @@ -20,6 +20,8 @@ import com.intellij.codeInsight.completion.CompletionResultSet import com.intellij.codeInsight.completion.CompletionParameters import com.intellij.codeInsight.completion.CompletionSorter import org.jetbrains.jet.lang.psi.JetFile +import com.intellij.codeInsight.lookup.LookupElementWeigher +import com.intellij.codeInsight.lookup.LookupElement public fun CompletionResultSet.addJetSorting(parameters : CompletionParameters) : CompletionResultSet { var sorter = CompletionSorter.defaultSorter(parameters, getPrefixMatcher())!! @@ -31,5 +33,14 @@ public fun CompletionResultSet.addJetSorting(parameters : CompletionParameters) JetDeclarationRemotenessWeigher(parameters.getOriginalFile() as JetFile), JetAccessibleWeigher()) + sorter = sorter.weighBefore("middleMatching", PreferMatchingItemWeigher(parameters)) + return withRelevanceSorter(sorter) +} + +class PreferMatchingItemWeigher(private val parameters: CompletionParameters) : LookupElementWeigher("preferMatching", false, true){ + override fun weigh(element: LookupElement): Comparable? { + val prefix = parameters.getLookup().itemPattern(element) + return if (element.getLookupString() == prefix) 0 else 1 + } } \ No newline at end of file diff --git a/idea/testData/completion/weighers/ExactMatchForKeyword.kt b/idea/testData/completion/weighers/ExactMatchForKeyword.kt new file mode 100644 index 00000000000..6bd32422189 --- /dev/null +++ b/idea/testData/completion/weighers/ExactMatchForKeyword.kt @@ -0,0 +1,11 @@ +fun test() { + val ifMore = true + val isFirst = true + if +} + +// ORDER: if +// ORDER: ifMore +// ORDER: isFirst +// ORDER: ifn +// SELECTED: 0 \ No newline at end of file diff --git a/idea/testData/completion/weighers/LocalFileBeforeImported.kt b/idea/testData/completion/weighers/LocalFileBeforeImported.kt index 7f368f73dd0..986affc6563 100644 --- a/idea/testData/completion/weighers/LocalFileBeforeImported.kt +++ b/idea/testData/completion/weighers/LocalFileBeforeImported.kt @@ -9,4 +9,4 @@ val some = foo // ORDER: foo, fooVar, fooLocal, fooImported, fooNotImported // INVOCATION_COUNT: 2 -// SELECTED: 1 \ No newline at end of file +// SELECTED: 0 \ No newline at end of file diff --git a/idea/testData/completion/weighers/PropertiesBeforeKeywords.kt b/idea/testData/completion/weighers/PropertiesBeforeKeywords.kt index a360f96e3e5..24b5f080eb1 100644 --- a/idea/testData/completion/weighers/PropertiesBeforeKeywords.kt +++ b/idea/testData/completion/weighers/PropertiesBeforeKeywords.kt @@ -16,4 +16,4 @@ class Test(val br2 = 12) { // "br" function is before other elements because of exact prefix match // ORDER: br, br4, br5, br1, br2, br3, break, brf -// SELECTED: 1 \ No newline at end of file +// SELECTED: 0 \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/completion/weighers/CompletionWeigherTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/weighers/CompletionWeigherTestGenerated.java index 0b0a9b6eb22..b119c1dc309 100644 --- a/idea/tests/org/jetbrains/jet/completion/weighers/CompletionWeigherTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/weighers/CompletionWeigherTestGenerated.java @@ -41,6 +41,11 @@ public class CompletionWeigherTestGenerated extends AbstractCompletionWeigherTes doTest("idea/testData/completion/weighers/DeprecatedFun.kt"); } + @TestMetadata("ExactMatchForKeyword.kt") + public void testExactMatchForKeyword() throws Exception { + doTest("idea/testData/completion/weighers/ExactMatchForKeyword.kt"); + } + @TestMetadata("KeywordsLast.kt") public void testKeywordsLast() throws Exception { doTest("idea/testData/completion/weighers/KeywordsLast.kt");