From 54a5be1860c7f0de4e6196926d329fbbbf9c6081 Mon Sep 17 00:00:00 2001 From: Andy Date: Fri, 12 Oct 2018 08:49:04 -0700 Subject: [PATCH] At '.' in object literal, don't close the object (#27850) * At '.' in object literal, don't close the object * Include diagnostics test --- src/compiler/parser.ts | 10 +++++++++- .../unittests/convertCompilerOptionsFromJson.ts | 3 +-- tests/cases/fourslash/completionsDotInObjectLiteral.ts | 10 ++++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 tests/cases/fourslash/completionsDotInObjectLiteral.ts diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 51e56bbdd98..c88aebe799f 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1482,7 +1482,15 @@ namespace ts { // which would be a candidate for improved error reporting. return token() === SyntaxKind.OpenBracketToken || isLiteralPropertyName(); case ParsingContext.ObjectLiteralMembers: - return token() === SyntaxKind.OpenBracketToken || token() === SyntaxKind.AsteriskToken || token() === SyntaxKind.DotDotDotToken || isLiteralPropertyName(); + switch (token()) { + case SyntaxKind.OpenBracketToken: + case SyntaxKind.AsteriskToken: + case SyntaxKind.DotDotDotToken: + case SyntaxKind.DotToken: // Not an object literal member, but don't want to close the object (see `tests/cases/fourslash/completionsDotInObjectLiteral.ts`) + return true; + default: + return isLiteralPropertyName(); + } case ParsingContext.RestProperties: return isLiteralPropertyName(); case ParsingContext.ObjectBindingElements: diff --git a/src/testRunner/unittests/convertCompilerOptionsFromJson.ts b/src/testRunner/unittests/convertCompilerOptionsFromJson.ts index 6140ab72eee..327bf523160 100644 --- a/src/testRunner/unittests/convertCompilerOptionsFromJson.ts +++ b/src/testRunner/unittests/convertCompilerOptionsFromJson.ts @@ -596,8 +596,7 @@ namespace ts { { compilerOptions: { target: undefined, - module: ModuleKind.ESNext, - types: [] + module: ModuleKind.ESNext }, hasParseErrors: true } diff --git a/tests/cases/fourslash/completionsDotInObjectLiteral.ts b/tests/cases/fourslash/completionsDotInObjectLiteral.ts new file mode 100644 index 00000000000..171e8d2886b --- /dev/null +++ b/tests/cases/fourslash/completionsDotInObjectLiteral.ts @@ -0,0 +1,10 @@ +/// + +////const o = { +//// a: 1, +//// [|.|]/**/ +////[|}|]; + +verify.getSyntacticDiagnostics(test.ranges().map((range): FourSlashInterface.Diagnostic => + ({ code: 1003, message: "Identifier expected.", range }))); +verify.completions({ marker: "", exact: undefined });