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");