Skip to content

Commit 608a830

Browse files
authored
Dont emit module resolution errors when looking up specifiers for container symbols (#28558)
1 parent da33c58 commit 608a830

5 files changed

+51
-3
lines changed

src/compiler/checker.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2239,8 +2239,8 @@ namespace ts {
22392239
return initializer || decl;
22402240
}
22412241

2242-
function resolveExternalModuleName(location: Node, moduleReferenceExpression: Expression): Symbol | undefined {
2243-
return resolveExternalModuleNameWorker(location, moduleReferenceExpression, Diagnostics.Cannot_find_module_0);
2242+
function resolveExternalModuleName(location: Node, moduleReferenceExpression: Expression, ignoreErrors?: boolean): Symbol | undefined {
2243+
return resolveExternalModuleNameWorker(location, moduleReferenceExpression, ignoreErrors ? undefined : Diagnostics.Cannot_find_module_0);
22442244
}
22452245

22462246
function resolveExternalModuleNameWorker(location: Node, moduleReferenceExpression: Expression, moduleNotFoundError: DiagnosticMessage | undefined, isForAugmentation = false): Symbol | undefined {
@@ -2602,7 +2602,7 @@ namespace ts {
26022602
// Try to make an import using an import already in the enclosing file, if possible
26032603
for (const importRef of containingFile.imports) {
26042604
if (nodeIsSynthesized(importRef)) continue; // Synthetic names can't be resolved by `resolveExternalModuleName` - they'll cause a debug assert if they error
2605-
const resolvedModule = resolveExternalModuleName(enclosingDeclaration, importRef);
2605+
const resolvedModule = resolveExternalModuleName(enclosingDeclaration, importRef, /*ignoreErrors*/ true);
26062606
if (!resolvedModule) continue;
26072607
const ref = getAliasForSymbolInContainer(resolvedModule, symbol);
26082608
if (!ref) continue;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
//// [jsxImportForSideEffectsNonExtantNoError.tsx]
2+
/// <reference path="/.lib/react16.d.ts" />
3+
import * as React from "react";
4+
5+
import "./App.css"; // doesn't actually exist
6+
7+
const tag = <div></div>;
8+
9+
10+
//// [jsxImportForSideEffectsNonExtantNoError.js]
11+
"use strict";
12+
exports.__esModule = true;
13+
/// <reference path="react16.d.ts" />
14+
var React = require("react");
15+
require("./App.css"); // doesn't actually exist
16+
var tag = React.createElement("div", null);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
=== tests/cases/compiler/jsxImportForSideEffectsNonExtantNoError.tsx ===
2+
/// <reference path="react16.d.ts" />
3+
import * as React from "react";
4+
>React : Symbol(React, Decl(jsxImportForSideEffectsNonExtantNoError.tsx, 1, 6))
5+
6+
import "./App.css"; // doesn't actually exist
7+
8+
const tag = <div></div>;
9+
>tag : Symbol(tag, Decl(jsxImportForSideEffectsNonExtantNoError.tsx, 5, 5))
10+
>div : Symbol(JSX.IntrinsicElements.div, Decl(react16.d.ts, 2420, 114))
11+
>div : Symbol(JSX.IntrinsicElements.div, Decl(react16.d.ts, 2420, 114))
12+
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
=== tests/cases/compiler/jsxImportForSideEffectsNonExtantNoError.tsx ===
2+
/// <reference path="react16.d.ts" />
3+
import * as React from "react";
4+
>React : typeof React
5+
6+
import "./App.css"; // doesn't actually exist
7+
8+
const tag = <div></div>;
9+
>tag : JSX.Element
10+
><div></div> : JSX.Element
11+
>div : any
12+
>div : any
13+
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// @jsx: react
2+
/// <reference path="/.lib/react16.d.ts" />
3+
import * as React from "react";
4+
5+
import "./App.css"; // doesn't actually exist
6+
7+
const tag = <div></div>;

0 commit comments

Comments
 (0)