Tweak keyword completion for lateinit and companion object
#KT-13673 fixed #KT-12293 fixed
This commit is contained in:
@@ -58,7 +58,8 @@ object KeywordCompletion {
|
||||
COMPANION_KEYWORD to OBJECT_KEYWORD,
|
||||
ENUM_KEYWORD to CLASS_KEYWORD,
|
||||
ANNOTATION_KEYWORD to CLASS_KEYWORD,
|
||||
SEALED_KEYWORD to CLASS_KEYWORD
|
||||
SEALED_KEYWORD to CLASS_KEYWORD,
|
||||
LATEINIT_KEYWORD to VAR_KEYWORD
|
||||
)
|
||||
|
||||
private val KEYWORD_CONSTRUCTS = mapOf<KtKeywordToken, String>(
|
||||
@@ -70,7 +71,8 @@ object KeywordCompletion {
|
||||
FINALLY_KEYWORD to "fun foo() { try {\n}\nfinally{\ncaret\n}",
|
||||
DO_KEYWORD to "fun foo() { do {\ncaret\n}",
|
||||
INIT_KEYWORD to "class C { init {\ncaret\n}",
|
||||
CONSTRUCTOR_KEYWORD to "class C { constructor(caret)"
|
||||
CONSTRUCTOR_KEYWORD to "class C { constructor(caret)",
|
||||
COMPANION_KEYWORD to "class C { companion object {\ncaret\n}"
|
||||
)
|
||||
|
||||
private val NO_SPACE_AFTER = listOf(THIS_KEYWORD,
|
||||
@@ -95,6 +97,7 @@ object KeywordCompletion {
|
||||
var keyword = keywordToken.value
|
||||
|
||||
val nextKeyword = COMPOUND_KEYWORDS[keywordToken]
|
||||
var applicableAsCompound = false
|
||||
if (nextKeyword != null) {
|
||||
fun PsiElement.isSpace() = this is PsiWhiteSpace && '\n' !in getText()
|
||||
|
||||
@@ -102,9 +105,10 @@ object KeywordCompletion {
|
||||
if (next != null && next.startsWith("$")) {
|
||||
next = next.substring(1)
|
||||
}
|
||||
if (next != nextKeyword.value) {
|
||||
if (next != nextKeyword.value)
|
||||
keyword += " " + nextKeyword.value
|
||||
}
|
||||
else
|
||||
applicableAsCompound = true
|
||||
}
|
||||
|
||||
if (keywordToken == DYNAMIC_KEYWORD && isJvmModule) continue // not supported for JVM
|
||||
@@ -115,7 +119,7 @@ object KeywordCompletion {
|
||||
if (!parserFilter(keywordToken)) continue
|
||||
|
||||
val constructText = KEYWORD_CONSTRUCTS[keywordToken]
|
||||
if (constructText != null) {
|
||||
if (constructText != null && !applicableAsCompound) {
|
||||
val element = createKeywordConstructLookupElement(position.project, keyword, constructText)
|
||||
consumer(element)
|
||||
}
|
||||
|
||||
+4
-1
@@ -140,7 +140,10 @@ fun createKeywordConstructLookupElement(
|
||||
.bold()
|
||||
.withTailText(tailText)
|
||||
.withInsertHandler { insertionContext, _ ->
|
||||
if (insertionContext.completionChar == Lookup.NORMAL_SELECT_CHAR || insertionContext.completionChar == Lookup.REPLACE_SELECT_CHAR) {
|
||||
if (insertionContext.completionChar == Lookup.NORMAL_SELECT_CHAR ||
|
||||
insertionContext.completionChar == Lookup.REPLACE_SELECT_CHAR ||
|
||||
insertionContext.completionChar == Lookup.AUTO_INSERT_SELECT_CHAR) {
|
||||
|
||||
val offset = insertionContext.tailOffset
|
||||
val newIndent = detectIndent(insertionContext.document.charsSequence, offset - keyword.length)
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
class C {
|
||||
companion object<caret>
|
||||
companion object {
|
||||
<caret>
|
||||
}
|
||||
}
|
||||
@@ -29,11 +29,11 @@ class MouseMovedEventArgs
|
||||
// EXIST: var
|
||||
// EXIST: constructor
|
||||
// EXIST: init
|
||||
// EXIST: companion object
|
||||
// EXIST: { itemText: "companion object", tailText: " {...}" }
|
||||
// EXIST: operator
|
||||
// EXIST: infix
|
||||
// EXIST: sealed class
|
||||
// EXIST: lateinit
|
||||
// EXIST: lateinit var
|
||||
// EXIST: data
|
||||
// EXIST: inline
|
||||
// EXIST: tailrec
|
||||
|
||||
+2
-2
@@ -28,11 +28,11 @@ class A {
|
||||
// EXIST: var
|
||||
// EXIST: constructor
|
||||
// EXIST: init
|
||||
// EXIST: companion object
|
||||
// EXIST: { itemText: "companion object", tailText: " {...}" }
|
||||
// EXIST: operator
|
||||
// EXIST: infix
|
||||
// EXIST: sealed class
|
||||
// EXIST: lateinit
|
||||
// EXIST: lateinit var
|
||||
// EXIST: data
|
||||
// EXIST: inline
|
||||
// EXIST: tailrec
|
||||
|
||||
@@ -3,4 +3,4 @@ class TestClass {
|
||||
object O {}
|
||||
}
|
||||
|
||||
// EXIST: "companion object"
|
||||
// EXIST: { itemText: "companion object", tailText: " {...}" }
|
||||
|
||||
@@ -18,7 +18,7 @@ annotation class Test {
|
||||
// EXIST: operator
|
||||
// EXIST: infix
|
||||
// EXIST: sealed class
|
||||
// EXIST: lateinit
|
||||
// EXIST: lateinit var
|
||||
// EXIST: data
|
||||
// EXIST: inline
|
||||
// EXIST: tailrec
|
||||
|
||||
@@ -26,11 +26,11 @@ public class Test {
|
||||
// EXIST: var
|
||||
// EXIST: constructor
|
||||
// EXIST: init
|
||||
// EXIST: companion object
|
||||
// EXIST: { itemText: "companion object", tailText: " {...}" }
|
||||
// EXIST: operator
|
||||
// EXIST: infix
|
||||
// EXIST: sealed class
|
||||
// EXIST: lateinit
|
||||
// EXIST: lateinit var
|
||||
// EXIST: data
|
||||
// EXIST: inline
|
||||
// EXIST: tailrec
|
||||
|
||||
+2
-2
@@ -20,11 +20,11 @@ class TestClass {
|
||||
// EXIST: var
|
||||
// EXIST: constructor
|
||||
// EXIST: init
|
||||
// EXIST: companion object
|
||||
// EXIST: { itemText: "companion object", tailText: " {...}" }
|
||||
// EXIST: operator
|
||||
// EXIST: infix
|
||||
// EXIST: sealed class
|
||||
// EXIST: lateinit
|
||||
// EXIST: lateinit var
|
||||
// EXIST: data
|
||||
// EXIST: inline
|
||||
// EXIST: tailrec
|
||||
|
||||
+2
-2
@@ -14,11 +14,11 @@ enum class Test {
|
||||
// EXIST: private
|
||||
// EXIST: protected
|
||||
// EXIST: public
|
||||
// EXIST: companion object
|
||||
// EXIST: { itemText: "companion object", tailText: " {...}" }
|
||||
// EXIST: operator
|
||||
// EXIST: infix
|
||||
// EXIST: sealed class
|
||||
// EXIST: lateinit
|
||||
// EXIST: lateinit var
|
||||
// EXIST: data
|
||||
// EXIST: inline
|
||||
// EXIST: tailrec
|
||||
|
||||
@@ -16,11 +16,11 @@ interface Test {
|
||||
// EXIST: var
|
||||
// EXIST: constructor
|
||||
// EXIST: init
|
||||
// EXIST: companion object
|
||||
// EXIST: { itemText: "companion object", tailText: " {...}" }
|
||||
// EXIST: operator
|
||||
// EXIST: infix
|
||||
// EXIST: sealed class
|
||||
// EXIST: lateinit
|
||||
// EXIST: lateinit var
|
||||
// EXIST: data
|
||||
// EXIST: inline
|
||||
// EXIST: tailrec
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@ object Test {
|
||||
// EXIST: operator
|
||||
// EXIST: infix
|
||||
// EXIST: sealed class
|
||||
// EXIST: lateinit
|
||||
// EXIST: lateinit var
|
||||
// EXIST: data
|
||||
// EXIST: inline
|
||||
// EXIST: tailrec
|
||||
|
||||
+1
-1
@@ -18,5 +18,5 @@ class TestSample(<caret>)
|
||||
/* TODO: keywords below should not be here*/
|
||||
// EXIST: abstract
|
||||
// EXIST: const
|
||||
// EXIST: lateinit
|
||||
// EXIST: lateinit var
|
||||
// NOTHING_ELSE
|
||||
|
||||
@@ -28,11 +28,11 @@ class Some {
|
||||
// EXIST: var
|
||||
// EXIST: constructor
|
||||
// EXIST: init
|
||||
// EXIST: companion object
|
||||
// EXIST: { itemText: "companion object", tailText: " {...}" }
|
||||
// EXIST: operator
|
||||
// EXIST: infix
|
||||
// EXIST: sealed class
|
||||
// EXIST: lateinit
|
||||
// EXIST: lateinit var
|
||||
// EXIST: data
|
||||
// EXIST: inline
|
||||
// EXIST: tailrec
|
||||
|
||||
@@ -28,11 +28,11 @@ class Some {
|
||||
// EXIST: var
|
||||
// EXIST: constructor
|
||||
// EXIST: init
|
||||
// EXIST: companion object
|
||||
// EXIST: { itemText: "companion object", tailText: " {...}" }
|
||||
// EXIST: operator
|
||||
// EXIST: infix
|
||||
// EXIST: sealed class
|
||||
// EXIST: lateinit
|
||||
// EXIST: lateinit var
|
||||
// EXIST: data
|
||||
// EXIST: inline
|
||||
// EXIST: tailrec
|
||||
|
||||
@@ -26,11 +26,11 @@ class Some {
|
||||
// EXIST: var
|
||||
// EXIST: constructor
|
||||
// EXIST: init
|
||||
// EXIST: companion object
|
||||
// EXIST: { itemText: "companion object", tailText: " {...}" }
|
||||
// EXIST: operator
|
||||
// EXIST: infix
|
||||
// EXIST: sealed class
|
||||
// EXIST: lateinit
|
||||
// EXIST: lateinit var
|
||||
// EXIST: data
|
||||
// EXIST: inline
|
||||
// EXIST: tailrec
|
||||
|
||||
Reference in New Issue
Block a user