From d7601b755f7f988c75aee371f4319dc8bdf337ef Mon Sep 17 00:00:00 2001 From: xiaofa Date: Thu, 24 Jan 2019 18:16:34 +0800 Subject: [PATCH] fix trailing comma should not allowed in dynamic import argument --- src/compiler/checker.ts | 2 +- .../reference/dynamicImportTrailingComma.errors.txt | 8 ++++++++ tests/baselines/reference/dynamicImportTrailingComma.js | 7 +++++++ .../reference/dynamicImportTrailingComma.symbols | 7 +++++++ .../baselines/reference/dynamicImportTrailingComma.types | 9 +++++++++ tests/cases/compiler/dynamicImportTrailingComma.ts | 4 ++++ 6 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/dynamicImportTrailingComma.errors.txt create mode 100644 tests/baselines/reference/dynamicImportTrailingComma.js create mode 100644 tests/baselines/reference/dynamicImportTrailingComma.symbols create mode 100644 tests/baselines/reference/dynamicImportTrailingComma.types create mode 100644 tests/cases/compiler/dynamicImportTrailingComma.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index ac069d95fac..3a6d58db31c 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -31178,7 +31178,7 @@ namespace ts { if (nodeArguments.length !== 1) { return grammarErrorOnNode(node, Diagnostics.Dynamic_import_must_have_one_specifier_as_an_argument); } - + checkGrammarForDisallowedTrailingComma(nodeArguments); // see: parseArgumentOrArrayLiteralElement...we use this function which parse arguments of callExpression to parse specifier for dynamic import. // parseArgumentOrArrayLiteralElement allows spread element to be in an argument list which is not allowed as specifier in dynamic import. if (isSpreadElement(nodeArguments[0])) { diff --git a/tests/baselines/reference/dynamicImportTrailingComma.errors.txt b/tests/baselines/reference/dynamicImportTrailingComma.errors.txt new file mode 100644 index 00000000000..fbae6f2c6ba --- /dev/null +++ b/tests/baselines/reference/dynamicImportTrailingComma.errors.txt @@ -0,0 +1,8 @@ +tests/cases/compiler/dynamicImportTrailingComma.ts(2,12): error TS1009: Trailing comma not allowed. + + +==== tests/cases/compiler/dynamicImportTrailingComma.ts (1 errors) ==== + const path = './foo'; + import(path,); + ~ +!!! error TS1009: Trailing comma not allowed. \ No newline at end of file diff --git a/tests/baselines/reference/dynamicImportTrailingComma.js b/tests/baselines/reference/dynamicImportTrailingComma.js new file mode 100644 index 00000000000..bbbc9794af7 --- /dev/null +++ b/tests/baselines/reference/dynamicImportTrailingComma.js @@ -0,0 +1,7 @@ +//// [dynamicImportTrailingComma.ts] +const path = './foo'; +import(path,); + +//// [dynamicImportTrailingComma.js] +var path = './foo'; +Promise.resolve().then(function () { return require(path); }); diff --git a/tests/baselines/reference/dynamicImportTrailingComma.symbols b/tests/baselines/reference/dynamicImportTrailingComma.symbols new file mode 100644 index 00000000000..082c026613a --- /dev/null +++ b/tests/baselines/reference/dynamicImportTrailingComma.symbols @@ -0,0 +1,7 @@ +=== tests/cases/compiler/dynamicImportTrailingComma.ts === +const path = './foo'; +>path : Symbol(path, Decl(dynamicImportTrailingComma.ts, 0, 5)) + +import(path,); +>path : Symbol(path, Decl(dynamicImportTrailingComma.ts, 0, 5)) + diff --git a/tests/baselines/reference/dynamicImportTrailingComma.types b/tests/baselines/reference/dynamicImportTrailingComma.types new file mode 100644 index 00000000000..bb6c3966619 --- /dev/null +++ b/tests/baselines/reference/dynamicImportTrailingComma.types @@ -0,0 +1,9 @@ +=== tests/cases/compiler/dynamicImportTrailingComma.ts === +const path = './foo'; +>path : "./foo" +>'./foo' : "./foo" + +import(path,); +>import(path,) : Promise +>path : "./foo" + diff --git a/tests/cases/compiler/dynamicImportTrailingComma.ts b/tests/cases/compiler/dynamicImportTrailingComma.ts new file mode 100644 index 00000000000..de6aa6010b5 --- /dev/null +++ b/tests/cases/compiler/dynamicImportTrailingComma.ts @@ -0,0 +1,4 @@ +// @skipLibCheck: true +// @lib: es6 +const path = './foo'; +import(path,); \ No newline at end of file