mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-04 21:53:42 -06:00
moduleSpecifiers: specifier from "rootDirs" should be treated as relative (#25369)
This commit is contained in:
parent
7084e6cf47
commit
7dc66e916a
@ -18,7 +18,6 @@ namespace ts.moduleSpecifiers {
|
||||
const info = getInfo(compilerOptions, importingSourceFile, importingSourceFileName, host);
|
||||
const modulePaths = getAllModulePaths(files, toFileName, info.getCanonicalFileName, host);
|
||||
return firstDefined(modulePaths, moduleFileName => getGlobalModuleSpecifier(moduleFileName, info, host, compilerOptions)) ||
|
||||
getGlobalModuleSpecifier(toFileName, info, host, compilerOptions) ||
|
||||
first(getLocalModuleSpecifiers(toFileName, info, compilerOptions, preferences));
|
||||
}
|
||||
|
||||
@ -67,8 +66,7 @@ namespace ts.moduleSpecifiers {
|
||||
compilerOptions: CompilerOptions,
|
||||
) {
|
||||
return tryGetModuleNameFromTypeRoots(compilerOptions, host, getCanonicalFileName, moduleFileName, addJsExtension)
|
||||
|| tryGetModuleNameAsNodeModule(compilerOptions, moduleFileName, host, getCanonicalFileName, sourceDirectory)
|
||||
|| compilerOptions.rootDirs && tryGetModuleNameFromRootDirs(compilerOptions.rootDirs, moduleFileName, sourceDirectory, getCanonicalFileName);
|
||||
|| tryGetModuleNameAsNodeModule(compilerOptions, moduleFileName, host, getCanonicalFileName, sourceDirectory);
|
||||
}
|
||||
|
||||
function getLocalModuleSpecifiers(
|
||||
@ -76,10 +74,11 @@ namespace ts.moduleSpecifiers {
|
||||
{ moduleResolutionKind, addJsExtension, getCanonicalFileName, sourceDirectory }: Info,
|
||||
compilerOptions: CompilerOptions,
|
||||
preferences: ModuleSpecifierPreferences,
|
||||
) {
|
||||
const { baseUrl, paths } = compilerOptions;
|
||||
): ReadonlyArray<string> {
|
||||
const { baseUrl, paths, rootDirs } = compilerOptions;
|
||||
|
||||
const relativePath = removeExtensionAndIndexPostFix(ensurePathIsNonModuleName(getRelativePathFromDirectory(sourceDirectory, moduleFileName, getCanonicalFileName)), moduleResolutionKind, addJsExtension);
|
||||
const relativePath = rootDirs && tryGetModuleNameFromRootDirs(rootDirs, moduleFileName, sourceDirectory, getCanonicalFileName) ||
|
||||
removeExtensionAndIndexPostFix(ensurePathIsNonModuleName(getRelativePathFromDirectory(sourceDirectory, moduleFileName, getCanonicalFileName)), moduleResolutionKind, addJsExtension);
|
||||
if (!baseUrl || preferences.importModuleSpecifierPreference === "relative") {
|
||||
return [relativePath];
|
||||
}
|
||||
|
||||
23
tests/cases/fourslash/importNameCodeFix_rootDirs.ts
Normal file
23
tests/cases/fourslash/importNameCodeFix_rootDirs.ts
Normal file
@ -0,0 +1,23 @@
|
||||
/// <reference path="fourslash.ts" />
|
||||
|
||||
// @Filename: /a.ts
|
||||
////export const a = 0;
|
||||
|
||||
// @Filename: /b.ts
|
||||
////a;
|
||||
|
||||
// @Filename: /tsconfig.json
|
||||
////{
|
||||
//// "compilerOptions": {
|
||||
//// "baseUrl": ".",
|
||||
//// "rootDirs": ["."]
|
||||
//// }
|
||||
////}
|
||||
|
||||
const nonRelative = 'import { a } from "a";\n\na;';
|
||||
const relative = nonRelative.replace('"a"', '"./a"');
|
||||
|
||||
goTo.file("/b.ts");
|
||||
verify.importFixAtPosition([nonRelative, relative]);
|
||||
verify.importFixAtPosition([nonRelative], undefined, { importModuleSpecifierPreference: "non-relative" });
|
||||
verify.importFixAtPosition([relative], undefined, { importModuleSpecifierPreference: "relative" });
|
||||
Loading…
x
Reference in New Issue
Block a user