From 5a9b7828b46964594d35ef59d0a01d715bf00819 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Thu, 15 Nov 2018 14:04:54 -0800 Subject: [PATCH] Dont emit module resolution errors when looking up specifiers for container symbols --- src/compiler/checker.ts | 6 +++--- .../jsxImportForSideEffectsNonExtantNoError.js | 16 ++++++++++++++++ ...xImportForSideEffectsNonExtantNoError.symbols | 12 ++++++++++++ ...jsxImportForSideEffectsNonExtantNoError.types | 13 +++++++++++++ .../jsxImportForSideEffectsNonExtantNoError.tsx | 7 +++++++ 5 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 tests/baselines/reference/jsxImportForSideEffectsNonExtantNoError.js create mode 100644 tests/baselines/reference/jsxImportForSideEffectsNonExtantNoError.symbols create mode 100644 tests/baselines/reference/jsxImportForSideEffectsNonExtantNoError.types create mode 100644 tests/cases/compiler/jsxImportForSideEffectsNonExtantNoError.tsx diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index e88da2c261ce3..1b4b5d1662797 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -2238,8 +2238,8 @@ namespace ts { return initializer || decl; } - function resolveExternalModuleName(location: Node, moduleReferenceExpression: Expression): Symbol | undefined { - return resolveExternalModuleNameWorker(location, moduleReferenceExpression, Diagnostics.Cannot_find_module_0); + function resolveExternalModuleName(location: Node, moduleReferenceExpression: Expression, ignoreErrors?: boolean): Symbol | undefined { + return resolveExternalModuleNameWorker(location, moduleReferenceExpression, ignoreErrors ? undefined : Diagnostics.Cannot_find_module_0); } function resolveExternalModuleNameWorker(location: Node, moduleReferenceExpression: Expression, moduleNotFoundError: DiagnosticMessage | undefined, isForAugmentation = false): Symbol | undefined { @@ -2601,7 +2601,7 @@ namespace ts { // Try to make an import using an import already in the enclosing file, if possible for (const importRef of containingFile.imports) { if (nodeIsSynthesized(importRef)) continue; // Synthetic names can't be resolved by `resolveExternalModuleName` - they'll cause a debug assert if they error - const resolvedModule = resolveExternalModuleName(enclosingDeclaration, importRef); + const resolvedModule = resolveExternalModuleName(enclosingDeclaration, importRef, /*ignoreErrors*/ true); if (!resolvedModule) continue; const ref = getAliasForSymbolInContainer(resolvedModule, symbol); if (!ref) continue; diff --git a/tests/baselines/reference/jsxImportForSideEffectsNonExtantNoError.js b/tests/baselines/reference/jsxImportForSideEffectsNonExtantNoError.js new file mode 100644 index 0000000000000..8e1172f375283 --- /dev/null +++ b/tests/baselines/reference/jsxImportForSideEffectsNonExtantNoError.js @@ -0,0 +1,16 @@ +//// [jsxImportForSideEffectsNonExtantNoError.tsx] +/// +import * as React from "react"; + +import "./App.css"; // doesn't actually exist + +const tag =
; + + +//// [jsxImportForSideEffectsNonExtantNoError.js] +"use strict"; +exports.__esModule = true; +/// +var React = require("react"); +require("./App.css"); // doesn't actually exist +var tag = React.createElement("div", null); diff --git a/tests/baselines/reference/jsxImportForSideEffectsNonExtantNoError.symbols b/tests/baselines/reference/jsxImportForSideEffectsNonExtantNoError.symbols new file mode 100644 index 0000000000000..f64e0072861f5 --- /dev/null +++ b/tests/baselines/reference/jsxImportForSideEffectsNonExtantNoError.symbols @@ -0,0 +1,12 @@ +=== tests/cases/compiler/jsxImportForSideEffectsNonExtantNoError.tsx === +/// +import * as React from "react"; +>React : Symbol(React, Decl(jsxImportForSideEffectsNonExtantNoError.tsx, 1, 6)) + +import "./App.css"; // doesn't actually exist + +const tag =
; +>tag : Symbol(tag, Decl(jsxImportForSideEffectsNonExtantNoError.tsx, 5, 5)) +>div : Symbol(JSX.IntrinsicElements.div, Decl(react16.d.ts, 2420, 114)) +>div : Symbol(JSX.IntrinsicElements.div, Decl(react16.d.ts, 2420, 114)) + diff --git a/tests/baselines/reference/jsxImportForSideEffectsNonExtantNoError.types b/tests/baselines/reference/jsxImportForSideEffectsNonExtantNoError.types new file mode 100644 index 0000000000000..aa220fd89efe3 --- /dev/null +++ b/tests/baselines/reference/jsxImportForSideEffectsNonExtantNoError.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/jsxImportForSideEffectsNonExtantNoError.tsx === +/// +import * as React from "react"; +>React : typeof React + +import "./App.css"; // doesn't actually exist + +const tag =
; +>tag : JSX.Element +>
: JSX.Element +>div : any +>div : any + diff --git a/tests/cases/compiler/jsxImportForSideEffectsNonExtantNoError.tsx b/tests/cases/compiler/jsxImportForSideEffectsNonExtantNoError.tsx new file mode 100644 index 0000000000000..34f58a342af9d --- /dev/null +++ b/tests/cases/compiler/jsxImportForSideEffectsNonExtantNoError.tsx @@ -0,0 +1,7 @@ +// @jsx: react +/// +import * as React from "react"; + +import "./App.css"; // doesn't actually exist + +const tag =
;