Fixed KT-4318 Keyword should be selected in completion if there's exact match

#KT-4318 Fixed
This commit is contained in:
Valentin Kipyatkov
2013-12-17 21:16:13 +04:00
parent 17cf488cc6
commit 843a005aec
5 changed files with 29 additions and 2 deletions
@@ -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<Int>? {
val prefix = parameters.getLookup().itemPattern(element)
return if (element.getLookupString() == prefix) 0 else 1
}
}
@@ -0,0 +1,11 @@
fun test() {
val ifMore = true
val isFirst = true
if<caret>
}
// ORDER: if
// ORDER: ifMore
// ORDER: isFirst
// ORDER: ifn
// SELECTED: 0
@@ -9,4 +9,4 @@ val some = foo<caret>
// ORDER: foo, fooVar, fooLocal, fooImported, fooNotImported
// INVOCATION_COUNT: 2
// SELECTED: 1
// SELECTED: 0
@@ -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
// SELECTED: 0
@@ -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");