Skip to content

Commit 19993a5

Browse files
author
Andy
authored
When import("foo") has module resolution error, error span should be "foo" (#25569)
* When `import("foo")` has module resolution error, error span should be "foo" * Update more tests
1 parent 8a3090b commit 19993a5

9 files changed

+38
-32
lines changed

src/compiler/checker.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9381,11 +9381,9 @@ namespace ts {
93819381
links.resolvedSymbol = unknownSymbol;
93829382
return links.resolvedType = errorType;
93839383
}
9384-
const argumentType = getTypeFromTypeNode(node.argument);
93859384
const targetMeaning = node.isTypeOf ? SymbolFlags.Value : SymbolFlags.Type;
93869385
// TODO: Future work: support unions/generics/whatever via a deferred import-type
9387-
const moduleName = (argumentType as StringLiteralType).value;
9388-
const innerModuleSymbol = resolveExternalModule(node, moduleName, Diagnostics.Cannot_find_module_0, node, /*isForAugmentation*/ false);
9386+
const innerModuleSymbol = resolveExternalModuleName(node, node.argument.literal);
93899387
if (!innerModuleSymbol) {
93909388
links.resolvedSymbol = unknownSymbol;
93919389
return links.resolvedType = errorType;
@@ -9417,7 +9415,7 @@ namespace ts {
94179415
? Diagnostics.Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here
94189416
: Diagnostics.Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0;
94199417

9420-
error(node, errorMessage, moduleName);
9418+
error(node, errorMessage, node.argument.literal.text);
94219419

94229420
links.resolvedSymbol = unknownSymbol;
94239421
links.resolvedType = errorType;

src/compiler/utilities.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -912,9 +912,7 @@ namespace ts {
912912
}
913913

914914
export function isLiteralImportTypeNode(n: Node): n is LiteralImportTypeNode {
915-
return n.kind === SyntaxKind.ImportType &&
916-
(n as ImportTypeNode).argument.kind === SyntaxKind.LiteralType &&
917-
isStringLiteral(((n as ImportTypeNode).argument as LiteralTypeNode).literal);
915+
return isImportTypeNode(n) && isLiteralTypeNode(n.argument) && isStringLiteral(n.argument.literal);
918916
}
919917

920918
export function isPrologueDirective(node: Node): node is PrologueDirective {

tests/baselines/reference/importTypeAmbientMissing.errors.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
tests/cases/conformance/types/import/importTypeAmbientMissing.ts(8,10): error TS2307: Cannot find module 'fo'.
1+
tests/cases/conformance/types/import/importTypeAmbientMissing.ts(8,17): error TS2307: Cannot find module 'fo'.
22

33

44
==== tests/cases/conformance/types/import/importTypeAmbientMissing.ts (1 errors) ====
@@ -10,7 +10,7 @@ tests/cases/conformance/types/import/importTypeAmbientMissing.ts(8,10): error TS
1010
export = Point;
1111
}
1212
const x: import("fo") = { x: 0, y: 0 }; // typo, error
13-
~~~~~~~~~~~~
13+
~~~~
1414
!!! error TS2307: Cannot find module 'fo'.
1515

1616

tests/baselines/reference/importTypeLocalMissing.errors.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
tests/cases/conformance/types/import/usage.ts(1,17): error TS2307: Cannot find module './fo'.
2-
tests/cases/conformance/types/import/usage.ts(2,15): error TS2307: Cannot find module './fo2'.
1+
tests/cases/conformance/types/import/usage.ts(1,24): error TS2307: Cannot find module './fo'.
2+
tests/cases/conformance/types/import/usage.ts(2,22): error TS2307: Cannot find module './fo2'.
33
tests/cases/conformance/types/import/usage.ts(3,36): error TS2694: Namespace '"tests/cases/conformance/types/import/foo2".Bar' has no exported member 'Q'.
4-
tests/cases/conformance/types/import/usage.ts(10,18): error TS2307: Cannot find module './fo2'.
4+
tests/cases/conformance/types/import/usage.ts(10,32): error TS2307: Cannot find module './fo2'.
55

66

77
==== tests/cases/conformance/types/import/foo.ts (0 errors) ====
@@ -34,10 +34,10 @@ tests/cases/conformance/types/import/usage.ts(10,18): error TS2307: Cannot find
3434

3535
==== tests/cases/conformance/types/import/usage.ts (4 errors) ====
3636
export const x: import("./fo") = { x: 0, y: 0 };
37-
~~~~~~~~~~~~~~
37+
~~~~~~
3838
!!! error TS2307: Cannot find module './fo'.
3939
export let y: import("./fo2").Bar.I = { a: "", b: 0 };
40-
~~~~~~~~~~~~~~~~~~~~~
40+
~~~~~~~
4141
!!! error TS2307: Cannot find module './fo2'.
4242
export let z: import("./foo2").Bar.Q = { a: "", b: 0 };
4343
~
@@ -49,7 +49,7 @@ tests/cases/conformance/types/import/usage.ts(10,18): error TS2307: Cannot find
4949
}
5050

5151
export let shim: typeof import("./fo2") = {
52-
~~~~~~~~~~~~~~~~~~~~~~
52+
~~~~~~~
5353
!!! error TS2307: Cannot find module './fo2'.
5454
Bar: Bar2
5555
};
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
tests/cases/compiler/metadataImportType.ts(2,6): error TS2304: Cannot find name 'test'.
2-
tests/cases/compiler/metadataImportType.ts(3,8): error TS2307: Cannot find module './b'.
2+
tests/cases/compiler/metadataImportType.ts(3,15): error TS2307: Cannot find module './b'.
33

44

55
==== tests/cases/compiler/metadataImportType.ts (2 errors) ====
@@ -8,6 +8,6 @@ tests/cases/compiler/metadataImportType.ts(3,8): error TS2307: Cannot find modul
88
~~~~
99
!!! error TS2304: Cannot find name 'test'.
1010
b: import('./b').B
11-
~~~~~~~~~~~~~~~
11+
~~~~~
1212
!!! error TS2307: Cannot find module './b'.
1313
}

tests/baselines/reference/symbolLinkDeclarationEmitModuleNames.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export declare const CONTROLLER_CLASS: BindingKey<import("@loopback/context/src/
8181
tests/cases/compiler/monorepo/context/src/bindingkey.d.ts(1,29): error TS2307: Cannot find module '@loopback/context'.
8282
tests/cases/compiler/monorepo/core/src/application.d.ts(1,29): error TS2307: Cannot find module '@loopback/context'.
8383
tests/cases/compiler/monorepo/core/src/usage.d.ts(1,28): error TS2307: Cannot find module '@loopback/context'.
84-
tests/cases/compiler/monorepo/core/src/usage.d.ts(2,51): error TS2307: Cannot find module '@loopback/context/src/value-promise'.
84+
tests/cases/compiler/monorepo/core/src/usage.d.ts(2,58): error TS2307: Cannot find module '@loopback/context/src/value-promise'.
8585

8686

8787
==== tests/cases/compiler/monorepo/core/src/application.d.ts (1 errors) ====
@@ -95,7 +95,7 @@ tests/cases/compiler/monorepo/core/src/usage.d.ts(2,51): error TS2307: Cannot fi
9595
~~~~~~~~~~~~~~~~~~~
9696
!!! error TS2307: Cannot find module '@loopback/context'.
9797
export declare const CONTROLLER_CLASS: BindingKey<import("@loopback/context/src/value-promise").Constructor<any>>;
98-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
98+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9999
!!! error TS2307: Cannot find module '@loopback/context/src/value-promise'.
100100

101101
==== /.src/tests/cases/compiler/monorepo/context/src/value-promise.d.ts (0 errors) ====

tests/baselines/reference/symbolLinkDeclarationEmitModuleNamesRootDir.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export declare const CONTROLLER_CLASS: BindingKey<import("@loopback/context/src/
4747

4848
tests/cases/compiler/monorepo/core/dist/src/application.d.ts(1,29): error TS2307: Cannot find module '@loopback/context'.
4949
tests/cases/compiler/monorepo/core/dist/src/usage.d.ts(1,28): error TS2307: Cannot find module '@loopback/context'.
50-
tests/cases/compiler/monorepo/core/dist/src/usage.d.ts(2,51): error TS2307: Cannot find module '@loopback/context/src/value-promise'.
50+
tests/cases/compiler/monorepo/core/dist/src/usage.d.ts(2,58): error TS2307: Cannot find module '@loopback/context/src/value-promise'.
5151

5252

5353
==== tests/cases/compiler/monorepo/core/tsconfig.json (0 errors) ====
@@ -82,6 +82,6 @@ tests/cases/compiler/monorepo/core/dist/src/usage.d.ts(2,51): error TS2307: Cann
8282
~~~~~~~~~~~~~~~~~~~
8383
!!! error TS2307: Cannot find module '@loopback/context'.
8484
export declare const CONTROLLER_CLASS: BindingKey<import("@loopback/context/src/value-promise").Constructor<any>>;
85-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
85+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8686
!!! error TS2307: Cannot find module '@loopback/context/src/value-promise'.
8787

tests/cases/fourslash/codeFixCannotFindModule.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,21 @@
1010
////import * as abs from "abs";
1111
////abs;
1212

13+
// @Filename: /b.ts
14+
////const x: import("abs").T = 0;
15+
1316
test.setTypesRegistry({
1417
"abs": undefined,
1518
});
1619

17-
goTo.file("/a.ts");
18-
19-
verify.codeFixAvailable([{
20-
description: "Install '@types/abs'",
21-
commands: [{
22-
type: "install package",
23-
file: "/a.ts",
24-
packageName: "@types/abs",
25-
}],
26-
}]);
20+
for (const file of ["/a.ts", "/b.ts"]) {
21+
goTo.file(file);
22+
verify.codeFixAvailable([{
23+
description: "Install '@types/abs'",
24+
commands: [{
25+
type: "install package",
26+
file,
27+
packageName: "@types/abs",
28+
}],
29+
}]);
30+
}

tests/cases/fourslash/fourslash.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ declare namespace FourSlashInterface {
184184
index?: number,
185185
preferences?: UserPreferences,
186186
});
187-
codeFixAvailable(options?: Array<{ description: string, actions?: Array<{ type: string, data: {} }>, commands?: {}[] }>): void;
187+
codeFixAvailable(options?: ReadonlyArray<VerifyCodeFixAvailableOptions>): void;
188188
applicableRefactorAvailableAtMarker(markerName: string): void;
189189
codeFixDiagnosticsAvailableAtMarkers(markerNames: string[], diagnosticCode?: number): void;
190190
applicableRefactorAvailableForRange(): void;
@@ -604,6 +604,12 @@ declare namespace FourSlashInterface {
604604
triggerCharacter?: string,
605605
}
606606

607+
export interface VerifyCodeFixAvailableOptions {
608+
readonly description: string;
609+
readonly actions?: ReadonlyArray<{ readonly type: string, readonly data: {} }>;
610+
readonly commands?: ReadonlyArray<{}?;
611+
}
612+
607613
interface VerifyNavigateToOptions {
608614
readonly pattern: string;
609615
readonly fileName?: string;

0 commit comments

Comments
 (0)