Always place keywords after local variables and parameters
This commit is contained in:
@@ -1,4 +1,12 @@
|
||||
<root>
|
||||
<item
|
||||
name='com.intellij.codeInsight.completion.CompletionSorter com.intellij.codeInsight.completion.CompletionSorter weighAfter(java.lang.String, com.intellij.codeInsight.lookup.LookupElementWeigher...)'>
|
||||
<annotation name='org.jetbrains.annotations.NotNull'/>
|
||||
</item>
|
||||
<item
|
||||
name='com.intellij.codeInsight.completion.CompletionSorter com.intellij.codeInsight.completion.CompletionSorter weighBefore(java.lang.String, com.intellij.codeInsight.lookup.LookupElementWeigher...)'>
|
||||
<annotation name='org.jetbrains.annotations.NotNull'/>
|
||||
</item>
|
||||
<item name='com.intellij.codeInsight.completion.InsertionContext com.intellij.openapi.project.Project getProject()'>
|
||||
<annotation name='org.jetbrains.annotations.NotNull'/>
|
||||
</item>
|
||||
|
||||
@@ -36,7 +36,7 @@ import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
import org.jetbrains.jet.lexer.JetTokens;
|
||||
import org.jetbrains.jet.plugin.caches.JetShortNamesCache;
|
||||
import org.jetbrains.jet.plugin.codeInsight.TipsManager;
|
||||
import org.jetbrains.jet.plugin.completion.weigher.JetCompletionSorting;
|
||||
import org.jetbrains.jet.plugin.completion.weigher.WeigherPackage;
|
||||
import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache;
|
||||
import org.jetbrains.jet.plugin.project.CancelableResolveSession;
|
||||
import org.jetbrains.jet.plugin.references.JetSimpleNameReference;
|
||||
@@ -66,8 +66,9 @@ public class CompletionSession {
|
||||
|
||||
inDescriptor = scope != null ? scope.getContainingDeclaration() : null;
|
||||
|
||||
//noinspection StaticMethodReferencedViaSubclass
|
||||
this.jetResult = new JetCompletionResultSet(
|
||||
JetCompletionSorting.addJetSorting(parameters, result),
|
||||
WeigherPackage.addJetSorting(result, parameters),
|
||||
resolveSession,
|
||||
expressionBindingContext, new Condition<DeclarationDescriptor>() {
|
||||
@Override
|
||||
|
||||
@@ -42,6 +42,7 @@ import org.jetbrains.jet.lexer.JetToken;
|
||||
import org.jetbrains.jet.lexer.JetTokens;
|
||||
import org.jetbrains.jet.plugin.completion.handlers.JetKeywordInsertHandler;
|
||||
import org.jetbrains.jet.plugin.completion.handlers.JetTemplateInsertHandler;
|
||||
import org.jetbrains.jet.plugin.completion.weigher.WeigherPackage;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
@@ -54,7 +55,6 @@ import static org.jetbrains.jet.plugin.completion.handlers.JetFunctionInsertHand
|
||||
* A keyword contributor for Kotlin
|
||||
*/
|
||||
public class JetKeywordCompletionContributor extends CompletionContributor {
|
||||
|
||||
private final static InsertHandler<LookupElement> KEYWORDS_INSERT_HANDLER = new JetKeywordInsertHandler();
|
||||
|
||||
private final static ElementFilter GENERAL_FILTER = new NotFilter(new OrFilter(
|
||||
@@ -256,7 +256,10 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
|
||||
@Override
|
||||
protected void addCompletions(@NotNull CompletionParameters parameters, ProcessingContext context,
|
||||
@NotNull CompletionResultSet result) {
|
||||
result.withPrefixMatcher(new SimplePrefixMatcher(result.getPrefixMatcher().getPrefix())).addAllElements(elements);
|
||||
//noinspection StaticMethodReferencedViaSubclass
|
||||
WeigherPackage.addJetSorting(result, parameters)
|
||||
.withPrefixMatcher(new SimplePrefixMatcher(result.getPrefixMatcher().getPrefix()))
|
||||
.addAllElements(elements);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2013 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.jet.plugin.completion.weigher;
|
||||
|
||||
import com.intellij.codeInsight.completion.CompletionParameters;
|
||||
import com.intellij.codeInsight.completion.CompletionResultSet;
|
||||
import com.intellij.codeInsight.completion.CompletionSorter;
|
||||
import org.jetbrains.jet.lang.psi.JetFile;
|
||||
|
||||
public final class JetCompletionSorting {
|
||||
private JetCompletionSorting() {
|
||||
}
|
||||
|
||||
public static CompletionResultSet addJetSorting(CompletionParameters parameters, CompletionResultSet result) {
|
||||
CompletionSorter sorter = CompletionSorter.defaultSorter(parameters, result.getPrefixMatcher());
|
||||
sorter = sorter.weighAfter("stats",
|
||||
new JetLocalPreferableWeigher(),
|
||||
new JetExplicitlyImportedWeigher((JetFile)parameters.getOriginalFile()),
|
||||
new JetAccessibleWeigher());
|
||||
return result.withRelevanceSorter(sorter);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright 2010-2013 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.jet.plugin.completion.weigher
|
||||
|
||||
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
|
||||
|
||||
public fun CompletionResultSet.addJetSorting(parameters : CompletionParameters) : CompletionResultSet {
|
||||
var sorter = CompletionSorter.defaultSorter(parameters, getPrefixMatcher())!!
|
||||
|
||||
sorter = sorter.weighBefore("stats", JetLocalPreferableWeigher())
|
||||
|
||||
sorter = sorter.weighAfter(
|
||||
"stats",
|
||||
JetExplicitlyImportedWeigher(parameters.getOriginalFile() as JetFile),
|
||||
JetAccessibleWeigher())
|
||||
|
||||
return withRelevanceSorter(sorter)
|
||||
}
|
||||
@@ -20,9 +20,9 @@ import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.LookupElementWeigher;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.LocalVariableDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.LocalVariableDescriptor;
|
||||
import org.jetbrains.jet.plugin.completion.JetLookupObject;
|
||||
|
||||
class JetLocalPreferableWeigher extends LookupElementWeigher {
|
||||
@@ -31,8 +31,8 @@ class JetLocalPreferableWeigher extends LookupElementWeigher {
|
||||
}
|
||||
|
||||
private enum MyResult {
|
||||
probableKeyword,
|
||||
localOrParameter,
|
||||
probableKeyword,
|
||||
normal,
|
||||
packages
|
||||
}
|
||||
@@ -52,10 +52,16 @@ class JetLocalPreferableWeigher extends LookupElementWeigher {
|
||||
return MyResult.packages;
|
||||
}
|
||||
}
|
||||
} else if (object instanceof String) {
|
||||
}
|
||||
else if (object instanceof String) {
|
||||
return MyResult.probableKeyword;
|
||||
}
|
||||
|
||||
return MyResult.normal;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPrefixDependent() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
fun test() {
|
||||
val a = 12
|
||||
<caret>
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
fun test(fals: Int) {
|
||||
val falt = 111
|
||||
f<caret>
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fun bar(fo: Int) {
|
||||
<caret>
|
||||
}
|
||||
@@ -27,14 +27,26 @@ public class CompletionWeigherTest extends CompletionAutoPopupTestCase {
|
||||
doTest("init", "initLocal", "initParam", "initGlobal");
|
||||
}
|
||||
|
||||
public void testTemplatesAndKeywordsFirst() {
|
||||
doTest("va", "val ... = ...", "var ... = ...", "vararg", "values", "variables");
|
||||
public void testTemplatesAndKeywordsLast() {
|
||||
doTest("va", "values", "variables", "val ... = ...", "var ... = ...", "vararg");
|
||||
}
|
||||
|
||||
public void testDeprecatedFun() {
|
||||
doTest("foo", "foo1", "foo3", "foo2");
|
||||
}
|
||||
|
||||
public void testLocalsBeforeKeywords() {
|
||||
doTest("a", "a", "as");
|
||||
}
|
||||
|
||||
public void testParametersBeforeKeywords() {
|
||||
doTest("fo", "fo", "for (... in ...) {...}");
|
||||
}
|
||||
|
||||
public void testLocalsPropertiesKeywords() {
|
||||
doTest("a", "fals", "falt", "false");
|
||||
}
|
||||
|
||||
public void doTest(String type, @NonNls String... expected) {
|
||||
new WriteCommandAction(myFixture.getProject(), myFixture.getFile()) {
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user