From 830f8af237fae33de7ca9eb8cff33cb7a9ab4034 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Mon, 23 Jul 2018 10:43:29 -0700 Subject: [PATCH 1/3] Only bind module.exports if no local definition exists Note that this uses `lookupSymbolForNameWorker`, which is really a best-effort check since it only knows about symbols that it has already encountered. As a side-effect, even when `module` is bound as part of a `module.exports` reference, it only declares it once instead of one declaration per reference. --- src/compiler/binder.ts | 4 +- .../contextualTypedSpecialAssignment.symbols | 4 +- .../jsdocTypeFromChainedAssignment2.symbols | 4 +- .../reference/moduleExportAlias.symbols | 38 +++++++------- .../reference/moduleExportAlias4.symbols | 2 +- .../reference/moduleExportAssignment.symbols | 6 +-- .../reference/moduleExportAssignment2.symbols | 2 +- .../reference/moduleExportAssignment3.symbols | 2 +- .../reference/moduleExportAssignment5.symbols | 2 +- .../reference/moduleExportAssignment6.symbols | 45 ++++++++++++++++ .../reference/moduleExportAssignment6.types | 51 +++++++++++++++++++ .../moduleExportNestedNamespaces.symbols | 6 +-- ...uleExportPropertyAssignmentDefault.symbols | 2 +- ...ExportWithExportPropertyAssignment.symbols | 2 +- ...xportWithExportPropertyAssignment2.symbols | 2 +- ...xportWithExportPropertyAssignment3.symbols | 6 +-- ...xportWithExportPropertyAssignment4.symbols | 6 +-- .../salsa/moduleExportAssignment6.ts | 19 +++++++ 18 files changed, 160 insertions(+), 43 deletions(-) create mode 100644 tests/baselines/reference/moduleExportAssignment6.symbols create mode 100644 tests/baselines/reference/moduleExportAssignment6.types create mode 100644 tests/cases/conformance/salsa/moduleExportAssignment6.ts diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 4ab044d52bac3..322846b6cb030 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -2072,7 +2072,9 @@ namespace ts { if (isSpecialPropertyDeclaration(node as PropertyAccessExpression)) { bindSpecialPropertyDeclaration(node as PropertyAccessExpression); } - if (isInJavaScriptFile(node) && isModuleExportsPropertyAccessExpression(node as PropertyAccessExpression)) { + if (isInJavaScriptFile(node) && + isModuleExportsPropertyAccessExpression(node as PropertyAccessExpression) && + !lookupSymbolForNameWorker(container, "module" as __String)) { declareSymbol(container.locals!, /*parent*/ undefined, (node as PropertyAccessExpression).expression as Identifier, SymbolFlags.FunctionScopedVariable | SymbolFlags.ModuleExports, SymbolFlags.FunctionScopedVariableExcludes); } diff --git a/tests/baselines/reference/contextualTypedSpecialAssignment.symbols b/tests/baselines/reference/contextualTypedSpecialAssignment.symbols index 375c5e939190f..ae22cf020da8b 100644 --- a/tests/baselines/reference/contextualTypedSpecialAssignment.symbols +++ b/tests/baselines/reference/contextualTypedSpecialAssignment.symbols @@ -102,7 +102,7 @@ exports.x module.exports.y = { >module.exports.y : Symbol(y, Decl(test.js, 45, 9)) >module.exports : Symbol(y, Decl(test.js, 45, 9)) ->module : Symbol(module, Decl(test.js, 45, 9), Decl(test.js, 51, 1)) +>module : Symbol(module, Decl(test.js, 45, 9)) >exports : Symbol("tests/cases/conformance/salsa/test", Decl(test.js, 0, 0)) >y : Symbol(y, Decl(test.js, 45, 9)) @@ -116,7 +116,7 @@ module.exports.y = { module.exports.y >module.exports.y : Symbol(y, Decl(test.js, 45, 9)) >module.exports : Symbol("tests/cases/conformance/salsa/test", Decl(test.js, 0, 0)) ->module : Symbol(module, Decl(test.js, 45, 9), Decl(test.js, 51, 1)) +>module : Symbol(module, Decl(test.js, 45, 9)) >exports : Symbol("tests/cases/conformance/salsa/test", Decl(test.js, 0, 0)) >y : Symbol(y, Decl(test.js, 45, 9)) diff --git a/tests/baselines/reference/jsdocTypeFromChainedAssignment2.symbols b/tests/baselines/reference/jsdocTypeFromChainedAssignment2.symbols index 35747a423a4d4..ae7236a015641 100644 --- a/tests/baselines/reference/jsdocTypeFromChainedAssignment2.symbols +++ b/tests/baselines/reference/jsdocTypeFromChainedAssignment2.symbols @@ -43,12 +43,12 @@ exports.f = exports.g = function fg(n) { module.exports.h = module.exports.i = function hi(mom) { >module.exports.h : Symbol(h, Decl(mod.js, 3, 1)) >module.exports : Symbol(h, Decl(mod.js, 3, 1)) ->module : Symbol(module, Decl(mod.js, 3, 1), Decl(mod.js, 5, 18)) +>module : Symbol(module, Decl(mod.js, 3, 1)) >exports : Symbol("tests/cases/conformance/jsdoc/mod", Decl(mod.js, 0, 0)) >h : Symbol(h, Decl(mod.js, 3, 1)) >module.exports.i : Symbol(i, Decl(mod.js, 5, 18)) >module.exports : Symbol(i, Decl(mod.js, 5, 18)) ->module : Symbol(module, Decl(mod.js, 3, 1), Decl(mod.js, 5, 18)) +>module : Symbol(module, Decl(mod.js, 3, 1)) >exports : Symbol("tests/cases/conformance/jsdoc/mod", Decl(mod.js, 0, 0)) >i : Symbol(i, Decl(mod.js, 5, 18)) >hi : Symbol(hi, Decl(mod.js, 5, 37)) diff --git a/tests/baselines/reference/moduleExportAlias.symbols b/tests/baselines/reference/moduleExportAlias.symbols index b2d7e17a27f02..67720f1cde304 100644 --- a/tests/baselines/reference/moduleExportAlias.symbols +++ b/tests/baselines/reference/moduleExportAlias.symbols @@ -121,7 +121,7 @@ exports.func2 = function () { }; var moduleExportsAlias = module.exports; >moduleExportsAlias : Symbol(moduleExportsAlias, Decl(b.js, 4, 3)) >module.exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) ->module : Symbol(module, Decl(b.js, 4, 24), Decl(b.js, 5, 43), Decl(b.js, 8, 41), Decl(b.js, 11, 31), Decl(b.js, 18, 51) ... and 14 more) +>module : Symbol(module, Decl(b.js, 4, 24)) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) moduleExportsAlias.func3 = function () { }; @@ -132,7 +132,7 @@ moduleExportsAlias.func3 = function () { }; module.exports.func4 = function () { }; >module.exports.func4 : Symbol(func4, Decl(b.js, 5, 43)) >module.exports : Symbol(func4, Decl(b.js, 5, 43)) ->module : Symbol(module, Decl(b.js, 4, 24), Decl(b.js, 5, 43), Decl(b.js, 8, 41), Decl(b.js, 11, 31), Decl(b.js, 18, 51) ... and 14 more) +>module : Symbol(module, Decl(b.js, 4, 24)) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) >func4 : Symbol(func4, Decl(b.js, 5, 43)) @@ -140,7 +140,7 @@ var multipleDeclarationAlias1 = exports = module.exports; >multipleDeclarationAlias1 : Symbol(multipleDeclarationAlias1, Decl(b.js, 8, 3)) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) >module.exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) ->module : Symbol(module, Decl(b.js, 4, 24), Decl(b.js, 5, 43), Decl(b.js, 8, 41), Decl(b.js, 11, 31), Decl(b.js, 18, 51) ... and 14 more) +>module : Symbol(module, Decl(b.js, 4, 24)) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) multipleDeclarationAlias1.func5 = function () { }; @@ -151,7 +151,7 @@ multipleDeclarationAlias1.func5 = function () { }; var multipleDeclarationAlias2 = module.exports = exports; >multipleDeclarationAlias2 : Symbol(multipleDeclarationAlias2, Decl(b.js, 11, 3)) >module.exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) ->module : Symbol(module, Decl(b.js, 4, 24), Decl(b.js, 5, 43), Decl(b.js, 8, 41), Decl(b.js, 11, 31), Decl(b.js, 18, 51) ... and 14 more) +>module : Symbol(module, Decl(b.js, 4, 24)) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) @@ -177,7 +177,7 @@ var multipleDeclarationAlias4 = someOtherVariable = module.exports; >multipleDeclarationAlias4 : Symbol(multipleDeclarationAlias4, Decl(b.js, 18, 3)) >someOtherVariable : Symbol(someOtherVariable, Decl(b.js, 14, 3)) >module.exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) ->module : Symbol(module, Decl(b.js, 4, 24), Decl(b.js, 5, 43), Decl(b.js, 8, 41), Decl(b.js, 11, 31), Decl(b.js, 18, 51) ... and 14 more) +>module : Symbol(module, Decl(b.js, 4, 24)) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) multipleDeclarationAlias4.func8 = function () { }; @@ -188,7 +188,7 @@ multipleDeclarationAlias4.func8 = function () { }; var multipleDeclarationAlias5 = module.exports = exports = {}; >multipleDeclarationAlias5 : Symbol(multipleDeclarationAlias5, Decl(b.js, 21, 3)) >module.exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) ->module : Symbol(module, Decl(b.js, 4, 24), Decl(b.js, 5, 43), Decl(b.js, 8, 41), Decl(b.js, 11, 31), Decl(b.js, 18, 51) ... and 14 more) +>module : Symbol(module, Decl(b.js, 4, 24)) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) @@ -201,7 +201,7 @@ var multipleDeclarationAlias6 = exports = module.exports = {}; >multipleDeclarationAlias6 : Symbol(multipleDeclarationAlias6, Decl(b.js, 24, 3)) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) >module.exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) ->module : Symbol(module, Decl(b.js, 4, 24), Decl(b.js, 5, 43), Decl(b.js, 8, 41), Decl(b.js, 11, 31), Decl(b.js, 18, 51) ... and 14 more) +>module : Symbol(module, Decl(b.js, 4, 24)) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) multipleDeclarationAlias6.func10 = function () { }; @@ -212,7 +212,7 @@ multipleDeclarationAlias6.func10 = function () { }; exports = module.exports = someOtherVariable = {}; >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) >module.exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) ->module : Symbol(module, Decl(b.js, 4, 24), Decl(b.js, 5, 43), Decl(b.js, 8, 41), Decl(b.js, 11, 31), Decl(b.js, 18, 51) ... and 14 more) +>module : Symbol(module, Decl(b.js, 4, 24)) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) >someOtherVariable : Symbol(someOtherVariable, Decl(b.js, 14, 3)) @@ -224,14 +224,14 @@ exports.func11 = function () { }; module.exports.func12 = function () { }; >module.exports.func12 : Symbol(func12, Decl(b.js, 28, 33), Decl(b.js, 32, 33)) >module.exports : Symbol(func12, Decl(b.js, 28, 33), Decl(b.js, 32, 33)) ->module : Symbol(module, Decl(b.js, 4, 24), Decl(b.js, 5, 43), Decl(b.js, 8, 41), Decl(b.js, 11, 31), Decl(b.js, 18, 51) ... and 14 more) +>module : Symbol(module, Decl(b.js, 4, 24)) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) >func12 : Symbol(func12, Decl(b.js, 28, 33), Decl(b.js, 32, 33)) exports = module.exports = someOtherVariable = {}; >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) >module.exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) ->module : Symbol(module, Decl(b.js, 4, 24), Decl(b.js, 5, 43), Decl(b.js, 8, 41), Decl(b.js, 11, 31), Decl(b.js, 18, 51) ... and 14 more) +>module : Symbol(module, Decl(b.js, 4, 24)) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) >someOtherVariable : Symbol(someOtherVariable, Decl(b.js, 14, 3)) @@ -243,14 +243,14 @@ exports.func11 = function () { }; module.exports.func12 = function () { }; >module.exports.func12 : Symbol(func12, Decl(b.js, 28, 33), Decl(b.js, 32, 33)) >module.exports : Symbol(func12, Decl(b.js, 28, 33), Decl(b.js, 32, 33)) ->module : Symbol(module, Decl(b.js, 4, 24), Decl(b.js, 5, 43), Decl(b.js, 8, 41), Decl(b.js, 11, 31), Decl(b.js, 18, 51) ... and 14 more) +>module : Symbol(module, Decl(b.js, 4, 24)) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) >func12 : Symbol(func12, Decl(b.js, 28, 33), Decl(b.js, 32, 33)) exports = module.exports = {}; >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) >module.exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) ->module : Symbol(module, Decl(b.js, 4, 24), Decl(b.js, 5, 43), Decl(b.js, 8, 41), Decl(b.js, 11, 31), Decl(b.js, 18, 51) ... and 14 more) +>module : Symbol(module, Decl(b.js, 4, 24)) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) exports.func13 = function () { }; @@ -261,14 +261,14 @@ exports.func13 = function () { }; module.exports.func14 = function () { }; >module.exports.func14 : Symbol(func14, Decl(b.js, 36, 33)) >module.exports : Symbol(func14, Decl(b.js, 36, 33)) ->module : Symbol(module, Decl(b.js, 4, 24), Decl(b.js, 5, 43), Decl(b.js, 8, 41), Decl(b.js, 11, 31), Decl(b.js, 18, 51) ... and 14 more) +>module : Symbol(module, Decl(b.js, 4, 24)) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) >func14 : Symbol(func14, Decl(b.js, 36, 33)) exports = module.exports = {}; >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) >module.exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) ->module : Symbol(module, Decl(b.js, 4, 24), Decl(b.js, 5, 43), Decl(b.js, 8, 41), Decl(b.js, 11, 31), Decl(b.js, 18, 51) ... and 14 more) +>module : Symbol(module, Decl(b.js, 4, 24)) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) exports.func15 = function () { }; @@ -279,13 +279,13 @@ exports.func15 = function () { }; module.exports.func16 = function () { }; >module.exports.func16 : Symbol(func16, Decl(b.js, 40, 33)) >module.exports : Symbol(func16, Decl(b.js, 40, 33)) ->module : Symbol(module, Decl(b.js, 4, 24), Decl(b.js, 5, 43), Decl(b.js, 8, 41), Decl(b.js, 11, 31), Decl(b.js, 18, 51) ... and 14 more) +>module : Symbol(module, Decl(b.js, 4, 24)) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) >func16 : Symbol(func16, Decl(b.js, 40, 33)) module.exports = exports = {}; >module.exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) ->module : Symbol(module, Decl(b.js, 4, 24), Decl(b.js, 5, 43), Decl(b.js, 8, 41), Decl(b.js, 11, 31), Decl(b.js, 18, 51) ... and 14 more) +>module : Symbol(module, Decl(b.js, 4, 24)) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) @@ -297,13 +297,13 @@ exports.func17 = function () { }; module.exports.func18 = function () { }; >module.exports.func18 : Symbol(func18, Decl(b.js, 44, 33)) >module.exports : Symbol(func18, Decl(b.js, 44, 33)) ->module : Symbol(module, Decl(b.js, 4, 24), Decl(b.js, 5, 43), Decl(b.js, 8, 41), Decl(b.js, 11, 31), Decl(b.js, 18, 51) ... and 14 more) +>module : Symbol(module, Decl(b.js, 4, 24)) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) >func18 : Symbol(func18, Decl(b.js, 44, 33)) module.exports = {}; >module.exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) ->module : Symbol(module, Decl(b.js, 4, 24), Decl(b.js, 5, 43), Decl(b.js, 8, 41), Decl(b.js, 11, 31), Decl(b.js, 18, 51) ... and 14 more) +>module : Symbol(module, Decl(b.js, 4, 24)) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) exports.func19 = function () { }; @@ -314,7 +314,7 @@ exports.func19 = function () { }; module.exports.func20 = function () { }; >module.exports.func20 : Symbol(func20, Decl(b.js, 48, 33)) >module.exports : Symbol(func20, Decl(b.js, 48, 33)) ->module : Symbol(module, Decl(b.js, 4, 24), Decl(b.js, 5, 43), Decl(b.js, 8, 41), Decl(b.js, 11, 31), Decl(b.js, 18, 51) ... and 14 more) +>module : Symbol(module, Decl(b.js, 4, 24)) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) >func20 : Symbol(func20, Decl(b.js, 48, 33)) diff --git a/tests/baselines/reference/moduleExportAlias4.symbols b/tests/baselines/reference/moduleExportAlias4.symbols index 1d0cf0ce2bc81..a3e2e2d593859 100644 --- a/tests/baselines/reference/moduleExportAlias4.symbols +++ b/tests/baselines/reference/moduleExportAlias4.symbols @@ -14,7 +14,7 @@ module.exports = class C {} module.exports.D = class D { } >module.exports.D : Symbol(D) >module.exports : Symbol(D, Decl(bug24024.js, 2, 27)) ->module : Symbol(module, Decl(bug24024.js, 1, 31), Decl(bug24024.js, 2, 27)) +>module : Symbol(module, Decl(bug24024.js, 1, 31)) >exports : Symbol("tests/cases/conformance/salsa/bug24024", Decl(bug24024.js, 0, 0)) >D : Symbol(D, Decl(bug24024.js, 2, 27)) >D : Symbol(D, Decl(bug24024.js, 3, 18)) diff --git a/tests/baselines/reference/moduleExportAssignment.symbols b/tests/baselines/reference/moduleExportAssignment.symbols index 259f1cb99f880..be741bdb9880a 100644 --- a/tests/baselines/reference/moduleExportAssignment.symbols +++ b/tests/baselines/reference/moduleExportAssignment.symbols @@ -38,7 +38,7 @@ npmlog.on('hi') // both references should see EE.on module.exports.on('hi') // here too >module.exports.on : Symbol(EE.on, Decl(npmlog.js, 0, 10)) >module.exports : Symbol("tests/cases/conformance/salsa/npmlog", Decl(npmlog.js, 0, 0)) ->module : Symbol(module, Decl(npmlog.js, 4, 12), Decl(npmlog.js, 6, 15), Decl(npmlog.js, 9, 12), Decl(npmlog.js, 11, 8)) +>module : Symbol(module, Decl(npmlog.js, 4, 12)) >exports : Symbol("tests/cases/conformance/salsa/npmlog", Decl(npmlog.js, 0, 0)) >on : Symbol(EE.on, Decl(npmlog.js, 0, 10)) @@ -50,7 +50,7 @@ npmlog.x = 1 module.exports.y = 2 >module.exports.y : Symbol(y, Decl(npmlog.js, 9, 12)) >module.exports : Symbol(y, Decl(npmlog.js, 9, 12)) ->module : Symbol(module, Decl(npmlog.js, 4, 12), Decl(npmlog.js, 6, 15), Decl(npmlog.js, 9, 12), Decl(npmlog.js, 11, 8)) +>module : Symbol(module, Decl(npmlog.js, 4, 12)) >exports : Symbol("tests/cases/conformance/salsa/npmlog", Decl(npmlog.js, 0, 0)) >y : Symbol(y, Decl(npmlog.js, 9, 12)) @@ -62,7 +62,7 @@ npmlog.y module.exports.x >module.exports.x : Symbol(x, Decl(npmlog.js, 7, 23)) >module.exports : Symbol("tests/cases/conformance/salsa/npmlog", Decl(npmlog.js, 0, 0)) ->module : Symbol(module, Decl(npmlog.js, 4, 12), Decl(npmlog.js, 6, 15), Decl(npmlog.js, 9, 12), Decl(npmlog.js, 11, 8)) +>module : Symbol(module, Decl(npmlog.js, 4, 12)) >exports : Symbol("tests/cases/conformance/salsa/npmlog", Decl(npmlog.js, 0, 0)) >x : Symbol(x, Decl(npmlog.js, 7, 23)) diff --git a/tests/baselines/reference/moduleExportAssignment2.symbols b/tests/baselines/reference/moduleExportAssignment2.symbols index 192ecd6a180e3..25e80647d892e 100644 --- a/tests/baselines/reference/moduleExportAssignment2.symbols +++ b/tests/baselines/reference/moduleExportAssignment2.symbols @@ -9,7 +9,7 @@ var npm = module.exports = function (tree) { module.exports.asReadInstalled = function (tree) { >module.exports.asReadInstalled : Symbol(asReadInstalled, Decl(npm.js, 1, 1)) >module.exports : Symbol(asReadInstalled, Decl(npm.js, 1, 1)) ->module : Symbol(module, Decl(npm.js, 0, 9), Decl(npm.js, 1, 1)) +>module : Symbol(module, Decl(npm.js, 0, 9)) >exports : Symbol("tests/cases/conformance/salsa/npm", Decl(npm.js, 0, 0)) >asReadInstalled : Symbol(asReadInstalled, Decl(npm.js, 1, 1)) >tree : Symbol(tree, Decl(npm.js, 2, 43)) diff --git a/tests/baselines/reference/moduleExportAssignment3.symbols b/tests/baselines/reference/moduleExportAssignment3.symbols index 48a8dc841f6a8..8fe824814baba 100644 --- a/tests/baselines/reference/moduleExportAssignment3.symbols +++ b/tests/baselines/reference/moduleExportAssignment3.symbols @@ -16,6 +16,6 @@ module.exports = function x() { } module.exports() // should be callable >module.exports : Symbol("tests/cases/conformance/salsa/mod", Decl(mod.js, 0, 0)) ->module : Symbol(module, Decl(mod.js, 0, 0), Decl(mod.js, 0, 33)) +>module : Symbol(module, Decl(mod.js, 0, 0)) >exports : Symbol("tests/cases/conformance/salsa/mod", Decl(mod.js, 0, 0)) diff --git a/tests/baselines/reference/moduleExportAssignment5.symbols b/tests/baselines/reference/moduleExportAssignment5.symbols index d05a51e52fc42..318b02b918514 100644 --- a/tests/baselines/reference/moduleExportAssignment5.symbols +++ b/tests/baselines/reference/moduleExportAssignment5.symbols @@ -26,7 +26,7 @@ module.exports = axios; module.exports.default = axios; >module.exports.default : Symbol(default, Decl(axios.js, 8, 23)) >module.exports : Symbol(default, Decl(axios.js, 8, 23)) ->module : Symbol(module, Decl(axios.js, 7, 9), Decl(axios.js, 8, 23)) +>module : Symbol(module, Decl(axios.js, 7, 9)) >exports : Symbol("tests/cases/conformance/salsa/axios", Decl(axios.js, 0, 0)) >default : Symbol(default, Decl(axios.js, 8, 23)) >axios : Symbol(axios, Decl(axios.js, 5, 3)) diff --git a/tests/baselines/reference/moduleExportAssignment6.symbols b/tests/baselines/reference/moduleExportAssignment6.symbols new file mode 100644 index 0000000000000..91f160218b121 --- /dev/null +++ b/tests/baselines/reference/moduleExportAssignment6.symbols @@ -0,0 +1,45 @@ +=== tests/cases/conformance/salsa/webpackLibNormalModule.js === +class C { +>C : Symbol(C, Decl(webpackLibNormalModule.js, 0, 0)) + + /** @param {number} x */ + constructor(x) { +>x : Symbol(x, Decl(webpackLibNormalModule.js, 2, 16)) + + this.x = x +>this.x : Symbol(C.x, Decl(webpackLibNormalModule.js, 2, 20)) +>this : Symbol(C, Decl(webpackLibNormalModule.js, 0, 0)) +>x : Symbol(C.x, Decl(webpackLibNormalModule.js, 2, 20)) +>x : Symbol(x, Decl(webpackLibNormalModule.js, 2, 16)) + + this.exports = [x] +>this.exports : Symbol(C.exports, Decl(webpackLibNormalModule.js, 3, 18)) +>this : Symbol(C, Decl(webpackLibNormalModule.js, 0, 0)) +>exports : Symbol(C.exports, Decl(webpackLibNormalModule.js, 3, 18)) +>x : Symbol(x, Decl(webpackLibNormalModule.js, 2, 16)) + } + /** @param {number} y */ + m(y) { +>m : Symbol(C.m, Decl(webpackLibNormalModule.js, 5, 5)) +>y : Symbol(y, Decl(webpackLibNormalModule.js, 7, 6)) + + return this.x + y +>this.x : Symbol(C.x, Decl(webpackLibNormalModule.js, 2, 20)) +>this : Symbol(C, Decl(webpackLibNormalModule.js, 0, 0)) +>x : Symbol(C.x, Decl(webpackLibNormalModule.js, 2, 20)) +>y : Symbol(y, Decl(webpackLibNormalModule.js, 7, 6)) + } +} +function exec() { +>exec : Symbol(exec, Decl(webpackLibNormalModule.js, 10, 1)) + + const module = new C(12); +>module : Symbol(module, Decl(webpackLibNormalModule.js, 12, 9)) +>C : Symbol(C, Decl(webpackLibNormalModule.js, 0, 0)) + + return module.exports; // should be fine because `module` is defined locally +>module.exports : Symbol(C.exports, Decl(webpackLibNormalModule.js, 3, 18)) +>module : Symbol(module, Decl(webpackLibNormalModule.js, 12, 9)) +>exports : Symbol(C.exports, Decl(webpackLibNormalModule.js, 3, 18)) +} + diff --git a/tests/baselines/reference/moduleExportAssignment6.types b/tests/baselines/reference/moduleExportAssignment6.types new file mode 100644 index 0000000000000..cb2d767b063c5 --- /dev/null +++ b/tests/baselines/reference/moduleExportAssignment6.types @@ -0,0 +1,51 @@ +=== tests/cases/conformance/salsa/webpackLibNormalModule.js === +class C { +>C : C + + /** @param {number} x */ + constructor(x) { +>x : number + + this.x = x +>this.x = x : number +>this.x : number +>this : this +>x : number +>x : number + + this.exports = [x] +>this.exports = [x] : number[] +>this.exports : number[] +>this : this +>exports : number[] +>[x] : number[] +>x : number + } + /** @param {number} y */ + m(y) { +>m : (y: number) => number +>y : number + + return this.x + y +>this.x + y : number +>this.x : number +>this : this +>x : number +>y : number + } +} +function exec() { +>exec : () => number[] + + const module = new C(12); +>module : C +>new C(12) : C +>C : typeof C +>12 : 12 + + return module.exports; // should be fine because `module` is defined locally +>module.exports : number[] +>module : C +>exports : number[] +} + diff --git a/tests/baselines/reference/moduleExportNestedNamespaces.symbols b/tests/baselines/reference/moduleExportNestedNamespaces.symbols index f1c4d4ad981e2..0472ea186b0e6 100644 --- a/tests/baselines/reference/moduleExportNestedNamespaces.symbols +++ b/tests/baselines/reference/moduleExportNestedNamespaces.symbols @@ -2,7 +2,7 @@ module.exports.n = {}; >module.exports.n : Symbol(n, Decl(mod.js, 0, 0), Decl(mod.js, 1, 15)) >module.exports : Symbol(n, Decl(mod.js, 0, 0), Decl(mod.js, 1, 15)) ->module : Symbol(module, Decl(mod.js, 0, 0), Decl(mod.js, 0, 22), Decl(mod.js, 3, 1)) +>module : Symbol(module, Decl(mod.js, 0, 0)) >exports : Symbol("tests/cases/conformance/salsa/mod", Decl(mod.js, 0, 0)) >n : Symbol(n, Decl(mod.js, 0, 0), Decl(mod.js, 1, 15)) @@ -10,7 +10,7 @@ module.exports.n.K = function C() { >module.exports.n.K : Symbol(n.K, Decl(mod.js, 0, 22)) >module.exports.n : Symbol(n.K, Decl(mod.js, 0, 22)) >module.exports : Symbol("tests/cases/conformance/salsa/mod", Decl(mod.js, 0, 0)) ->module : Symbol(module, Decl(mod.js, 0, 0), Decl(mod.js, 0, 22), Decl(mod.js, 3, 1)) +>module : Symbol(module, Decl(mod.js, 0, 0)) >exports : Symbol("tests/cases/conformance/salsa/mod", Decl(mod.js, 0, 0)) >n : Symbol(n, Decl(mod.js, 0, 0), Decl(mod.js, 1, 15)) >K : Symbol(n.K, Decl(mod.js, 0, 22)) @@ -23,7 +23,7 @@ module.exports.n.K = function C() { module.exports.Classic = class { >module.exports.Classic : Symbol(Classic, Decl(mod.js, 3, 1)) >module.exports : Symbol(Classic, Decl(mod.js, 3, 1)) ->module : Symbol(module, Decl(mod.js, 0, 0), Decl(mod.js, 0, 22), Decl(mod.js, 3, 1)) +>module : Symbol(module, Decl(mod.js, 0, 0)) >exports : Symbol("tests/cases/conformance/salsa/mod", Decl(mod.js, 0, 0)) >Classic : Symbol(Classic, Decl(mod.js, 3, 1)) diff --git a/tests/baselines/reference/moduleExportPropertyAssignmentDefault.symbols b/tests/baselines/reference/moduleExportPropertyAssignmentDefault.symbols index 32d5aa0784a1e..8e704e5fe0d89 100644 --- a/tests/baselines/reference/moduleExportPropertyAssignmentDefault.symbols +++ b/tests/baselines/reference/moduleExportPropertyAssignmentDefault.symbols @@ -11,7 +11,7 @@ module.exports = axios // both assignments should be ok module.exports.default = axios >module.exports.default : Symbol(default) >module.exports : Symbol(default, Decl(axios.js, 1, 22)) ->module : Symbol(module, Decl(axios.js, 0, 14), Decl(axios.js, 1, 22)) +>module : Symbol(module, Decl(axios.js, 0, 14)) >exports : Symbol("tests/cases/conformance/salsa/axios", Decl(axios.js, 0, 0)) >default : Symbol(default, Decl(axios.js, 1, 22)) >axios : Symbol(axios, Decl(axios.js, 0, 3)) diff --git a/tests/baselines/reference/moduleExportWithExportPropertyAssignment.symbols b/tests/baselines/reference/moduleExportWithExportPropertyAssignment.symbols index d11a1b0d1a646..19725dbd2a519 100644 --- a/tests/baselines/reference/moduleExportWithExportPropertyAssignment.symbols +++ b/tests/baselines/reference/moduleExportWithExportPropertyAssignment.symbols @@ -33,7 +33,7 @@ module.exports = function () { } module.exports.f = function (a) { } >module.exports.f : Symbol(f, Decl(mod1.js, 1, 32)) >module.exports : Symbol(f, Decl(mod1.js, 1, 32)) ->module : Symbol(module, Decl(mod1.js, 0, 0), Decl(mod1.js, 1, 32)) +>module : Symbol(module, Decl(mod1.js, 0, 0)) >exports : Symbol("tests/cases/conformance/salsa/mod1", Decl(mod1.js, 0, 0)) >f : Symbol(f, Decl(mod1.js, 1, 32)) >a : Symbol(a, Decl(mod1.js, 3, 29)) diff --git a/tests/baselines/reference/moduleExportWithExportPropertyAssignment2.symbols b/tests/baselines/reference/moduleExportWithExportPropertyAssignment2.symbols index 9ea285cef15a4..584bf77b334b7 100644 --- a/tests/baselines/reference/moduleExportWithExportPropertyAssignment2.symbols +++ b/tests/baselines/reference/moduleExportWithExportPropertyAssignment2.symbols @@ -31,7 +31,7 @@ module.exports = 1 module.exports.f = function () { } >module.exports : Symbol(f, Decl(mod1.js, 1, 18)) ->module : Symbol(module, Decl(mod1.js, 0, 0), Decl(mod1.js, 1, 18)) +>module : Symbol(module, Decl(mod1.js, 0, 0)) >exports : Symbol("tests/cases/conformance/salsa/mod1", Decl(mod1.js, 0, 0)) >f : Symbol(f, Decl(mod1.js, 1, 18)) diff --git a/tests/baselines/reference/moduleExportWithExportPropertyAssignment3.symbols b/tests/baselines/reference/moduleExportWithExportPropertyAssignment3.symbols index 750ee93cf0e3e..3ee790d76807b 100644 --- a/tests/baselines/reference/moduleExportWithExportPropertyAssignment3.symbols +++ b/tests/baselines/reference/moduleExportWithExportPropertyAssignment3.symbols @@ -43,7 +43,7 @@ declare function require(name: string): any; module.exports.bothBefore = 'string' >module.exports.bothBefore : Symbol(bothBefore) >module.exports : Symbol(bothBefore, Decl(mod1.js, 0, 0)) ->module : Symbol(module, Decl(mod1.js, 0, 0), Decl(mod1.js, 1, 36), Decl(mod1.js, 6, 1), Decl(mod1.js, 7, 35)) +>module : Symbol(module, Decl(mod1.js, 0, 0)) >exports : Symbol("tests/cases/conformance/salsa/mod1", Decl(mod1.js, 0, 0)) >bothBefore : Symbol(bothBefore, Decl(mod1.js, 0, 0)) @@ -64,14 +64,14 @@ module.exports = { module.exports.bothAfter = 'string' >module.exports.bothAfter : Symbol(bothAfter) >module.exports : Symbol(bothAfter, Decl(mod1.js, 6, 1)) ->module : Symbol(module, Decl(mod1.js, 0, 0), Decl(mod1.js, 1, 36), Decl(mod1.js, 6, 1), Decl(mod1.js, 7, 35)) +>module : Symbol(module, Decl(mod1.js, 0, 0)) >exports : Symbol("tests/cases/conformance/salsa/mod1", Decl(mod1.js, 0, 0)) >bothAfter : Symbol(bothAfter, Decl(mod1.js, 6, 1)) module.exports.justProperty = 'string' >module.exports.justProperty : Symbol(justProperty, Decl(mod1.js, 7, 35)) >module.exports : Symbol(justProperty, Decl(mod1.js, 7, 35)) ->module : Symbol(module, Decl(mod1.js, 0, 0), Decl(mod1.js, 1, 36), Decl(mod1.js, 6, 1), Decl(mod1.js, 7, 35)) +>module : Symbol(module, Decl(mod1.js, 0, 0)) >exports : Symbol("tests/cases/conformance/salsa/mod1", Decl(mod1.js, 0, 0)) >justProperty : Symbol(justProperty, Decl(mod1.js, 7, 35)) diff --git a/tests/baselines/reference/moduleExportWithExportPropertyAssignment4.symbols b/tests/baselines/reference/moduleExportWithExportPropertyAssignment4.symbols index 71be64164bc19..61ff2fffe8a33 100644 --- a/tests/baselines/reference/moduleExportWithExportPropertyAssignment4.symbols +++ b/tests/baselines/reference/moduleExportWithExportPropertyAssignment4.symbols @@ -43,7 +43,7 @@ declare function require(name: string): any; module.exports.bothBefore = 'string' >module.exports.bothBefore : Symbol(bothBefore) >module.exports : Symbol(A.bothBefore, Decl(mod1.js, 2, 16), Decl(mod1.js, 0, 0)) ->module : Symbol(module, Decl(mod1.js, 0, 0), Decl(mod1.js, 4, 15), Decl(mod1.js, 8, 1), Decl(mod1.js, 9, 35)) +>module : Symbol(module, Decl(mod1.js, 0, 0)) >exports : Symbol("tests/cases/conformance/salsa/mod1", Decl(mod1.js, 0, 0)) >bothBefore : Symbol(A.bothBefore, Decl(mod1.js, 2, 16), Decl(mod1.js, 0, 0)) @@ -77,14 +77,14 @@ function A() { module.exports.bothAfter = 'string' >module.exports.bothAfter : Symbol(bothAfter) >module.exports : Symbol(A.bothAfter, Decl(mod1.js, 3, 16), Decl(mod1.js, 8, 1)) ->module : Symbol(module, Decl(mod1.js, 0, 0), Decl(mod1.js, 4, 15), Decl(mod1.js, 8, 1), Decl(mod1.js, 9, 35)) +>module : Symbol(module, Decl(mod1.js, 0, 0)) >exports : Symbol("tests/cases/conformance/salsa/mod1", Decl(mod1.js, 0, 0)) >bothAfter : Symbol(A.bothAfter, Decl(mod1.js, 3, 16), Decl(mod1.js, 8, 1)) module.exports.justProperty = 'string' >module.exports.justProperty : Symbol(justProperty) >module.exports : Symbol(justProperty, Decl(mod1.js, 9, 35)) ->module : Symbol(module, Decl(mod1.js, 0, 0), Decl(mod1.js, 4, 15), Decl(mod1.js, 8, 1), Decl(mod1.js, 9, 35)) +>module : Symbol(module, Decl(mod1.js, 0, 0)) >exports : Symbol("tests/cases/conformance/salsa/mod1", Decl(mod1.js, 0, 0)) >justProperty : Symbol(justProperty, Decl(mod1.js, 9, 35)) diff --git a/tests/cases/conformance/salsa/moduleExportAssignment6.ts b/tests/cases/conformance/salsa/moduleExportAssignment6.ts new file mode 100644 index 0000000000000..18ca1f5f8d055 --- /dev/null +++ b/tests/cases/conformance/salsa/moduleExportAssignment6.ts @@ -0,0 +1,19 @@ +// @noEmit: true +// @allowJs: true +// @checkJs: true +// @Filename: webpackLibNormalModule.js +class C { + /** @param {number} x */ + constructor(x) { + this.x = x + this.exports = [x] + } + /** @param {number} y */ + m(y) { + return this.x + y + } +} +function exec() { + const module = new C(12); + return module.exports; // should be fine because `module` is defined locally +} From 1b436847f32be0f33e07504d07c083752e292bef Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Tue, 24 Jul 2018 14:06:18 -0700 Subject: [PATCH 2/3] Only type module.exports inside module files It is an error inside script files, but the binder sometimes creates a ModuleExports symbol because we doesn't know whether we have a commonjs module until after binding is done. --- src/compiler/checker.ts | 8 +++++--- .../reference/moduleExportAssignment6.symbols | 14 +++++++++++++ .../reference/moduleExportAssignment6.types | 20 +++++++++++++++++++ .../salsa/moduleExportAssignment6.ts | 8 ++++++++ 4 files changed, 47 insertions(+), 3 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index cdcf1448d2de0..53362ffa5316f 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -4985,9 +4985,11 @@ namespace ts { } if (symbol.flags & SymbolFlags.ModuleExports) { const fileSymbol = getSymbolOfNode(getSourceFileOfNode(symbol.valueDeclaration)); - const members = createSymbolTable(); - members.set("exports" as __String, fileSymbol); - return links.type = createAnonymousType(symbol, members, emptyArray, emptyArray, undefined, undefined); + if (fileSymbol) { + const members = createSymbolTable(); + members.set("exports" as __String, fileSymbol); + return links.type = createAnonymousType(symbol, members, emptyArray, emptyArray, undefined, undefined); + } } // Handle catch clause variables const declaration = symbol.valueDeclaration; diff --git a/tests/baselines/reference/moduleExportAssignment6.symbols b/tests/baselines/reference/moduleExportAssignment6.symbols index 91f160218b121..4b3514535611a 100644 --- a/tests/baselines/reference/moduleExportAssignment6.symbols +++ b/tests/baselines/reference/moduleExportAssignment6.symbols @@ -43,3 +43,17 @@ function exec() { >exports : Symbol(C.exports, Decl(webpackLibNormalModule.js, 3, 18)) } +function tricky() { +>tricky : Symbol(tricky, Decl(webpackLibNormalModule.js, 14, 1)) + + // (a trickier variant of what webpack does) + const module = new C(12); +>module : Symbol(module, Decl(webpackLibNormalModule.js, 18, 9)) +>C : Symbol(C, Decl(webpackLibNormalModule.js, 0, 0)) + + return () => { + return module.exports; +>module : Symbol(module, Decl(webpackLibNormalModule.js, 20, 14)) + } +} + diff --git a/tests/baselines/reference/moduleExportAssignment6.types b/tests/baselines/reference/moduleExportAssignment6.types index cb2d767b063c5..eb4b4a26a0120 100644 --- a/tests/baselines/reference/moduleExportAssignment6.types +++ b/tests/baselines/reference/moduleExportAssignment6.types @@ -49,3 +49,23 @@ function exec() { >exports : number[] } +function tricky() { +>tricky : () => () => any + + // (a trickier variant of what webpack does) + const module = new C(12); +>module : C +>new C(12) : C +>C : typeof C +>12 : 12 + + return () => { +>() => { return module.exports; } : () => any + + return module.exports; +>module.exports : any +>module : any +>exports : any + } +} + diff --git a/tests/cases/conformance/salsa/moduleExportAssignment6.ts b/tests/cases/conformance/salsa/moduleExportAssignment6.ts index 18ca1f5f8d055..d7235c2d89d40 100644 --- a/tests/cases/conformance/salsa/moduleExportAssignment6.ts +++ b/tests/cases/conformance/salsa/moduleExportAssignment6.ts @@ -17,3 +17,11 @@ function exec() { const module = new C(12); return module.exports; // should be fine because `module` is defined locally } + +function tricky() { + // (a trickier variant of what webpack does) + const module = new C(12); + return () => { + return module.exports; + } +} From 67438dc53fe1140c04f15f741e4624803995a416 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Tue, 24 Jul 2018 14:52:31 -0700 Subject: [PATCH 3/3] Only bind module.exports in a commonjs module Note that this, too, is a best-effort check since evidence of commonjs-ness may be found after a *reference* to module.exports. (A reference to module.exports alone is not enough evidence that a file is commonjs. It has to have an assignment to it.) --- src/compiler/binder.ts | 1 + src/compiler/checker.ts | 8 +++----- .../conflictingCommonJSES2015Exports.errors.txt | 12 ++++++++++++ .../conflictingCommonJSES2015Exports.symbols | 3 --- .../reference/conflictingCommonJSES2015Exports.types | 8 ++++---- .../reference/moduleExportAssignment6.symbols | 4 +++- .../reference/moduleExportAssignment6.types | 10 +++++----- 7 files changed, 28 insertions(+), 18 deletions(-) create mode 100644 tests/baselines/reference/conflictingCommonJSES2015Exports.errors.txt diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 322846b6cb030..927b31403e074 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -2073,6 +2073,7 @@ namespace ts { bindSpecialPropertyDeclaration(node as PropertyAccessExpression); } if (isInJavaScriptFile(node) && + file.commonJsModuleIndicator && isModuleExportsPropertyAccessExpression(node as PropertyAccessExpression) && !lookupSymbolForNameWorker(container, "module" as __String)) { declareSymbol(container.locals!, /*parent*/ undefined, (node as PropertyAccessExpression).expression as Identifier, diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index b1daba9c06eac..6d3ac8d2e789b 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -4999,11 +4999,9 @@ namespace ts { } if (symbol.flags & SymbolFlags.ModuleExports) { const fileSymbol = getSymbolOfNode(getSourceFileOfNode(symbol.valueDeclaration)); - if (fileSymbol) { - const members = createSymbolTable(); - members.set("exports" as __String, fileSymbol); - return links.type = createAnonymousType(symbol, members, emptyArray, emptyArray, undefined, undefined); - } + const members = createSymbolTable(); + members.set("exports" as __String, fileSymbol); + return links.type = createAnonymousType(symbol, members, emptyArray, emptyArray, undefined, undefined); } // Handle catch clause variables const declaration = symbol.valueDeclaration; diff --git a/tests/baselines/reference/conflictingCommonJSES2015Exports.errors.txt b/tests/baselines/reference/conflictingCommonJSES2015Exports.errors.txt new file mode 100644 index 0000000000000..88b1890d6d82a --- /dev/null +++ b/tests/baselines/reference/conflictingCommonJSES2015Exports.errors.txt @@ -0,0 +1,12 @@ +tests/cases/conformance/salsa/bug24934.js(2,1): error TS2304: Cannot find name 'module'. + + +==== tests/cases/conformance/salsa/bug24934.js (1 errors) ==== + export function abc(a, b, c) { return 5; } + module.exports = { abc }; + ~~~~~~ +!!! error TS2304: Cannot find name 'module'. +==== tests/cases/conformance/salsa/use.js (0 errors) ==== + import { abc } from './bug24934'; + abc(1, 2, 3); + \ No newline at end of file diff --git a/tests/baselines/reference/conflictingCommonJSES2015Exports.symbols b/tests/baselines/reference/conflictingCommonJSES2015Exports.symbols index 658650944eb85..1d064d6ef8c4a 100644 --- a/tests/baselines/reference/conflictingCommonJSES2015Exports.symbols +++ b/tests/baselines/reference/conflictingCommonJSES2015Exports.symbols @@ -6,9 +6,6 @@ export function abc(a, b, c) { return 5; } >c : Symbol(c, Decl(bug24934.js, 0, 25)) module.exports = { abc }; ->module.exports : Symbol("tests/cases/conformance/salsa/bug24934", Decl(bug24934.js, 0, 0)) ->module : Symbol(module, Decl(bug24934.js, 0, 42)) ->exports : Symbol("tests/cases/conformance/salsa/bug24934", Decl(bug24934.js, 0, 0)) >abc : Symbol(abc, Decl(bug24934.js, 1, 18)) === tests/cases/conformance/salsa/use.js === diff --git a/tests/baselines/reference/conflictingCommonJSES2015Exports.types b/tests/baselines/reference/conflictingCommonJSES2015Exports.types index 2d49406a96438..fe2c2af94ca6e 100644 --- a/tests/baselines/reference/conflictingCommonJSES2015Exports.types +++ b/tests/baselines/reference/conflictingCommonJSES2015Exports.types @@ -7,10 +7,10 @@ export function abc(a, b, c) { return 5; } >5 : 5 module.exports = { abc }; ->module.exports = { abc } : typeof import("tests/cases/conformance/salsa/bug24934") ->module.exports : typeof import("tests/cases/conformance/salsa/bug24934") ->module : { "tests/cases/conformance/salsa/bug24934": typeof import("tests/cases/conformance/salsa/bug24934"); } ->exports : typeof import("tests/cases/conformance/salsa/bug24934") +>module.exports = { abc } : any +>module.exports : any +>module : any +>exports : any >{ abc } : { abc: (a: any, b: any, c: any) => number; } >abc : (a: any, b: any, c: any) => number diff --git a/tests/baselines/reference/moduleExportAssignment6.symbols b/tests/baselines/reference/moduleExportAssignment6.symbols index 4b3514535611a..e36b88324cff4 100644 --- a/tests/baselines/reference/moduleExportAssignment6.symbols +++ b/tests/baselines/reference/moduleExportAssignment6.symbols @@ -53,7 +53,9 @@ function tricky() { return () => { return module.exports; ->module : Symbol(module, Decl(webpackLibNormalModule.js, 20, 14)) +>module.exports : Symbol(C.exports, Decl(webpackLibNormalModule.js, 3, 18)) +>module : Symbol(module, Decl(webpackLibNormalModule.js, 18, 9)) +>exports : Symbol(C.exports, Decl(webpackLibNormalModule.js, 3, 18)) } } diff --git a/tests/baselines/reference/moduleExportAssignment6.types b/tests/baselines/reference/moduleExportAssignment6.types index eb4b4a26a0120..e1fd4a4dd1253 100644 --- a/tests/baselines/reference/moduleExportAssignment6.types +++ b/tests/baselines/reference/moduleExportAssignment6.types @@ -50,7 +50,7 @@ function exec() { } function tricky() { ->tricky : () => () => any +>tricky : () => () => number[] // (a trickier variant of what webpack does) const module = new C(12); @@ -60,12 +60,12 @@ function tricky() { >12 : 12 return () => { ->() => { return module.exports; } : () => any +>() => { return module.exports; } : () => number[] return module.exports; ->module.exports : any ->module : any ->exports : any +>module.exports : number[] +>module : C +>exports : number[] } }