Skip to content

Commit 7dc66e9

Browse files
author
Andy
authored
moduleSpecifiers: specifier from "rootDirs" should be treated as relative (#25369)
1 parent 7084e6c commit 7dc66e9

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

src/compiler/moduleSpecifiers.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ namespace ts.moduleSpecifiers {
1818
const info = getInfo(compilerOptions, importingSourceFile, importingSourceFileName, host);
1919
const modulePaths = getAllModulePaths(files, toFileName, info.getCanonicalFileName, host);
2020
return firstDefined(modulePaths, moduleFileName => getGlobalModuleSpecifier(moduleFileName, info, host, compilerOptions)) ||
21-
getGlobalModuleSpecifier(toFileName, info, host, compilerOptions) ||
2221
first(getLocalModuleSpecifiers(toFileName, info, compilerOptions, preferences));
2322
}
2423

@@ -67,19 +66,19 @@ namespace ts.moduleSpecifiers {
6766
compilerOptions: CompilerOptions,
6867
) {
6968
return tryGetModuleNameFromTypeRoots(compilerOptions, host, getCanonicalFileName, moduleFileName, addJsExtension)
70-
|| tryGetModuleNameAsNodeModule(compilerOptions, moduleFileName, host, getCanonicalFileName, sourceDirectory)
71-
|| compilerOptions.rootDirs && tryGetModuleNameFromRootDirs(compilerOptions.rootDirs, moduleFileName, sourceDirectory, getCanonicalFileName);
69+
|| tryGetModuleNameAsNodeModule(compilerOptions, moduleFileName, host, getCanonicalFileName, sourceDirectory);
7270
}
7371

7472
function getLocalModuleSpecifiers(
7573
moduleFileName: string,
7674
{ moduleResolutionKind, addJsExtension, getCanonicalFileName, sourceDirectory }: Info,
7775
compilerOptions: CompilerOptions,
7876
preferences: ModuleSpecifierPreferences,
79-
) {
80-
const { baseUrl, paths } = compilerOptions;
77+
): ReadonlyArray<string> {
78+
const { baseUrl, paths, rootDirs } = compilerOptions;
8179

82-
const relativePath = removeExtensionAndIndexPostFix(ensurePathIsNonModuleName(getRelativePathFromDirectory(sourceDirectory, moduleFileName, getCanonicalFileName)), moduleResolutionKind, addJsExtension);
80+
const relativePath = rootDirs && tryGetModuleNameFromRootDirs(rootDirs, moduleFileName, sourceDirectory, getCanonicalFileName) ||
81+
removeExtensionAndIndexPostFix(ensurePathIsNonModuleName(getRelativePathFromDirectory(sourceDirectory, moduleFileName, getCanonicalFileName)), moduleResolutionKind, addJsExtension);
8382
if (!baseUrl || preferences.importModuleSpecifierPreference === "relative") {
8483
return [relativePath];
8584
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
// @Filename: /a.ts
4+
////export const a = 0;
5+
6+
// @Filename: /b.ts
7+
////a;
8+
9+
// @Filename: /tsconfig.json
10+
////{
11+
//// "compilerOptions": {
12+
//// "baseUrl": ".",
13+
//// "rootDirs": ["."]
14+
//// }
15+
////}
16+
17+
const nonRelative = 'import { a } from "a";\n\na;';
18+
const relative = nonRelative.replace('"a"', '"./a"');
19+
20+
goTo.file("/b.ts");
21+
verify.importFixAtPosition([nonRelative, relative]);
22+
verify.importFixAtPosition([nonRelative], undefined, { importModuleSpecifierPreference: "non-relative" });
23+
verify.importFixAtPosition([relative], undefined, { importModuleSpecifierPreference: "relative" });

0 commit comments

Comments
 (0)