From dfd39478564459406c639d9095f18e1b0c2ab704 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Thu, 28 Feb 2019 04:41:48 +0300 Subject: [PATCH] Keyword completion: add 'fun' after 'suspend' (KT-29038) #KT-29038 Fixed --- .../jetbrains/kotlin/idea/completion/KeywordCompletion.kt | 8 ++++++-- .../testData/keywords/AfterClassProperty.kt | 2 +- idea/idea-completion/testData/keywords/AfterClasses.kt | 2 +- .../testData/keywords/AfterClasses_LangLevel11.kt | 2 +- idea/idea-completion/testData/keywords/AfterFuns.kt | 2 +- .../testData/keywords/GlobalPropertyAccessors.kt | 2 +- .../testData/keywords/InAnnotationClassScope.kt | 2 +- .../idea-completion/testData/keywords/InClassBeforeFun.kt | 2 +- idea/idea-completion/testData/keywords/InClassScope.kt | 2 +- idea/idea-completion/testData/keywords/InEnumScope2.kt | 2 +- .../testData/keywords/InFunctionTypePosition.kt | 2 +- .../idea-completion/testData/keywords/InInterfaceScope.kt | 2 +- idea/idea-completion/testData/keywords/InObjectScope.kt | 2 +- .../testData/keywords/InTopScopeAfterPackage.kt | 2 +- idea/idea-completion/testData/keywords/InTypePosition.kt | 2 +- .../testData/keywords/PropertyAccessors.kt | 2 +- .../testData/keywords/PropertyAccessors2.kt | 2 +- idea/idea-completion/testData/keywords/PropertySetter.kt | 2 +- .../testData/keywords/SuspendInsideTypeArguments.kt | 2 +- .../testData/keywords/SuspendInsideTypeArguments1.kt | 2 +- idea/idea-completion/testData/keywords/TopScope.kt | 2 +- idea/idea-completion/testData/keywords/TopScope3-.kt | 2 +- idea/idea-completion/testData/keywords/topScope2.kt | 2 +- 23 files changed, 28 insertions(+), 24 deletions(-) diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KeywordCompletion.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KeywordCompletion.kt index 3bdb2a3d785..f654764ac1b 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KeywordCompletion.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KeywordCompletion.kt @@ -63,7 +63,8 @@ object KeywordCompletion { ANNOTATION_KEYWORD to CLASS_KEYWORD, SEALED_KEYWORD to CLASS_KEYWORD, LATEINIT_KEYWORD to VAR_KEYWORD, - CONST_KEYWORD to VAL_KEYWORD + CONST_KEYWORD to VAL_KEYWORD, + SUSPEND_KEYWORD to FUN_KEYWORD ) private val KEYWORD_CONSTRUCTS = mapOf( @@ -99,7 +100,10 @@ object KeywordCompletion { for (keywordToken in ALL_KEYWORDS) { var keyword = keywordToken.value - val nextKeyword = COMPOUND_KEYWORDS[keywordToken] + val nextKeyword = when { + keywordToken == SUSPEND_KEYWORD && ((position.containingFile as? KtFile)?.isScript() == true) -> null + else -> COMPOUND_KEYWORDS[keywordToken] + } var applicableAsCompound = false if (nextKeyword != null) { fun PsiElement.isSpace() = this is PsiWhiteSpace && '\n' !in getText() diff --git a/idea/idea-completion/testData/keywords/AfterClassProperty.kt b/idea/idea-completion/testData/keywords/AfterClassProperty.kt index 5856072d801..7644cd67087 100644 --- a/idea/idea-completion/testData/keywords/AfterClassProperty.kt +++ b/idea/idea-completion/testData/keywords/AfterClassProperty.kt @@ -39,7 +39,7 @@ class MouseMovedEventArgs // EXIST: tailrec // EXIST: external // EXIST: annotation class -// EXIST: suspend +// EXIST: suspend fun // EXIST: typealias // EXIST: expect // EXIST: actual diff --git a/idea/idea-completion/testData/keywords/AfterClasses.kt b/idea/idea-completion/testData/keywords/AfterClasses.kt index 38903eee906..beb33d27e9c 100644 --- a/idea/idea-completion/testData/keywords/AfterClasses.kt +++ b/idea/idea-completion/testData/keywords/AfterClasses.kt @@ -37,7 +37,7 @@ class AfterClasses { // EXIST: external // EXIST: annotation class // EXIST: const val -// EXIST: suspend +// EXIST: suspend fun // EXIST: typealias // EXIST: expect // EXIST: actual diff --git a/idea/idea-completion/testData/keywords/AfterClasses_LangLevel11.kt b/idea/idea-completion/testData/keywords/AfterClasses_LangLevel11.kt index 86576902a31..b9723eb0203 100644 --- a/idea/idea-completion/testData/keywords/AfterClasses_LangLevel11.kt +++ b/idea/idea-completion/testData/keywords/AfterClasses_LangLevel11.kt @@ -41,6 +41,6 @@ class B { // EXIST: annotation class // EXIST: annotation class AfterClasses_LangLevel11 // EXIST: const val -// EXIST: suspend +// EXIST: suspend fun // EXIST: typealias // NOTHING_ELSE diff --git a/idea/idea-completion/testData/keywords/AfterFuns.kt b/idea/idea-completion/testData/keywords/AfterFuns.kt index 71ae3369f5a..6726ee10002 100644 --- a/idea/idea-completion/testData/keywords/AfterFuns.kt +++ b/idea/idea-completion/testData/keywords/AfterFuns.kt @@ -38,7 +38,7 @@ class A { // EXIST: tailrec // EXIST: external // EXIST: annotation class -// EXIST: suspend +// EXIST: suspend fun // EXIST: typealias // EXIST: expect // EXIST: actual diff --git a/idea/idea-completion/testData/keywords/GlobalPropertyAccessors.kt b/idea/idea-completion/testData/keywords/GlobalPropertyAccessors.kt index 6da4ab0c5c3..abfad46cc70 100644 --- a/idea/idea-completion/testData/keywords/GlobalPropertyAccessors.kt +++ b/idea/idea-completion/testData/keywords/GlobalPropertyAccessors.kt @@ -45,7 +45,7 @@ var a : Int // EXIST: annotation class // EXIST: annotation class GlobalPropertyAccessors // EXIST: const val -// EXIST: suspend +// EXIST: suspend fun // EXIST: typealias // EXIST: expect // EXIST: actual diff --git a/idea/idea-completion/testData/keywords/InAnnotationClassScope.kt b/idea/idea-completion/testData/keywords/InAnnotationClassScope.kt index 233b136bc12..b63c3f91e94 100644 --- a/idea/idea-completion/testData/keywords/InAnnotationClassScope.kt +++ b/idea/idea-completion/testData/keywords/InAnnotationClassScope.kt @@ -24,7 +24,7 @@ annotation class Test { // EXIST: tailrec // EXIST: external // EXIST: annotation class -// EXIST: suspend +// EXIST: suspend fun // EXIST: typealias // EXIST: expect // EXIST: actual diff --git a/idea/idea-completion/testData/keywords/InClassBeforeFun.kt b/idea/idea-completion/testData/keywords/InClassBeforeFun.kt index 543a77758fc..6c494477170 100644 --- a/idea/idea-completion/testData/keywords/InClassBeforeFun.kt +++ b/idea/idea-completion/testData/keywords/InClassBeforeFun.kt @@ -36,7 +36,7 @@ public class Test { // EXIST: tailrec // EXIST: external // EXIST: annotation class -// EXIST: suspend +// EXIST: suspend fun // EXIST: typealias // EXIST: expect // EXIST: actual diff --git a/idea/idea-completion/testData/keywords/InClassScope.kt b/idea/idea-completion/testData/keywords/InClassScope.kt index 149a4288503..fbc2301e4a7 100644 --- a/idea/idea-completion/testData/keywords/InClassScope.kt +++ b/idea/idea-completion/testData/keywords/InClassScope.kt @@ -30,7 +30,7 @@ class TestClass { // EXIST: tailrec // EXIST: external // EXIST: annotation class -// EXIST: suspend +// EXIST: suspend fun // EXIST: typealias // EXIST: expect // EXIST: actual diff --git a/idea/idea-completion/testData/keywords/InEnumScope2.kt b/idea/idea-completion/testData/keywords/InEnumScope2.kt index c16bd5561a8..1ad80a9a6e5 100644 --- a/idea/idea-completion/testData/keywords/InEnumScope2.kt +++ b/idea/idea-completion/testData/keywords/InEnumScope2.kt @@ -24,7 +24,7 @@ enum class Test { // EXIST: tailrec // EXIST: external // EXIST: annotation class -// EXIST: suspend +// EXIST: suspend fun // EXIST: fun // EXIST: typealias // EXIST: expect diff --git a/idea/idea-completion/testData/keywords/InFunctionTypePosition.kt b/idea/idea-completion/testData/keywords/InFunctionTypePosition.kt index 8d28bb4803e..137d8a90429 100644 --- a/idea/idea-completion/testData/keywords/InFunctionTypePosition.kt +++ b/idea/idea-completion/testData/keywords/InFunctionTypePosition.kt @@ -2,5 +2,5 @@ fun foo() { val test : } -// EXIST: suspend +// EXIST: suspend fun // NOTHING_ELSE diff --git a/idea/idea-completion/testData/keywords/InInterfaceScope.kt b/idea/idea-completion/testData/keywords/InInterfaceScope.kt index a9df0092ed6..2acdaf89a42 100644 --- a/idea/idea-completion/testData/keywords/InInterfaceScope.kt +++ b/idea/idea-completion/testData/keywords/InInterfaceScope.kt @@ -26,7 +26,7 @@ interface Test { // EXIST: tailrec // EXIST: external // EXIST: annotation class -// EXIST: suspend +// EXIST: suspend fun // EXIST: typealias // EXIST: expect // EXIST: actual diff --git a/idea/idea-completion/testData/keywords/InObjectScope.kt b/idea/idea-completion/testData/keywords/InObjectScope.kt index c938aabd56c..638fd7fca00 100644 --- a/idea/idea-completion/testData/keywords/InObjectScope.kt +++ b/idea/idea-completion/testData/keywords/InObjectScope.kt @@ -28,7 +28,7 @@ object Test { // EXIST: external // EXIST: annotation class // EXIST: const val -// EXIST: suspend +// EXIST: suspend fun // EXIST: typealias // EXIST: expect // EXIST: actual diff --git a/idea/idea-completion/testData/keywords/InTopScopeAfterPackage.kt b/idea/idea-completion/testData/keywords/InTopScopeAfterPackage.kt index b8c72b8abff..69cdfe890ee 100644 --- a/idea/idea-completion/testData/keywords/InTopScopeAfterPackage.kt +++ b/idea/idea-completion/testData/keywords/InTopScopeAfterPackage.kt @@ -32,7 +32,7 @@ package Test // EXIST: annotation class // EXIST: annotation class InTopScopeAfterPackage // EXIST: const val -// EXIST: suspend +// EXIST: suspend fun // EXIST: typealias // EXIST: expect // EXIST: actual diff --git a/idea/idea-completion/testData/keywords/InTypePosition.kt b/idea/idea-completion/testData/keywords/InTypePosition.kt index abb77145f4d..399a80209df 100644 --- a/idea/idea-completion/testData/keywords/InTypePosition.kt +++ b/idea/idea-completion/testData/keywords/InTypePosition.kt @@ -1,5 +1,5 @@ val a : -// EXIST: suspend +// EXIST: suspend fun // NOTHING_ELSE diff --git a/idea/idea-completion/testData/keywords/PropertyAccessors.kt b/idea/idea-completion/testData/keywords/PropertyAccessors.kt index dde3ad27985..2482a1af6d4 100644 --- a/idea/idea-completion/testData/keywords/PropertyAccessors.kt +++ b/idea/idea-completion/testData/keywords/PropertyAccessors.kt @@ -38,7 +38,7 @@ class Some { // EXIST: tailrec // EXIST: external // EXIST: annotation class -// EXIST: suspend +// EXIST: suspend fun // EXIST: typealias // EXIST: expect // EXIST: actual diff --git a/idea/idea-completion/testData/keywords/PropertyAccessors2.kt b/idea/idea-completion/testData/keywords/PropertyAccessors2.kt index 64161276a48..7aae2bcfaf5 100644 --- a/idea/idea-completion/testData/keywords/PropertyAccessors2.kt +++ b/idea/idea-completion/testData/keywords/PropertyAccessors2.kt @@ -38,7 +38,7 @@ class Some { // EXIST: tailrec // EXIST: external // EXIST: annotation class -// EXIST: suspend +// EXIST: suspend fun // EXIST: typealias // EXIST: expect // EXIST: actual diff --git a/idea/idea-completion/testData/keywords/PropertySetter.kt b/idea/idea-completion/testData/keywords/PropertySetter.kt index 0c4e31519e2..df6a2cf7b40 100644 --- a/idea/idea-completion/testData/keywords/PropertySetter.kt +++ b/idea/idea-completion/testData/keywords/PropertySetter.kt @@ -36,7 +36,7 @@ class Some { // EXIST: tailrec // EXIST: external // EXIST: annotation class -// EXIST: suspend +// EXIST: suspend fun // EXIST: typealias // EXIST: expect // EXIST: actual diff --git a/idea/idea-completion/testData/keywords/SuspendInsideTypeArguments.kt b/idea/idea-completion/testData/keywords/SuspendInsideTypeArguments.kt index 498717586e8..924ccf848f3 100644 --- a/idea/idea-completion/testData/keywords/SuspendInsideTypeArguments.kt +++ b/idea/idea-completion/testData/keywords/SuspendInsideTypeArguments.kt @@ -5,7 +5,7 @@ class Su() { } -// EXIST: suspend +// EXIST: suspend fun /* TODO: items below are not valid here */ // EXIST: class diff --git a/idea/idea-completion/testData/keywords/SuspendInsideTypeArguments1.kt b/idea/idea-completion/testData/keywords/SuspendInsideTypeArguments1.kt index 26001b1e917..8e58fdacd7e 100644 --- a/idea/idea-completion/testData/keywords/SuspendInsideTypeArguments1.kt +++ b/idea/idea-completion/testData/keywords/SuspendInsideTypeArguments1.kt @@ -5,7 +5,7 @@ class Su() { } -// EXIST: suspend +// EXIST: suspend fun /* TODO: items below are not valid here */ // EXIST: class diff --git a/idea/idea-completion/testData/keywords/TopScope.kt b/idea/idea-completion/testData/keywords/TopScope.kt index 457ba1ecea3..bc3f48c807f 100644 --- a/idea/idea-completion/testData/keywords/TopScope.kt +++ b/idea/idea-completion/testData/keywords/TopScope.kt @@ -31,7 +31,7 @@ // EXIST: annotation class // EXIST: annotation class TopScope // EXIST: const val -// EXIST: suspend +// EXIST: suspend fun // EXIST: typealias // EXIST: expect // EXIST: actual diff --git a/idea/idea-completion/testData/keywords/TopScope3-.kt b/idea/idea-completion/testData/keywords/TopScope3-.kt index f8fa298a9a0..9993b2e4c12 100644 --- a/idea/idea-completion/testData/keywords/TopScope3-.kt +++ b/idea/idea-completion/testData/keywords/TopScope3-.kt @@ -24,7 +24,7 @@ // EXIST: external // EXIST: annotation class // EXIST: const val -// EXIST: suspend +// EXIST: suspend fun // EXIST: typealias // EXIST: expect // EXIST: actual diff --git a/idea/idea-completion/testData/keywords/topScope2.kt b/idea/idea-completion/testData/keywords/topScope2.kt index f8fa298a9a0..9993b2e4c12 100644 --- a/idea/idea-completion/testData/keywords/topScope2.kt +++ b/idea/idea-completion/testData/keywords/topScope2.kt @@ -24,7 +24,7 @@ // EXIST: external // EXIST: annotation class // EXIST: const val -// EXIST: suspend +// EXIST: suspend fun // EXIST: typealias // EXIST: expect // EXIST: actual