Always place keywords after local variables and parameters
This commit is contained in:
@@ -1,4 +1,12 @@
|
|||||||
<root>
|
<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()'>
|
<item name='com.intellij.codeInsight.completion.InsertionContext com.intellij.openapi.project.Project getProject()'>
|
||||||
<annotation name='org.jetbrains.annotations.NotNull'/>
|
<annotation name='org.jetbrains.annotations.NotNull'/>
|
||||||
</item>
|
</item>
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
|||||||
import org.jetbrains.jet.lexer.JetTokens;
|
import org.jetbrains.jet.lexer.JetTokens;
|
||||||
import org.jetbrains.jet.plugin.caches.JetShortNamesCache;
|
import org.jetbrains.jet.plugin.caches.JetShortNamesCache;
|
||||||
import org.jetbrains.jet.plugin.codeInsight.TipsManager;
|
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.AnalyzerFacadeWithCache;
|
||||||
import org.jetbrains.jet.plugin.project.CancelableResolveSession;
|
import org.jetbrains.jet.plugin.project.CancelableResolveSession;
|
||||||
import org.jetbrains.jet.plugin.references.JetSimpleNameReference;
|
import org.jetbrains.jet.plugin.references.JetSimpleNameReference;
|
||||||
@@ -66,8 +66,9 @@ public class CompletionSession {
|
|||||||
|
|
||||||
inDescriptor = scope != null ? scope.getContainingDeclaration() : null;
|
inDescriptor = scope != null ? scope.getContainingDeclaration() : null;
|
||||||
|
|
||||||
|
//noinspection StaticMethodReferencedViaSubclass
|
||||||
this.jetResult = new JetCompletionResultSet(
|
this.jetResult = new JetCompletionResultSet(
|
||||||
JetCompletionSorting.addJetSorting(parameters, result),
|
WeigherPackage.addJetSorting(result, parameters),
|
||||||
resolveSession,
|
resolveSession,
|
||||||
expressionBindingContext, new Condition<DeclarationDescriptor>() {
|
expressionBindingContext, new Condition<DeclarationDescriptor>() {
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ import org.jetbrains.jet.lexer.JetToken;
|
|||||||
import org.jetbrains.jet.lexer.JetTokens;
|
import org.jetbrains.jet.lexer.JetTokens;
|
||||||
import org.jetbrains.jet.plugin.completion.handlers.JetKeywordInsertHandler;
|
import org.jetbrains.jet.plugin.completion.handlers.JetKeywordInsertHandler;
|
||||||
import org.jetbrains.jet.plugin.completion.handlers.JetTemplateInsertHandler;
|
import org.jetbrains.jet.plugin.completion.handlers.JetTemplateInsertHandler;
|
||||||
|
import org.jetbrains.jet.plugin.completion.weigher.WeigherPackage;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@@ -54,7 +55,6 @@ import static org.jetbrains.jet.plugin.completion.handlers.JetFunctionInsertHand
|
|||||||
* A keyword contributor for Kotlin
|
* A keyword contributor for Kotlin
|
||||||
*/
|
*/
|
||||||
public class JetKeywordCompletionContributor extends CompletionContributor {
|
public class JetKeywordCompletionContributor extends CompletionContributor {
|
||||||
|
|
||||||
private final static InsertHandler<LookupElement> KEYWORDS_INSERT_HANDLER = new JetKeywordInsertHandler();
|
private final static InsertHandler<LookupElement> KEYWORDS_INSERT_HANDLER = new JetKeywordInsertHandler();
|
||||||
|
|
||||||
private final static ElementFilter GENERAL_FILTER = new NotFilter(new OrFilter(
|
private final static ElementFilter GENERAL_FILTER = new NotFilter(new OrFilter(
|
||||||
@@ -256,7 +256,10 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
|
|||||||
@Override
|
@Override
|
||||||
protected void addCompletions(@NotNull CompletionParameters parameters, ProcessingContext context,
|
protected void addCompletions(@NotNull CompletionParameters parameters, ProcessingContext context,
|
||||||
@NotNull CompletionResultSet result) {
|
@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
|
@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 com.intellij.codeInsight.lookup.LookupElementWeigher;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
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.NamespaceDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.impl.LocalVariableDescriptor;
|
||||||
import org.jetbrains.jet.plugin.completion.JetLookupObject;
|
import org.jetbrains.jet.plugin.completion.JetLookupObject;
|
||||||
|
|
||||||
class JetLocalPreferableWeigher extends LookupElementWeigher {
|
class JetLocalPreferableWeigher extends LookupElementWeigher {
|
||||||
@@ -31,8 +31,8 @@ class JetLocalPreferableWeigher extends LookupElementWeigher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private enum MyResult {
|
private enum MyResult {
|
||||||
probableKeyword,
|
|
||||||
localOrParameter,
|
localOrParameter,
|
||||||
|
probableKeyword,
|
||||||
normal,
|
normal,
|
||||||
packages
|
packages
|
||||||
}
|
}
|
||||||
@@ -52,10 +52,16 @@ class JetLocalPreferableWeigher extends LookupElementWeigher {
|
|||||||
return MyResult.packages;
|
return MyResult.packages;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (object instanceof String) {
|
}
|
||||||
|
else if (object instanceof String) {
|
||||||
return MyResult.probableKeyword;
|
return MyResult.probableKeyword;
|
||||||
}
|
}
|
||||||
|
|
||||||
return MyResult.normal;
|
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");
|
doTest("init", "initLocal", "initParam", "initGlobal");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testTemplatesAndKeywordsFirst() {
|
public void testTemplatesAndKeywordsLast() {
|
||||||
doTest("va", "val ... = ...", "var ... = ...", "vararg", "values", "variables");
|
doTest("va", "values", "variables", "val ... = ...", "var ... = ...", "vararg");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testDeprecatedFun() {
|
public void testDeprecatedFun() {
|
||||||
doTest("foo", "foo1", "foo3", "foo2");
|
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) {
|
public void doTest(String type, @NonNls String... expected) {
|
||||||
new WriteCommandAction(myFixture.getProject(), myFixture.getFile()) {
|
new WriteCommandAction(myFixture.getProject(), myFixture.getFile()) {
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user