Fixed KT-4318 Keyword should be selected in completion if there's exact match
#KT-4318 Fixed
This commit is contained in:
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user