From d71d6835dcc1c8a97f57d630a23cfdd5176b8e80 Mon Sep 17 00:00:00 2001 From: "dreamran43@gmail.com" Date: Tue, 4 Dec 2018 00:32:33 +0800 Subject: [PATCH 1/5] Move await keyword to inside function --- src/services/completions.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/services/completions.ts b/src/services/completions.ts index c127f0c3a7b..d20ed537177 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -1921,7 +1921,7 @@ namespace ts.Completions { case KeywordCompletionFilters.None: return false; case KeywordCompletionFilters.All: - return kind === SyntaxKind.AsyncKeyword || SyntaxKind.AwaitKeyword || !isContextualKeyword(kind) && !isClassMemberCompletionKeyword(kind) || kind === SyntaxKind.DeclareKeyword || kind === SyntaxKind.ModuleKeyword + return kind === SyntaxKind.AsyncKeyword || !isContextualKeyword(kind) && !isClassMemberCompletionKeyword(kind) || kind === SyntaxKind.DeclareKeyword || kind === SyntaxKind.ModuleKeyword || isTypeKeyword(kind) && kind !== SyntaxKind.UndefinedKeyword; case KeywordCompletionFilters.ClassElementKeywords: return isClassMemberCompletionKeyword(kind); @@ -1957,7 +1957,7 @@ namespace ts.Completions { } function isFunctionLikeBodyKeyword(kind: SyntaxKind) { - return kind === SyntaxKind.AsyncKeyword || !isContextualKeyword(kind) && !isClassMemberCompletionKeyword(kind); + return kind === SyntaxKind.AsyncKeyword || kind === SyntaxKind.AwaitKeyword || !isContextualKeyword(kind) && !isClassMemberCompletionKeyword(kind); } function keywordForNode(node: Node): SyntaxKind { From 3a76e9fbc83d4b4380cf4660abdb9d1013c639ed Mon Sep 17 00:00:00 2001 From: "dreamran43@gmail.com" Date: Tue, 4 Dec 2018 01:19:51 +0800 Subject: [PATCH 2/5] Move await keyword to inside of function and test --- tests/cases/fourslash/completionInFunctionLikeBody.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/cases/fourslash/completionInFunctionLikeBody.ts b/tests/cases/fourslash/completionInFunctionLikeBody.ts index 95407b8f018..8c163ccb3b0 100644 --- a/tests/cases/fourslash/completionInFunctionLikeBody.ts +++ b/tests/cases/fourslash/completionInFunctionLikeBody.ts @@ -16,7 +16,7 @@ verify.completions( { marker: ["1", "2"], - includes: "async", + includes: ["async", "await"], excludes: ["public", "private", "protected", "constructor", "readonly", "static", "abstract", "get", "set"], }, { marker: ["3", "4"], exact: completion.classElementKeywords, isNewIdentifierLocation: true }, From fed689a010797446548f4483fca6fe0cd76b7db9 Mon Sep 17 00:00:00 2001 From: "dreamran43@gmail.com" Date: Tue, 4 Dec 2018 01:50:02 +0800 Subject: [PATCH 3/5] Move await keyword to inside of function (Recovery & try test) --- src/services/completions.ts | 4 ++-- tests/cases/fourslash/completionInFunctionLikeBody.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/services/completions.ts b/src/services/completions.ts index d20ed537177..c127f0c3a7b 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -1921,7 +1921,7 @@ namespace ts.Completions { case KeywordCompletionFilters.None: return false; case KeywordCompletionFilters.All: - return kind === SyntaxKind.AsyncKeyword || !isContextualKeyword(kind) && !isClassMemberCompletionKeyword(kind) || kind === SyntaxKind.DeclareKeyword || kind === SyntaxKind.ModuleKeyword + return kind === SyntaxKind.AsyncKeyword || SyntaxKind.AwaitKeyword || !isContextualKeyword(kind) && !isClassMemberCompletionKeyword(kind) || kind === SyntaxKind.DeclareKeyword || kind === SyntaxKind.ModuleKeyword || isTypeKeyword(kind) && kind !== SyntaxKind.UndefinedKeyword; case KeywordCompletionFilters.ClassElementKeywords: return isClassMemberCompletionKeyword(kind); @@ -1957,7 +1957,7 @@ namespace ts.Completions { } function isFunctionLikeBodyKeyword(kind: SyntaxKind) { - return kind === SyntaxKind.AsyncKeyword || kind === SyntaxKind.AwaitKeyword || !isContextualKeyword(kind) && !isClassMemberCompletionKeyword(kind); + return kind === SyntaxKind.AsyncKeyword || !isContextualKeyword(kind) && !isClassMemberCompletionKeyword(kind); } function keywordForNode(node: Node): SyntaxKind { diff --git a/tests/cases/fourslash/completionInFunctionLikeBody.ts b/tests/cases/fourslash/completionInFunctionLikeBody.ts index 8c163ccb3b0..95407b8f018 100644 --- a/tests/cases/fourslash/completionInFunctionLikeBody.ts +++ b/tests/cases/fourslash/completionInFunctionLikeBody.ts @@ -16,7 +16,7 @@ verify.completions( { marker: ["1", "2"], - includes: ["async", "await"], + includes: "async", excludes: ["public", "private", "protected", "constructor", "readonly", "static", "abstract", "get", "set"], }, { marker: ["3", "4"], exact: completion.classElementKeywords, isNewIdentifierLocation: true }, From 5d8342b0adcd2c23f4c2fa9be4b8b2935b833bf5 Mon Sep 17 00:00:00 2001 From: "dreamran43@gmail.com" Date: Tue, 4 Dec 2018 02:40:43 +0800 Subject: [PATCH 4/5] Move await keyword to inside of function and test --- src/harness/fourslash.ts | 1 + src/services/completions.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index 34fedccc19c..29fc1b5765b 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -4775,6 +4775,7 @@ namespace FourSlashInterface { "package", "yield", "async", + "await", ].map(keywordEntry); // TODO: many of these are inappropriate to always provide diff --git a/src/services/completions.ts b/src/services/completions.ts index c127f0c3a7b..93bea69f165 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -1957,7 +1957,7 @@ namespace ts.Completions { } function isFunctionLikeBodyKeyword(kind: SyntaxKind) { - return kind === SyntaxKind.AsyncKeyword || !isContextualKeyword(kind) && !isClassMemberCompletionKeyword(kind); + return kind === SyntaxKind.AsyncKeyword || SyntaxKind.AwaitKeyword || !isContextualKeyword(kind) && !isClassMemberCompletionKeyword(kind); } function keywordForNode(node: Node): SyntaxKind { From 33c3597b42829a6e7456f14f58f88c68cc2c5801 Mon Sep 17 00:00:00 2001 From: "dreamran43@gmail.com" Date: Tue, 4 Dec 2018 03:01:56 +0800 Subject: [PATCH 5/5] Move await keyword to inside of function and test --- src/harness/fourslash.ts | 1 + src/services/completions.ts | 2 +- tests/cases/fourslash/completionInFunctionLikeBody.ts | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index 29fc1b5765b..b79a154c555 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -4908,6 +4908,7 @@ namespace FourSlashInterface { "package", "yield", "async", + "await", ].map(keywordEntry); export const globalKeywordsPlusUndefined: ReadonlyArray = (() => { diff --git a/src/services/completions.ts b/src/services/completions.ts index 93bea69f165..43f00c58acf 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -1957,7 +1957,7 @@ namespace ts.Completions { } function isFunctionLikeBodyKeyword(kind: SyntaxKind) { - return kind === SyntaxKind.AsyncKeyword || SyntaxKind.AwaitKeyword || !isContextualKeyword(kind) && !isClassMemberCompletionKeyword(kind); + return kind === SyntaxKind.AsyncKeyword || kind === SyntaxKind.AwaitKeyword || !isContextualKeyword(kind) && !isClassMemberCompletionKeyword(kind); } function keywordForNode(node: Node): SyntaxKind { diff --git a/tests/cases/fourslash/completionInFunctionLikeBody.ts b/tests/cases/fourslash/completionInFunctionLikeBody.ts index 95407b8f018..8c163ccb3b0 100644 --- a/tests/cases/fourslash/completionInFunctionLikeBody.ts +++ b/tests/cases/fourslash/completionInFunctionLikeBody.ts @@ -16,7 +16,7 @@ verify.completions( { marker: ["1", "2"], - includes: "async", + includes: ["async", "await"], excludes: ["public", "private", "protected", "constructor", "readonly", "static", "abstract", "get", "set"], }, { marker: ["3", "4"], exact: completion.classElementKeywords, isNewIdentifierLocation: true },