From 5ea4d3b2bb74a4f1e10714700dc6b91079600b6d Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Mon, 30 Apr 2018 15:47:59 -0700 Subject: [PATCH] No error for require, module.exports or exports in Javascript (#23743) * No error for require Still errors for module and exports, and require's type is now incorreclty 'any'; I broke module resolution somehow. Needs investigation. * module/exports symbols+update isCommonJsRequire Everything passes the tests but the code can be improved * Update baselines * Cleanup * Update baselines of new tests * Get rid of exports symbol It wasn't doing anything anyway. --- src/compiler/checker.ts | 23 ++++-- .../reference/dynamicRequire.symbols | 1 + .../exportNestedNamespaces2.errors.txt | 10 +-- .../reference/exportNestedNamespaces2.symbols | 2 + ...ocReferenceGlobalTypeInCommonJs.errors.txt | 5 +- ...jsdocReferenceGlobalTypeInCommonJs.symbols | 1 + ...jsdocTypeFromChainedAssignment2.errors.txt | 15 ++-- .../jsdocTypeFromChainedAssignment2.symbols | 71 +++++++------------ .../jsdocTypeFromChainedAssignment2.types | 21 +----- .../reference/moduleExportAlias.symbols | 20 ++++++ .../moduleExportNestedNamespaces.errors.txt | 37 ---------- .../moduleExportNestedNamespaces.symbols | 3 + .../reference/typedefCrossModule2.errors.txt | 13 +--- .../reference/typedefCrossModule2.symbols | 1 + .../reference/typedefCrossModule3.errors.txt | 5 +- .../reference/typedefCrossModule4.errors.txt | 5 +- .../varRequireFromJavascript.errors.txt | 32 --------- .../varRequireFromJavascript.symbols | 1 + .../varRequireFromTypescript.errors.txt | 31 -------- .../varRequireFromTypescript.symbols | 1 + .../jsdoc/jsdocTypeFromChainedAssignment2.ts | 6 -- 21 files changed, 90 insertions(+), 214 deletions(-) delete mode 100644 tests/baselines/reference/moduleExportNestedNamespaces.errors.txt delete mode 100644 tests/baselines/reference/varRequireFromJavascript.errors.txt delete mode 100644 tests/baselines/reference/varRequireFromTypescript.errors.txt diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 3bee345538d..d825b0d9717 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -75,6 +75,8 @@ namespace ts { const undefinedSymbol = createSymbol(SymbolFlags.Property, "undefined" as __String); undefinedSymbol.declarations = []; const argumentsSymbol = createSymbol(SymbolFlags.Property, "arguments" as __String); + const requireSymbol = createSymbol(SymbolFlags.Property, "require" as __String); + const moduleSymbol = createSymbol(SymbolFlags.Property, "module" as __String); /** This will be set during calls to `getResolvedSignature` where services determines an apparent number of arguments greater than what is actually provided. */ let apparentArgumentCount: number | undefined; @@ -1470,7 +1472,17 @@ namespace ts { result = lookup(globals, name, meaning); } } - + if (!result) { + if (originalLocation && isInJavaScriptFile(originalLocation) && originalLocation.parent) { + if (isRequireCall(originalLocation.parent, /*checkArgumentIsStringLiteralLike*/ false)) { + return requireSymbol; + } + if (isIdentifier(originalLocation) && isPropertyAccessExpression(originalLocation.parent) && + originalLocation.escapedText === "module" && originalLocation.parent.name.escapedText === "exports") { + return moduleSymbol; + } + } + } if (!result) { if (nameNotFoundMessage) { if (!errorLocation || @@ -4683,6 +4695,10 @@ namespace ts { if (symbol.flags & SymbolFlags.Prototype) { return links.type = getTypeOfPrototypeProperty(symbol); } + // CommonsJS require/module/exports all have type any. + if (symbol === requireSymbol || symbol === moduleSymbol) { + return links.type = anyType; + } // Handle catch clause variables const declaration = symbol.valueDeclaration; if (isCatchClauseVariableDeclarationOrBindingElement(declaration)) { @@ -18856,11 +18872,10 @@ namespace ts { // Make sure require is not a local function if (!isIdentifier(node.expression)) return Debug.fail(); const resolvedRequire = resolveName(node.expression, node.expression.escapedText, SymbolFlags.Value, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ true); - if (!resolvedRequire) { - // project does not contain symbol named 'require' - assume commonjs require + if (resolvedRequire === requireSymbol) { return true; } - // project includes symbol named 'require' - make sure that it it ambient and local non-alias + // project includes symbol named 'require' - make sure that it is ambient and local non-alias if (resolvedRequire.flags & SymbolFlags.Alias) { return false; } diff --git a/tests/baselines/reference/dynamicRequire.symbols b/tests/baselines/reference/dynamicRequire.symbols index ba593556f25..8b31e95e772 100644 --- a/tests/baselines/reference/dynamicRequire.symbols +++ b/tests/baselines/reference/dynamicRequire.symbols @@ -5,5 +5,6 @@ function foo(name) { var s = require("t/" + name) >s : Symbol(s, Decl(a.js, 1, 7)) +>require : Symbol(require) >name : Symbol(name, Decl(a.js, 0, 13)) } diff --git a/tests/baselines/reference/exportNestedNamespaces2.errors.txt b/tests/baselines/reference/exportNestedNamespaces2.errors.txt index 38dc2fc2c60..d6c2a3a1e04 100644 --- a/tests/baselines/reference/exportNestedNamespaces2.errors.txt +++ b/tests/baselines/reference/exportNestedNamespaces2.errors.txt @@ -1,25 +1,19 @@ -tests/cases/conformance/salsa/first.js(1,11): error TS2304: Cannot find name 'require'. tests/cases/conformance/salsa/first.js(2,9): error TS2339: Property 'formatters' does not exist on type 'typeof import("tests/cases/conformance/salsa/first")'. -tests/cases/conformance/salsa/second.js(1,11): error TS2304: Cannot find name 'require'. tests/cases/conformance/salsa/second.js(2,9): error TS2339: Property 'formatters' does not exist on type 'typeof import("tests/cases/conformance/salsa/second")'. ==== tests/cases/conformance/salsa/mod.js (0 errors) ==== // Based on a pattern from adonis exports.formatters = {} -==== tests/cases/conformance/salsa/first.js (2 errors) ==== +==== tests/cases/conformance/salsa/first.js (1 errors) ==== exports = require('./mod') - ~~~~~~~ -!!! error TS2304: Cannot find name 'require'. exports.formatters.j = function (v) { ~~~~~~~~~~ !!! error TS2339: Property 'formatters' does not exist on type 'typeof import("tests/cases/conformance/salsa/first")'. return v } -==== tests/cases/conformance/salsa/second.js (2 errors) ==== +==== tests/cases/conformance/salsa/second.js (1 errors) ==== exports = require('./mod') - ~~~~~~~ -!!! error TS2304: Cannot find name 'require'. exports.formatters.o = function (v) { ~~~~~~~~~~ !!! error TS2339: Property 'formatters' does not exist on type 'typeof import("tests/cases/conformance/salsa/second")'. diff --git a/tests/baselines/reference/exportNestedNamespaces2.symbols b/tests/baselines/reference/exportNestedNamespaces2.symbols index bc14f9f8889..6f4e14c9535 100644 --- a/tests/baselines/reference/exportNestedNamespaces2.symbols +++ b/tests/baselines/reference/exportNestedNamespaces2.symbols @@ -8,6 +8,7 @@ exports.formatters = {} === tests/cases/conformance/salsa/first.js === exports = require('./mod') >exports : Symbol("tests/cases/conformance/salsa/first", Decl(first.js, 0, 0)) +>require : Symbol(require) >'./mod' : Symbol("tests/cases/conformance/salsa/mod", Decl(mod.js, 0, 0)) exports.formatters.j = function (v) { @@ -20,6 +21,7 @@ exports.formatters.j = function (v) { === tests/cases/conformance/salsa/second.js === exports = require('./mod') >exports : Symbol("tests/cases/conformance/salsa/second", Decl(second.js, 0, 0)) +>require : Symbol(require) >'./mod' : Symbol("tests/cases/conformance/salsa/mod", Decl(mod.js, 0, 0)) exports.formatters.o = function (v) { diff --git a/tests/baselines/reference/jsdocReferenceGlobalTypeInCommonJs.errors.txt b/tests/baselines/reference/jsdocReferenceGlobalTypeInCommonJs.errors.txt index 408ea126188..7a78efb724e 100644 --- a/tests/baselines/reference/jsdocReferenceGlobalTypeInCommonJs.errors.txt +++ b/tests/baselines/reference/jsdocReferenceGlobalTypeInCommonJs.errors.txt @@ -1,11 +1,8 @@ -tests/cases/compiler/a.js(1,15): error TS2304: Cannot find name 'require'. tests/cases/compiler/a.js(4,1): error TS2686: 'Puppeteer' refers to a UMD global, but the current file is a module. Consider adding an import instead. -==== tests/cases/compiler/a.js (2 errors) ==== +==== tests/cases/compiler/a.js (1 errors) ==== const other = require('./other'); - ~~~~~~~ -!!! error TS2304: Cannot find name 'require'. /** @type {Puppeteer.Keyboard} */ var ppk; Puppeteer.connect; diff --git a/tests/baselines/reference/jsdocReferenceGlobalTypeInCommonJs.symbols b/tests/baselines/reference/jsdocReferenceGlobalTypeInCommonJs.symbols index a3a3ed72136..5980105ddef 100644 --- a/tests/baselines/reference/jsdocReferenceGlobalTypeInCommonJs.symbols +++ b/tests/baselines/reference/jsdocReferenceGlobalTypeInCommonJs.symbols @@ -1,6 +1,7 @@ === tests/cases/compiler/a.js === const other = require('./other'); >other : Symbol(other, Decl(a.js, 0, 5)) +>require : Symbol(require) >'./other' : Symbol("tests/cases/compiler/other", Decl(other.d.ts, 0, 0)) /** @type {Puppeteer.Keyboard} */ diff --git a/tests/baselines/reference/jsdocTypeFromChainedAssignment2.errors.txt b/tests/baselines/reference/jsdocTypeFromChainedAssignment2.errors.txt index 454039d3693..bac759ea183 100644 --- a/tests/baselines/reference/jsdocTypeFromChainedAssignment2.errors.txt +++ b/tests/baselines/reference/jsdocTypeFromChainedAssignment2.errors.txt @@ -1,11 +1,10 @@ -tests/cases/conformance/jsdoc/use.js(3,7): error TS2345: Argument of type '"no"' is not assignable to parameter of type 'number'. -tests/cases/conformance/jsdoc/use.js(4,7): error TS2345: Argument of type '"also no"' is not assignable to parameter of type 'number'. -tests/cases/conformance/jsdoc/use.js(5,7): error TS2345: Argument of type '0' is not assignable to parameter of type 'string'. -tests/cases/conformance/jsdoc/use.js(6,7): error TS2345: Argument of type '1' is not assignable to parameter of type 'string'. +tests/cases/conformance/jsdoc/use.js(2,7): error TS2345: Argument of type '"no"' is not assignable to parameter of type 'number'. +tests/cases/conformance/jsdoc/use.js(3,7): error TS2345: Argument of type '"also no"' is not assignable to parameter of type 'number'. +tests/cases/conformance/jsdoc/use.js(4,7): error TS2345: Argument of type '0' is not assignable to parameter of type 'string'. +tests/cases/conformance/jsdoc/use.js(5,7): error TS2345: Argument of type '1' is not assignable to parameter of type 'string'. ==== tests/cases/conformance/jsdoc/use.js (4 errors) ==== - /// var mod = require('./mod'); mod.f('no') ~~~~ @@ -20,13 +19,7 @@ tests/cases/conformance/jsdoc/use.js(6,7): error TS2345: Argument of type '1' is ~ !!! error TS2345: Argument of type '1' is not assignable to parameter of type 'string'. -==== tests/cases/conformance/jsdoc/types.d.ts (0 errors) ==== - declare function require(name: string): any; - declare var exports: any; - declare var module: { exports: any }; ==== tests/cases/conformance/jsdoc/mod.js (0 errors) ==== - /// - /** @param {number} n */ exports.f = exports.g = function fg(n) { return n + 1 diff --git a/tests/baselines/reference/jsdocTypeFromChainedAssignment2.symbols b/tests/baselines/reference/jsdocTypeFromChainedAssignment2.symbols index d7a3b91588e..b85eafa6925 100644 --- a/tests/baselines/reference/jsdocTypeFromChainedAssignment2.symbols +++ b/tests/baselines/reference/jsdocTypeFromChainedAssignment2.symbols @@ -1,73 +1,56 @@ === tests/cases/conformance/jsdoc/use.js === -/// var mod = require('./mod'); ->mod : Symbol(mod, Decl(use.js, 1, 3)) ->require : Symbol(require, Decl(types.d.ts, 0, 0)) +>mod : Symbol(mod, Decl(use.js, 0, 3)) +>require : Symbol(require) >'./mod' : Symbol("tests/cases/conformance/jsdoc/mod", Decl(mod.js, 0, 0)) mod.f('no') >mod.f : Symbol(f, Decl(mod.js, 0, 0)) ->mod : Symbol(mod, Decl(use.js, 1, 3)) +>mod : Symbol(mod, Decl(use.js, 0, 3)) >f : Symbol(f, Decl(mod.js, 0, 0)) mod.g('also no') ->mod.g : Symbol(g, Decl(mod.js, 3, 11)) ->mod : Symbol(mod, Decl(use.js, 1, 3)) ->g : Symbol(g, Decl(mod.js, 3, 11)) +>mod.g : Symbol(g, Decl(mod.js, 1, 11)) +>mod : Symbol(mod, Decl(use.js, 0, 3)) +>g : Symbol(g, Decl(mod.js, 1, 11)) mod.h(0) ->mod.h : Symbol(h, Decl(mod.js, 5, 1)) ->mod : Symbol(mod, Decl(use.js, 1, 3)) ->h : Symbol(h, Decl(mod.js, 5, 1)) +>mod.h : Symbol(h, Decl(mod.js, 3, 1)) +>mod : Symbol(mod, Decl(use.js, 0, 3)) +>h : Symbol(h, Decl(mod.js, 3, 1)) mod.i(1) ->mod.i : Symbol(i, Decl(mod.js, 7, 18)) ->mod : Symbol(mod, Decl(use.js, 1, 3)) ->i : Symbol(i, Decl(mod.js, 7, 18)) - -=== tests/cases/conformance/jsdoc/types.d.ts === -declare function require(name: string): any; ->require : Symbol(require, Decl(types.d.ts, 0, 0)) ->name : Symbol(name, Decl(types.d.ts, 0, 25)) - -declare var exports: any; ->exports : Symbol(exports, Decl(types.d.ts, 1, 11)) - -declare var module: { exports: any }; ->module : Symbol(module, Decl(types.d.ts, 2, 11)) ->exports : Symbol(exports, Decl(types.d.ts, 2, 21)) +>mod.i : Symbol(i, Decl(mod.js, 5, 18)) +>mod : Symbol(mod, Decl(use.js, 0, 3)) +>i : Symbol(i, Decl(mod.js, 5, 18)) === tests/cases/conformance/jsdoc/mod.js === -/// - /** @param {number} n */ exports.f = exports.g = function fg(n) { >exports.f : Symbol(f, Decl(mod.js, 0, 0)) >exports : Symbol(f, Decl(mod.js, 0, 0)) >f : Symbol(f, Decl(mod.js, 0, 0)) ->exports.g : Symbol(g, Decl(mod.js, 3, 11)) ->exports : Symbol(g, Decl(mod.js, 3, 11)) ->g : Symbol(g, Decl(mod.js, 3, 11)) ->fg : Symbol(fg, Decl(mod.js, 3, 23)) ->n : Symbol(n, Decl(mod.js, 3, 36)) +>exports.g : Symbol(g, Decl(mod.js, 1, 11)) +>exports : Symbol(g, Decl(mod.js, 1, 11)) +>g : Symbol(g, Decl(mod.js, 1, 11)) +>fg : Symbol(fg, Decl(mod.js, 1, 23)) +>n : Symbol(n, Decl(mod.js, 1, 36)) return n + 1 ->n : Symbol(n, Decl(mod.js, 3, 36)) +>n : Symbol(n, Decl(mod.js, 1, 36)) } /** @param {string} mom */ module.exports.h = module.exports.i = function hi(mom) { ->module.exports : Symbol(h, Decl(mod.js, 5, 1)) ->module : Symbol(module, Decl(types.d.ts, 2, 11)) ->exports : Symbol(exports, Decl(types.d.ts, 2, 21)) ->h : Symbol(h, Decl(mod.js, 5, 1)) ->module.exports : Symbol(i, Decl(mod.js, 7, 18)) ->module : Symbol(module, Decl(types.d.ts, 2, 11)) ->exports : Symbol(exports, Decl(types.d.ts, 2, 21)) ->i : Symbol(i, Decl(mod.js, 7, 18)) ->hi : Symbol(hi, Decl(mod.js, 7, 37)) ->mom : Symbol(mom, Decl(mod.js, 7, 50)) +>module.exports : Symbol(h, Decl(mod.js, 3, 1)) +>module : Symbol(module) +>h : Symbol(h, Decl(mod.js, 3, 1)) +>module.exports : Symbol(i, Decl(mod.js, 5, 18)) +>module : Symbol(module) +>i : Symbol(i, Decl(mod.js, 5, 18)) +>hi : Symbol(hi, Decl(mod.js, 5, 37)) +>mom : Symbol(mom, Decl(mod.js, 5, 50)) return `hi, ${mom}!`; ->mom : Symbol(mom, Decl(mod.js, 7, 50)) +>mom : Symbol(mom, Decl(mod.js, 5, 50)) } diff --git a/tests/baselines/reference/jsdocTypeFromChainedAssignment2.types b/tests/baselines/reference/jsdocTypeFromChainedAssignment2.types index ac264107bfa..de2a38cce79 100644 --- a/tests/baselines/reference/jsdocTypeFromChainedAssignment2.types +++ b/tests/baselines/reference/jsdocTypeFromChainedAssignment2.types @@ -1,9 +1,8 @@ === tests/cases/conformance/jsdoc/use.js === -/// var mod = require('./mod'); >mod : typeof import("tests/cases/conformance/jsdoc/mod") >require('./mod') : typeof import("tests/cases/conformance/jsdoc/mod") ->require : (name: string) => any +>require : any >'./mod' : "./mod" mod.f('no') @@ -34,21 +33,7 @@ mod.i(1) >i : (mom: string) => string >1 : 1 -=== tests/cases/conformance/jsdoc/types.d.ts === -declare function require(name: string): any; ->require : (name: string) => any ->name : string - -declare var exports: any; ->exports : any - -declare var module: { exports: any }; ->module : { exports: any; } ->exports : any - === tests/cases/conformance/jsdoc/mod.js === -/// - /** @param {number} n */ exports.f = exports.g = function fg(n) { >exports.f = exports.g = function fg(n) { return n + 1} : (n: number) => number @@ -73,13 +58,13 @@ module.exports.h = module.exports.i = function hi(mom) { >module.exports.h = module.exports.i = function hi(mom) { return `hi, ${mom}!`;} : (mom: string) => string >module.exports.h : any >module.exports : any ->module : { exports: any; } +>module : any >exports : any >h : any >module.exports.i = function hi(mom) { return `hi, ${mom}!`;} : (mom: string) => string >module.exports.i : any >module.exports : any ->module : { exports: any; } +>module : any >exports : any >i : any >function hi(mom) { return `hi, ${mom}!`;} : (mom: string) => string diff --git a/tests/baselines/reference/moduleExportAlias.symbols b/tests/baselines/reference/moduleExportAlias.symbols index 9e2e0e554d2..7d17348aa88 100644 --- a/tests/baselines/reference/moduleExportAlias.symbols +++ b/tests/baselines/reference/moduleExportAlias.symbols @@ -120,23 +120,27 @@ exports.func2 = function () { }; var moduleExportsAlias = module.exports; >moduleExportsAlias : Symbol(moduleExportsAlias, Decl(b.js, 4, 3)) +>module : Symbol(module) moduleExportsAlias.func3 = function () { }; >moduleExportsAlias : Symbol(moduleExportsAlias, Decl(b.js, 4, 3)) module.exports.func4 = function () { }; >module.exports : Symbol(func4, Decl(b.js, 5, 43)) +>module : Symbol(module) >func4 : Symbol(func4, Decl(b.js, 5, 43)) 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 : Symbol(module) multipleDeclarationAlias1.func5 = function () { }; >multipleDeclarationAlias1 : Symbol(multipleDeclarationAlias1, Decl(b.js, 8, 3)) var multipleDeclarationAlias2 = module.exports = exports; >multipleDeclarationAlias2 : Symbol(multipleDeclarationAlias2, Decl(b.js, 11, 3)) +>module : Symbol(module) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) multipleDeclarationAlias2.func6 = function () { }; @@ -160,12 +164,14 @@ multipleDeclarationAlias3.func7 = function () { }; var multipleDeclarationAlias4 = someOtherVariable = module.exports; >multipleDeclarationAlias4 : Symbol(multipleDeclarationAlias4, Decl(b.js, 18, 3)) >someOtherVariable : Symbol(someOtherVariable, Decl(b.js, 14, 3)) +>module : Symbol(module) multipleDeclarationAlias4.func8 = function () { }; >multipleDeclarationAlias4 : Symbol(multipleDeclarationAlias4, Decl(b.js, 18, 3)) var multipleDeclarationAlias5 = module.exports = exports = {}; >multipleDeclarationAlias5 : Symbol(multipleDeclarationAlias5, Decl(b.js, 21, 3)) +>module : Symbol(module) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) multipleDeclarationAlias5.func9 = function () { }; @@ -174,12 +180,14 @@ multipleDeclarationAlias5.func9 = function () { }; 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 : Symbol(module) multipleDeclarationAlias6.func10 = function () { }; >multipleDeclarationAlias6 : Symbol(multipleDeclarationAlias6, Decl(b.js, 24, 3)) exports = module.exports = someOtherVariable = {}; >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) +>module : Symbol(module) >someOtherVariable : Symbol(someOtherVariable, Decl(b.js, 14, 3)) exports.func11 = function () { }; @@ -189,10 +197,12 @@ exports.func11 = function () { }; module.exports.func12 = function () { }; >module.exports : Symbol(func12, Decl(b.js, 28, 33), Decl(b.js, 32, 33)) +>module : Symbol(module) >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 : Symbol(module) >someOtherVariable : Symbol(someOtherVariable, Decl(b.js, 14, 3)) exports.func11 = function () { }; @@ -202,10 +212,12 @@ exports.func11 = function () { }; module.exports.func12 = function () { }; >module.exports : Symbol(func12, Decl(b.js, 28, 33), Decl(b.js, 32, 33)) +>module : Symbol(module) >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 : Symbol(module) exports.func13 = function () { }; >exports.func13 : Symbol(func13, Decl(b.js, 35, 30)) @@ -214,10 +226,12 @@ exports.func13 = function () { }; module.exports.func14 = function () { }; >module.exports : Symbol(func14, Decl(b.js, 36, 33)) +>module : Symbol(module) >func14 : Symbol(func14, Decl(b.js, 36, 33)) exports = module.exports = {}; >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) +>module : Symbol(module) exports.func15 = function () { }; >exports.func15 : Symbol(func15, Decl(b.js, 39, 30)) @@ -226,9 +240,11 @@ exports.func15 = function () { }; module.exports.func16 = function () { }; >module.exports : Symbol(func16, Decl(b.js, 40, 33)) +>module : Symbol(module) >func16 : Symbol(func16, Decl(b.js, 40, 33)) module.exports = exports = {}; +>module : Symbol(module) >exports : Symbol("tests/cases/conformance/salsa/b", Decl(b.js, 0, 0)) exports.func17 = function () { }; @@ -238,9 +254,12 @@ exports.func17 = function () { }; module.exports.func18 = function () { }; >module.exports : Symbol(func18, Decl(b.js, 44, 33)) +>module : Symbol(module) >func18 : Symbol(func18, Decl(b.js, 44, 33)) module.exports = {}; +>module : Symbol(module) + exports.func19 = function () { }; >exports.func19 : Symbol(func19, Decl(b.js, 47, 20)) >exports : Symbol(func19, Decl(b.js, 47, 20)) @@ -248,6 +267,7 @@ exports.func19 = function () { }; module.exports.func20 = function () { }; >module.exports : Symbol(func20, Decl(b.js, 48, 33)) +>module : Symbol(module) >func20 : Symbol(func20, Decl(b.js, 48, 33)) diff --git a/tests/baselines/reference/moduleExportNestedNamespaces.errors.txt b/tests/baselines/reference/moduleExportNestedNamespaces.errors.txt deleted file mode 100644 index bdf81a55228..00000000000 --- a/tests/baselines/reference/moduleExportNestedNamespaces.errors.txt +++ /dev/null @@ -1,37 +0,0 @@ -tests/cases/conformance/salsa/mod.js(1,1): error TS2304: Cannot find name 'module'. -tests/cases/conformance/salsa/mod.js(2,1): error TS2304: Cannot find name 'module'. -tests/cases/conformance/salsa/mod.js(5,1): error TS2304: Cannot find name 'module'. - - -==== tests/cases/conformance/salsa/mod.js (3 errors) ==== - module.exports.n = {}; - ~~~~~~ -!!! error TS2304: Cannot find name 'module'. - module.exports.n.K = function C() { - ~~~~~~ -!!! error TS2304: Cannot find name 'module'. - this.x = 10; - } - module.exports.Classic = class { - ~~~~~~ -!!! error TS2304: Cannot find name 'module'. - constructor() { - this.p = 1 - } - } - -==== tests/cases/conformance/salsa/use.js (0 errors) ==== - import * as s from './mod' - - var k = new s.n.K() - k.x - var classic = new s.Classic() - - - /** @param {s.n.K} c - @param {s.Classic} classic */ - function f(c, classic) { - c.x - classic.p - } - \ No newline at end of file diff --git a/tests/baselines/reference/moduleExportNestedNamespaces.symbols b/tests/baselines/reference/moduleExportNestedNamespaces.symbols index 2fb74e80364..2128a6efb60 100644 --- a/tests/baselines/reference/moduleExportNestedNamespaces.symbols +++ b/tests/baselines/reference/moduleExportNestedNamespaces.symbols @@ -1,10 +1,12 @@ === tests/cases/conformance/salsa/mod.js === module.exports.n = {}; >module.exports : Symbol(n, Decl(mod.js, 0, 0)) +>module : Symbol(module) >n : Symbol(n, Decl(mod.js, 0, 0)) module.exports.n.K = function C() { >module.exports.n : Symbol(K, Decl(mod.js, 0, 22)) +>module : Symbol(module) >K : Symbol(K, Decl(mod.js, 0, 22)) >C : Symbol(C, Decl(mod.js, 1, 20)) @@ -13,6 +15,7 @@ module.exports.n.K = function C() { } module.exports.Classic = class { >module.exports : Symbol(Classic, Decl(mod.js, 3, 1)) +>module : Symbol(module) >Classic : Symbol(Classic, Decl(mod.js, 3, 1)) constructor() { diff --git a/tests/baselines/reference/typedefCrossModule2.errors.txt b/tests/baselines/reference/typedefCrossModule2.errors.txt index 04d28448e57..c2977b96555 100644 --- a/tests/baselines/reference/typedefCrossModule2.errors.txt +++ b/tests/baselines/reference/typedefCrossModule2.errors.txt @@ -3,23 +3,18 @@ tests/cases/conformance/jsdoc/mod1.js(4,7): error TS2300: Duplicate identifier ' tests/cases/conformance/jsdoc/mod1.js(6,23): error TS2300: Duplicate identifier 'Bar'. tests/cases/conformance/jsdoc/mod1.js(7,9): error TS2300: Duplicate identifier 'Bar'. tests/cases/conformance/jsdoc/mod1.js(9,5): error TS2300: Duplicate identifier 'Baz'. -tests/cases/conformance/jsdoc/mod1.js(10,1): error TS2304: Cannot find name 'module'. tests/cases/conformance/jsdoc/mod1.js(11,5): error TS2300: Duplicate identifier 'Baz'. -tests/cases/conformance/jsdoc/mod1.js(23,1): error TS2304: Cannot find name 'module'. -tests/cases/conformance/jsdoc/use.js(1,11): error TS2304: Cannot find name 'require'. -==== tests/cases/conformance/jsdoc/use.js (1 errors) ==== +==== tests/cases/conformance/jsdoc/use.js (0 errors) ==== var mod = require('./mod1.js'); - ~~~~~~~ -!!! error TS2304: Cannot find name 'require'. /** @type {import("./mod1.js").Baz} */ var b; /** @type {mod.Baz} */ var bb; var bbb = new mod.Baz(); -==== tests/cases/conformance/jsdoc/mod1.js (8 errors) ==== +==== tests/cases/conformance/jsdoc/mod1.js (6 errors) ==== // error /** @typedef {number} Foo */ @@ -40,8 +35,6 @@ tests/cases/conformance/jsdoc/use.js(1,11): error TS2304: Cannot find name 'requ ~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'Baz'. module.exports = { - ~~~~~~ -!!! error TS2304: Cannot find name 'module'. Baz: class { } ~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'Baz'. @@ -57,8 +50,6 @@ tests/cases/conformance/jsdoc/use.js(1,11): error TS2304: Cannot find name 'requ /** @typedef {number} Quack */ module.exports = { - ~~~~~~ -!!! error TS2304: Cannot find name 'module'. Quack: 2 } \ No newline at end of file diff --git a/tests/baselines/reference/typedefCrossModule2.symbols b/tests/baselines/reference/typedefCrossModule2.symbols index 01afe2b9bdb..79fbb1ab509 100644 --- a/tests/baselines/reference/typedefCrossModule2.symbols +++ b/tests/baselines/reference/typedefCrossModule2.symbols @@ -1,6 +1,7 @@ === tests/cases/conformance/jsdoc/use.js === var mod = require('./mod1.js'); >mod : Symbol(mod, Decl(use.js, 0, 3)) +>require : Symbol(require) >'./mod1.js' : Symbol("tests/cases/conformance/jsdoc/mod1", Decl(mod1.js, 0, 0)) /** @type {import("./mod1.js").Baz} */ diff --git a/tests/baselines/reference/typedefCrossModule3.errors.txt b/tests/baselines/reference/typedefCrossModule3.errors.txt index 5309528fb4e..643d51a1823 100644 --- a/tests/baselines/reference/typedefCrossModule3.errors.txt +++ b/tests/baselines/reference/typedefCrossModule3.errors.txt @@ -1,9 +1,8 @@ tests/cases/conformance/jsdoc/mod2.js(1,5): error TS2300: Duplicate identifier 'Foo'. tests/cases/conformance/jsdoc/mod2.js(3,1): error TS2300: Duplicate identifier 'Foo'. -tests/cases/conformance/jsdoc/mod2.js(4,1): error TS2304: Cannot find name 'module'. -==== tests/cases/conformance/jsdoc/mod2.js (3 errors) ==== +==== tests/cases/conformance/jsdoc/mod2.js (2 errors) ==== /** @typedef {number} Foo */ ~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'Foo'. @@ -12,7 +11,5 @@ tests/cases/conformance/jsdoc/mod2.js(4,1): error TS2304: Cannot find name 'modu ~~~~~~ !!! error TS2300: Duplicate identifier 'Foo'. module.exports = ns; - ~~~~~~ -!!! error TS2304: Cannot find name 'module'. \ No newline at end of file diff --git a/tests/baselines/reference/typedefCrossModule4.errors.txt b/tests/baselines/reference/typedefCrossModule4.errors.txt index 5dcd9ac017b..37696843b34 100644 --- a/tests/baselines/reference/typedefCrossModule4.errors.txt +++ b/tests/baselines/reference/typedefCrossModule4.errors.txt @@ -1,16 +1,13 @@ tests/cases/conformance/jsdoc/mod3.js(1,5): error TS2300: Duplicate identifier 'Foo'. -tests/cases/conformance/jsdoc/mod3.js(3,1): error TS2304: Cannot find name 'module'. tests/cases/conformance/jsdoc/mod3.js(3,20): error TS2300: Duplicate identifier 'Foo'. -==== tests/cases/conformance/jsdoc/mod3.js (3 errors) ==== +==== tests/cases/conformance/jsdoc/mod3.js (2 errors) ==== /** @typedef {number} Foo */ ~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'Foo'. class Bar { } module.exports = { Foo: Bar }; - ~~~~~~ -!!! error TS2304: Cannot find name 'module'. ~~~~~~~~ !!! error TS2300: Duplicate identifier 'Foo'. diff --git a/tests/baselines/reference/varRequireFromJavascript.errors.txt b/tests/baselines/reference/varRequireFromJavascript.errors.txt deleted file mode 100644 index 29b1afe3420..00000000000 --- a/tests/baselines/reference/varRequireFromJavascript.errors.txt +++ /dev/null @@ -1,32 +0,0 @@ -tests/cases/conformance/salsa/use.js(1,10): error TS2304: Cannot find name 'require'. - - -==== tests/cases/conformance/salsa/use.js (1 errors) ==== - var ex = require('./ex') - ~~~~~~~ -!!! error TS2304: Cannot find name 'require'. - - // values work - var crunch = new ex.Crunch(1); - crunch.n - - - // types work - /** - * @param {ex.Crunch} wrap - */ - function f(wrap) { - wrap.n - } - -==== tests/cases/conformance/salsa/ex.js (0 errors) ==== - export class Crunch { - /** @param {number} n */ - constructor(n) { - this.n = n - } - m() { - return this.n - } - } - \ No newline at end of file diff --git a/tests/baselines/reference/varRequireFromJavascript.symbols b/tests/baselines/reference/varRequireFromJavascript.symbols index e892ed6bcb9..03a2a2516de 100644 --- a/tests/baselines/reference/varRequireFromJavascript.symbols +++ b/tests/baselines/reference/varRequireFromJavascript.symbols @@ -1,6 +1,7 @@ === tests/cases/conformance/salsa/use.js === var ex = require('./ex') >ex : Symbol(ex, Decl(use.js, 0, 3)) +>require : Symbol(require) >'./ex' : Symbol("tests/cases/conformance/salsa/ex", Decl(ex.js, 0, 0)) // values work diff --git a/tests/baselines/reference/varRequireFromTypescript.errors.txt b/tests/baselines/reference/varRequireFromTypescript.errors.txt deleted file mode 100644 index 39172d6f33d..00000000000 --- a/tests/baselines/reference/varRequireFromTypescript.errors.txt +++ /dev/null @@ -1,31 +0,0 @@ -tests/cases/conformance/salsa/use.js(1,10): error TS2304: Cannot find name 'require'. - - -==== tests/cases/conformance/salsa/use.js (1 errors) ==== - var ex = require('./ex') - ~~~~~~~ -!!! error TS2304: Cannot find name 'require'. - - // values work - var crunch = new ex.Crunch(1); - crunch.n - - - // types work - /** - * @param {ex.Greatest} greatest - * @param {ex.Crunch} wrap - */ - function f(greatest, wrap) { - greatest.day - wrap.n - } - -==== tests/cases/conformance/salsa/ex.d.ts (0 errors) ==== - export type Greatest = { day: 1 } - export class Crunch { - n: number - m(): number - constructor(n: number) - } - \ No newline at end of file diff --git a/tests/baselines/reference/varRequireFromTypescript.symbols b/tests/baselines/reference/varRequireFromTypescript.symbols index f8e1223c46e..70c918aba05 100644 --- a/tests/baselines/reference/varRequireFromTypescript.symbols +++ b/tests/baselines/reference/varRequireFromTypescript.symbols @@ -1,6 +1,7 @@ === tests/cases/conformance/salsa/use.js === var ex = require('./ex') >ex : Symbol(ex, Decl(use.js, 0, 3)) +>require : Symbol(require) >'./ex' : Symbol("tests/cases/conformance/salsa/ex", Decl(ex.d.ts, 0, 0)) // values work diff --git a/tests/cases/conformance/jsdoc/jsdocTypeFromChainedAssignment2.ts b/tests/cases/conformance/jsdoc/jsdocTypeFromChainedAssignment2.ts index d44f014464f..ba0647e9647 100644 --- a/tests/cases/conformance/jsdoc/jsdocTypeFromChainedAssignment2.ts +++ b/tests/cases/conformance/jsdoc/jsdocTypeFromChainedAssignment2.ts @@ -2,12 +2,7 @@ // @allowJs: true // @checkJs: true // @noImplicitAny: true -// @Filename: types.d.ts -declare function require(name: string): any; -declare var exports: any; -declare var module: { exports: any }; // @Filename: mod.js -/// /** @param {number} n */ exports.f = exports.g = function fg(n) { @@ -19,7 +14,6 @@ module.exports.h = module.exports.i = function hi(mom) { } // @Filename: use.js -/// var mod = require('./mod'); mod.f('no') mod.g('also no')