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.CompletionParameters
|
||||||
import com.intellij.codeInsight.completion.CompletionSorter
|
import com.intellij.codeInsight.completion.CompletionSorter
|
||||||
import org.jetbrains.jet.lang.psi.JetFile
|
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 {
|
public fun CompletionResultSet.addJetSorting(parameters : CompletionParameters) : CompletionResultSet {
|
||||||
var sorter = CompletionSorter.defaultSorter(parameters, getPrefixMatcher())!!
|
var sorter = CompletionSorter.defaultSorter(parameters, getPrefixMatcher())!!
|
||||||
@@ -31,5 +33,14 @@ public fun CompletionResultSet.addJetSorting(parameters : CompletionParameters)
|
|||||||
JetDeclarationRemotenessWeigher(parameters.getOriginalFile() as JetFile),
|
JetDeclarationRemotenessWeigher(parameters.getOriginalFile() as JetFile),
|
||||||
JetAccessibleWeigher())
|
JetAccessibleWeigher())
|
||||||
|
|
||||||
|
sorter = sorter.weighBefore("middleMatching", PreferMatchingItemWeigher(parameters))
|
||||||
|
|
||||||
return withRelevanceSorter(sorter)
|
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
|
// ORDER: foo, fooVar, fooLocal, fooImported, fooNotImported
|
||||||
// INVOCATION_COUNT: 2
|
// 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
|
// "br" function is before other elements because of exact prefix match
|
||||||
|
|
||||||
// ORDER: br, br4, br5, br1, br2, br3, break, brf
|
// 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");
|
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")
|
@TestMetadata("KeywordsLast.kt")
|
||||||
public void testKeywordsLast() throws Exception {
|
public void testKeywordsLast() throws Exception {
|
||||||
doTest("idea/testData/completion/weighers/KeywordsLast.kt");
|
doTest("idea/testData/completion/weighers/KeywordsLast.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user