Completion: more correct detection of keyword items on sorting
This commit is contained in:
@@ -39,7 +39,6 @@ import org.jetbrains.jet.plugin.caches.JetShortNamesCache;
|
|||||||
import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage;
|
import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage;
|
||||||
import org.jetbrains.jet.plugin.codeInsight.TipsManager;
|
import org.jetbrains.jet.plugin.codeInsight.TipsManager;
|
||||||
import org.jetbrains.jet.plugin.completion.smart.SmartCompletion;
|
import org.jetbrains.jet.plugin.completion.smart.SmartCompletion;
|
||||||
import org.jetbrains.jet.plugin.completion.weigher.WeigherPackage;
|
|
||||||
import org.jetbrains.jet.plugin.project.ResolveSessionForBodies;
|
import org.jetbrains.jet.plugin.project.ResolveSessionForBodies;
|
||||||
import org.jetbrains.jet.plugin.references.JetSimpleNameReference;
|
import org.jetbrains.jet.plugin.references.JetSimpleNameReference;
|
||||||
|
|
||||||
@@ -78,7 +77,7 @@ class CompletionSession {
|
|||||||
// which sometimes works incorrectly for Kotlin
|
// which sometimes works incorrectly for Kotlin
|
||||||
result = result.withPrefixMatcher(CompletionUtil.findJavaIdentifierPrefix(parameters));
|
result = result.withPrefixMatcher(CompletionUtil.findJavaIdentifierPrefix(parameters));
|
||||||
|
|
||||||
result = WeigherPackage.addJetSorting(result, parameters);
|
result = CompletionPackage.addKotlinSorting(result, parameters);
|
||||||
|
|
||||||
this.jetResult = new JetCompletionResultSet(result, resolveSession, expressionBindingContext, descriptorFilter);
|
this.jetResult = new JetCompletionResultSet(result, resolveSession, expressionBindingContext, descriptorFilter);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,8 +60,8 @@ private object KindWeigher : LookupElementWeigher("kotlin.kind") {
|
|||||||
|
|
||||||
localOrParameter
|
localOrParameter
|
||||||
property
|
property
|
||||||
probableKeyword
|
keyword
|
||||||
normal
|
default
|
||||||
packages
|
packages
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,12 +72,12 @@ private object KindWeigher : LookupElementWeigher("kotlin.kind") {
|
|||||||
is LocalVariableDescriptor, is ValueParameterDescriptor -> Weight.localOrParameter
|
is LocalVariableDescriptor, is ValueParameterDescriptor -> Weight.localOrParameter
|
||||||
is PropertyDescriptor -> Weight.property
|
is PropertyDescriptor -> Weight.property
|
||||||
is PackageViewDescriptor -> Weight.packages
|
is PackageViewDescriptor -> Weight.packages
|
||||||
else -> Weight.normal
|
else -> Weight.default
|
||||||
}
|
}
|
||||||
|
|
||||||
is String -> Weight.probableKeyword
|
is KeywordLookupObject -> Weight.keyword
|
||||||
|
|
||||||
else -> Weight.normal
|
else -> Weight.default
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,8 +23,6 @@ import com.intellij.psi.filters.position.LeftNeighbour
|
|||||||
import org.jetbrains.jet.lang.psi.*
|
import org.jetbrains.jet.lang.psi.*
|
||||||
import org.jetbrains.jet.lexer.JetToken
|
import org.jetbrains.jet.lexer.JetToken
|
||||||
import org.jetbrains.jet.lexer.JetTokens
|
import org.jetbrains.jet.lexer.JetTokens
|
||||||
import com.intellij.codeInsight.completion.CompletionContributor
|
|
||||||
import com.intellij.codeInsight.completion.CompletionType
|
|
||||||
import com.intellij.codeInsight.lookup.LookupElement
|
import com.intellij.codeInsight.lookup.LookupElement
|
||||||
import com.intellij.psi.filters.position.SuperParentFilter
|
import com.intellij.psi.filters.position.SuperParentFilter
|
||||||
import com.intellij.psi.util.PsiTreeUtil
|
import com.intellij.psi.util.PsiTreeUtil
|
||||||
@@ -42,6 +40,8 @@ import com.intellij.psi.filters.position.FilterPattern
|
|||||||
import com.intellij.patterns.PlatformPatterns
|
import com.intellij.patterns.PlatformPatterns
|
||||||
import com.intellij.psi.filters.position.PatternFilter
|
import com.intellij.psi.filters.position.PatternFilter
|
||||||
|
|
||||||
|
class KeywordLookupObject(val keyword: String)
|
||||||
|
|
||||||
public open class JetKeywordCompletionContributor() : CompletionContributor() {
|
public open class JetKeywordCompletionContributor() : CompletionContributor() {
|
||||||
{
|
{
|
||||||
val inTopLevel = notIdentifier(InTopFilter())
|
val inTopLevel = notIdentifier(InTopFilter())
|
||||||
@@ -116,7 +116,7 @@ public open class JetKeywordCompletionContributor() : CompletionContributor() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun registerScopeKeywordsCompletion(placeFilter : ElementFilter, keywords : Collection<JetToken>) {
|
private fun registerScopeKeywordsCompletion(placeFilter : ElementFilter, keywords : Collection<JetToken>) {
|
||||||
extend(CompletionType.BASIC, getPlacePattern(placeFilter), KeywordsCompletionProvider(keywords.map { it.toString()!! }))
|
extend(CompletionType.BASIC, getPlacePattern(placeFilter), KeywordsCompletionProvider(keywords.map { it.toString() }))
|
||||||
}
|
}
|
||||||
|
|
||||||
private inner class BunchKeywordRegister() {
|
private inner class BunchKeywordRegister() {
|
||||||
@@ -128,11 +128,11 @@ public open class JetKeywordCompletionContributor() : CompletionContributor() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun registerAll() {
|
fun registerAll() {
|
||||||
for (entry in orFiltersToKeywords.entrySet()!!) {
|
for ((filters, token) in orFiltersToKeywords.entrySet()) {
|
||||||
val orFilter = OrFilter()
|
val orFilter = OrFilter()
|
||||||
entry.key.forEach { filter -> orFilter.addFilter(filter) }
|
filters.forEach { filter -> orFilter.addFilter(filter) }
|
||||||
|
|
||||||
registerScopeKeywordsCompletion(orFilter, entry.value)
|
registerScopeKeywordsCompletion(orFilter, token)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -232,8 +232,7 @@ public open class JetKeywordCompletionContributor() : CompletionContributor() {
|
|||||||
|
|
||||||
private open class InPropertyBodyFilter() : PositionElementFilter() {
|
private open class InPropertyBodyFilter() : PositionElementFilter() {
|
||||||
override fun isAcceptable(element: Any?, context: PsiElement?): Boolean {
|
override fun isAcceptable(element: Any?, context: PsiElement?): Boolean {
|
||||||
if (!(element is PsiElement))
|
if (element !is PsiElement) return false
|
||||||
return false
|
|
||||||
|
|
||||||
val property = PsiTreeUtil.getParentOfType(context, javaClass<JetProperty>(), false)
|
val property = PsiTreeUtil.getParentOfType(context, javaClass<JetProperty>(), false)
|
||||||
return property != null && isAfterName(property, (element as PsiElement))
|
return property != null && isAfterName(property, (element as PsiElement))
|
||||||
@@ -269,17 +268,15 @@ public open class JetKeywordCompletionContributor() : CompletionContributor() {
|
|||||||
private val debugName : String
|
private val debugName : String
|
||||||
|
|
||||||
{
|
{
|
||||||
debugName = keywords.sort().makeString(separator = ", ")
|
debugName = keywords.sort().joinToString(separator = ", ")
|
||||||
|
|
||||||
elements = keywords.map { keyword ->
|
elements = keywords.map { keyword ->
|
||||||
val lookupElementBuilder = LookupElementBuilder.create(keyword).bold()
|
LookupElementBuilder.create(KeywordLookupObject(keyword), keyword)
|
||||||
|
.bold()
|
||||||
if (!JetKeywordCompletionContributor.FUNCTION_KEYWORDS.contains(keyword)) {
|
.withInsertHandler(if (keyword !in FUNCTION_KEYWORDS)
|
||||||
lookupElementBuilder.withInsertHandler(JetKeywordCompletionContributor.KEYWORDS_INSERT_HANDLER)
|
KEYWORDS_INSERT_HANDLER
|
||||||
}
|
else
|
||||||
else {
|
JetFunctionInsertHandler.NO_PARAMETERS_HANDLER)
|
||||||
lookupElementBuilder.withInsertHandler(JetFunctionInsertHandler.NO_PARAMETERS_HANDLER)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user