From 7e395c2f88cf58aa4da0e02c2b9dd7c8fb1d32e0 Mon Sep 17 00:00:00 2001 From: Kanchalai Tanglertsampan Date: Fri, 7 Jul 2017 15:53:24 -0700 Subject: [PATCH 1/2] import keyword a left-hand-side expression --- src/compiler/utilities.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 0ac392a865d..c68e225364d 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -5108,6 +5108,7 @@ namespace ts { || kind === SyntaxKind.ThisKeyword || kind === SyntaxKind.TrueKeyword || kind === SyntaxKind.SuperKeyword + || kind === SyntaxKind.ImportKeyword || kind === SyntaxKind.NonNullExpression || kind === SyntaxKind.MetaProperty; } From 1ac95c29e4385b929b99dbc9641a5ebe951b6a7d Mon Sep 17 00:00:00 2001 From: Kanchalai Tanglertsampan Date: Fri, 7 Jul 2017 15:53:55 -0700 Subject: [PATCH 2/2] Add tests and update baselines --- .../importCallExpressionShouldNotGetParen.js | 18 +++++++++ ...ortCallExpressionShouldNotGetParen.symbols | 27 +++++++++++++ ...mportCallExpressionShouldNotGetParen.types | 39 +++++++++++++++++++ .../importCallExpressionWithTypeArgument.js | 4 +- .../importCallExpressionShouldNotGetParen.ts | 11 ++++++ 5 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 tests/baselines/reference/importCallExpressionShouldNotGetParen.js create mode 100644 tests/baselines/reference/importCallExpressionShouldNotGetParen.symbols create mode 100644 tests/baselines/reference/importCallExpressionShouldNotGetParen.types create mode 100644 tests/cases/conformance/dynamicImport/importCallExpressionShouldNotGetParen.ts diff --git a/tests/baselines/reference/importCallExpressionShouldNotGetParen.js b/tests/baselines/reference/importCallExpressionShouldNotGetParen.js new file mode 100644 index 00000000000..07539664aa3 --- /dev/null +++ b/tests/baselines/reference/importCallExpressionShouldNotGetParen.js @@ -0,0 +1,18 @@ +//// [importCallExpressionShouldNotGetParen.ts] +const localeName = "zh-CN"; +import(`./locales/${localeName}.js`).then(bar => { + let x = bar; +}); + +import("./locales/" + localeName + ".js").then(bar => { + let x = bar; +}); + +//// [importCallExpressionShouldNotGetParen.js] +const localeName = "zh-CN"; +import(`./locales/${localeName}.js`).then(bar => { + let x = bar; +}); +import("./locales/" + localeName + ".js").then(bar => { + let x = bar; +}); diff --git a/tests/baselines/reference/importCallExpressionShouldNotGetParen.symbols b/tests/baselines/reference/importCallExpressionShouldNotGetParen.symbols new file mode 100644 index 00000000000..ace34efcf0d --- /dev/null +++ b/tests/baselines/reference/importCallExpressionShouldNotGetParen.symbols @@ -0,0 +1,27 @@ +=== tests/cases/conformance/dynamicImport/importCallExpressionShouldNotGetParen.ts === +const localeName = "zh-CN"; +>localeName : Symbol(localeName, Decl(importCallExpressionShouldNotGetParen.ts, 0, 5)) + +import(`./locales/${localeName}.js`).then(bar => { +>import(`./locales/${localeName}.js`).then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --)) +>localeName : Symbol(localeName, Decl(importCallExpressionShouldNotGetParen.ts, 0, 5)) +>then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --)) +>bar : Symbol(bar, Decl(importCallExpressionShouldNotGetParen.ts, 1, 42)) + + let x = bar; +>x : Symbol(x, Decl(importCallExpressionShouldNotGetParen.ts, 2, 7)) +>bar : Symbol(bar, Decl(importCallExpressionShouldNotGetParen.ts, 1, 42)) + +}); + +import("./locales/" + localeName + ".js").then(bar => { +>import("./locales/" + localeName + ".js").then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --)) +>localeName : Symbol(localeName, Decl(importCallExpressionShouldNotGetParen.ts, 0, 5)) +>then : Symbol(Promise.then, Decl(lib.es5.d.ts, --, --)) +>bar : Symbol(bar, Decl(importCallExpressionShouldNotGetParen.ts, 5, 47)) + + let x = bar; +>x : Symbol(x, Decl(importCallExpressionShouldNotGetParen.ts, 6, 7)) +>bar : Symbol(bar, Decl(importCallExpressionShouldNotGetParen.ts, 5, 47)) + +}); diff --git a/tests/baselines/reference/importCallExpressionShouldNotGetParen.types b/tests/baselines/reference/importCallExpressionShouldNotGetParen.types new file mode 100644 index 00000000000..3e4001dc5b7 --- /dev/null +++ b/tests/baselines/reference/importCallExpressionShouldNotGetParen.types @@ -0,0 +1,39 @@ +=== tests/cases/conformance/dynamicImport/importCallExpressionShouldNotGetParen.ts === +const localeName = "zh-CN"; +>localeName : "zh-CN" +>"zh-CN" : "zh-CN" + +import(`./locales/${localeName}.js`).then(bar => { +>import(`./locales/${localeName}.js`).then(bar => { let x = bar;}) : Promise +>import(`./locales/${localeName}.js`).then : (onfulfilled?: (value: any) => TResult1 | PromiseLike, onrejected?: (reason: any) => TResult2 | PromiseLike) => Promise +>import(`./locales/${localeName}.js`) : Promise +>`./locales/${localeName}.js` : string +>localeName : "zh-CN" +>then : (onfulfilled?: (value: any) => TResult1 | PromiseLike, onrejected?: (reason: any) => TResult2 | PromiseLike) => Promise +>bar => { let x = bar;} : (bar: any) => void +>bar : any + + let x = bar; +>x : any +>bar : any + +}); + +import("./locales/" + localeName + ".js").then(bar => { +>import("./locales/" + localeName + ".js").then(bar => { let x = bar;}) : Promise +>import("./locales/" + localeName + ".js").then : (onfulfilled?: (value: any) => TResult1 | PromiseLike, onrejected?: (reason: any) => TResult2 | PromiseLike) => Promise +>import("./locales/" + localeName + ".js") : Promise +>"./locales/" + localeName + ".js" : string +>"./locales/" + localeName : string +>"./locales/" : "./locales/" +>localeName : "zh-CN" +>".js" : ".js" +>then : (onfulfilled?: (value: any) => TResult1 | PromiseLike, onrejected?: (reason: any) => TResult2 | PromiseLike) => Promise +>bar => { let x = bar;} : (bar: any) => void +>bar : any + + let x = bar; +>x : any +>bar : any + +}); diff --git a/tests/baselines/reference/importCallExpressionWithTypeArgument.js b/tests/baselines/reference/importCallExpressionWithTypeArgument.js index d8690cf5d75..cdea13b2fac 100644 --- a/tests/baselines/reference/importCallExpressionWithTypeArgument.js +++ b/tests/baselines/reference/importCallExpressionWithTypeArgument.js @@ -18,5 +18,5 @@ function foo() { return "foo"; } exports.foo = foo; //// [1.js] "use strict"; -var p1 = (import)("./0"); // error -var p2 = (import)("./0"); // error +var p1 = Promise.resolve().then(function () { return require("./0"); }); // error +var p2 = Promise.resolve().then(function () { return require("./0"); }); // error diff --git a/tests/cases/conformance/dynamicImport/importCallExpressionShouldNotGetParen.ts b/tests/cases/conformance/dynamicImport/importCallExpressionShouldNotGetParen.ts new file mode 100644 index 00000000000..6734e888a5e --- /dev/null +++ b/tests/cases/conformance/dynamicImport/importCallExpressionShouldNotGetParen.ts @@ -0,0 +1,11 @@ +// @module: esnext +// @target: es6 +// @noImplicitAny: true +const localeName = "zh-CN"; +import(`./locales/${localeName}.js`).then(bar => { + let x = bar; +}); + +import("./locales/" + localeName + ".js").then(bar => { + let x = bar; +}); \ No newline at end of file