diff --git a/idea/src/org/jetbrains/kotlin/idea/completion/KeywordCompletion.kt b/idea/src/org/jetbrains/kotlin/idea/completion/KeywordCompletion.kt index e0a3fc6e8c4..a4755ee598b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/completion/KeywordCompletion.kt +++ b/idea/src/org/jetbrains/kotlin/idea/completion/KeywordCompletion.kt @@ -45,7 +45,10 @@ object KeywordCompletion { .filter { it !in NON_ACTUAL_KEYWORDS } .map { it as JetKeywordToken } - private val KEYWORD_TO_DUMMY_POSTFIX = mapOf(OUT_KEYWORD to " X") + private val KEYWORD_TO_DUMMY_POSTFIX = mapOf( + OUT_KEYWORD to " X", + FILE_KEYWORD to ":" + ) public fun complete(position: PsiElement, prefix: String, consumer: (LookupElement) -> Unit) { if (!GENERAL_FILTER.isAcceptable(position, position)) return diff --git a/idea/src/org/jetbrains/kotlin/idea/completion/handlers/KotlinKeywordInsertHandler.kt b/idea/src/org/jetbrains/kotlin/idea/completion/handlers/KotlinKeywordInsertHandler.kt index dfe36cc40f0..e10cdd160f0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/completion/handlers/KotlinKeywordInsertHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/completion/handlers/KotlinKeywordInsertHandler.kt @@ -42,7 +42,11 @@ public object KotlinKeywordInsertHandler : InsertHandler { DYNAMIC_KEYWORD).map { it.getValue() } override fun handleInsert(context: InsertionContext, item: LookupElement) { - if (item.getLookupString() !in NO_SPACE_AFTER) { + val keyword = item.getLookupString() + if (keyword == FILE_KEYWORD.getValue()) { + WithTailInsertHandler.colonTail().postHandleInsert(context, item) + } + else if (keyword !in NO_SPACE_AFTER) { WithTailInsertHandler.spaceTail().postHandleInsert(context, item) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/completion/handlers/WithTailInsertHandler.kt b/idea/src/org/jetbrains/kotlin/idea/completion/handlers/WithTailInsertHandler.kt index c932d6c5484..777d550e1ed 100644 --- a/idea/src/org/jetbrains/kotlin/idea/completion/handlers/WithTailInsertHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/completion/handlers/WithTailInsertHandler.kt @@ -91,5 +91,6 @@ class WithTailInsertHandler(val tailText: String, fun elseTail() = WithTailInsertHandler("else", spaceBefore = true, spaceAfter = true) fun eqTail() = WithTailInsertHandler("=", spaceBefore = true, spaceAfter = true) /*TODO: use code style options*/ fun spaceTail() = WithTailInsertHandler(" ", spaceBefore = false, spaceAfter = false, overwriteText = false) + fun colonTail() = WithTailInsertHandler(":", spaceBefore = false, spaceAfter = true) } } diff --git a/idea/testData/completion/handlers/keywords/FileKeyword.kt b/idea/testData/completion/handlers/keywords/FileKeyword.kt new file mode 100644 index 00000000000..b6c557f45d8 --- /dev/null +++ b/idea/testData/completion/handlers/keywords/FileKeyword.kt @@ -0,0 +1 @@ +[fi] diff --git a/idea/testData/completion/handlers/keywords/FileKeyword.kt.after b/idea/testData/completion/handlers/keywords/FileKeyword.kt.after new file mode 100644 index 00000000000..9eaa6c5791d --- /dev/null +++ b/idea/testData/completion/handlers/keywords/FileKeyword.kt.after @@ -0,0 +1 @@ +[file: ] diff --git a/idea/testData/completion/keywords/FileKeyword.kt b/idea/testData/completion/keywords/FileKeyword.kt new file mode 100644 index 00000000000..d741a93d3ee --- /dev/null +++ b/idea/testData/completion/keywords/FileKeyword.kt @@ -0,0 +1,4 @@ +[] + +// EXIST: file +// NUMBER: 1 \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/completion/KeywordCompletionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/completion/KeywordCompletionTestGenerated.java index bc5b5c660d2..df047296a02 100644 --- a/idea/tests/org/jetbrains/kotlin/completion/KeywordCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/completion/KeywordCompletionTestGenerated.java @@ -102,6 +102,12 @@ public class KeywordCompletionTestGenerated extends AbstractKeywordCompletionTes doTest(fileName); } + @TestMetadata("FileKeyword.kt") + public void testFileKeyword() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/keywords/FileKeyword.kt"); + doTest(fileName); + } + @TestMetadata("GlobalPropertyAccessors.kt") public void testGlobalPropertyAccessors() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/keywords/GlobalPropertyAccessors.kt"); diff --git a/idea/tests/org/jetbrains/kotlin/completion/handlers/KeywordCompletionHandlerTestGenerated.java b/idea/tests/org/jetbrains/kotlin/completion/handlers/KeywordCompletionHandlerTestGenerated.java index e988ecacd29..b3138a00b3f 100644 --- a/idea/tests/org/jetbrains/kotlin/completion/handlers/KeywordCompletionHandlerTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/completion/handlers/KeywordCompletionHandlerTestGenerated.java @@ -42,6 +42,12 @@ public class KeywordCompletionHandlerTestGenerated extends AbstractKeywordComple doTest(fileName); } + @TestMetadata("FileKeyword.kt") + public void testFileKeyword() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/handlers/keywords/FileKeyword.kt"); + doTest(fileName); + } + @TestMetadata("NoSpaceAfterNull.kt") public void testNoSpaceAfterNull() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/handlers/keywords/NoSpaceAfterNull.kt");