Skip to content

Commit 4c70bf0

Browse files
authored
Merge pull request #29313 from Microsoft/getEditsForRename
There is no need to check for file presence when trying to rename imports based on file rename
2 parents ad85e4f + 08f738f commit 4c70bf0

File tree

1 file changed

+19
-12
lines changed

1 file changed

+19
-12
lines changed

src/services/getEditsForFileRename.ts

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ namespace ts {
151151
const toImport = oldFromNew !== undefined
152152
// If we're at the new location (file was already renamed), need to redo module resolution starting from the old location.
153153
// TODO:GH#18217
154-
? getSourceFileToImportFromResolved(resolveModuleName(importLiteral.text, oldImportFromPath, program.getCompilerOptions(), host as ModuleResolutionHost), oldToNew, host)
154+
? getSourceFileToImportFromResolved(resolveModuleName(importLiteral.text, oldImportFromPath, program.getCompilerOptions(), host as ModuleResolutionHost), oldToNew)
155155
: getSourceFileToImport(importedModuleSymbol, importLiteral, sourceFile, program, host, oldToNew);
156156

157157
// Need an update if the imported file moved, or the importing file moved and was using a relative path.
@@ -192,28 +192,35 @@ namespace ts {
192192
const resolved = host.resolveModuleNames
193193
? host.getResolvedModuleWithFailedLookupLocationsFromCache && host.getResolvedModuleWithFailedLookupLocationsFromCache(importLiteral.text, importingSourceFile.fileName)
194194
: program.getResolvedModuleWithFailedLookupLocationsFromCache(importLiteral.text, importingSourceFile.fileName);
195-
return getSourceFileToImportFromResolved(resolved, oldToNew, host);
195+
return getSourceFileToImportFromResolved(resolved, oldToNew);
196196
}
197197
}
198198

199-
function getSourceFileToImportFromResolved(resolved: ResolvedModuleWithFailedLookupLocations | undefined, oldToNew: PathUpdater, host: LanguageServiceHost): ToImport | undefined {
199+
function getSourceFileToImportFromResolved(resolved: ResolvedModuleWithFailedLookupLocations | undefined, oldToNew: PathUpdater): ToImport | undefined {
200200
// Search through all locations looking for a moved file, and only then test already existing files.
201201
// This is because if `a.ts` is compiled to `a.js` and `a.ts` is moved, we don't want to resolve anything to `a.js`, but to `a.ts`'s new location.
202-
return tryEach(tryGetNewFile) || tryEach(tryGetOldFile);
202+
if (!resolved) return undefined;
203203

204-
function tryEach(cb: (oldFileName: string) => ToImport | undefined): ToImport | undefined {
205-
return resolved && (
206-
(resolved.resolvedModule && cb(resolved.resolvedModule.resolvedFileName)) || firstDefined(resolved.failedLookupLocations, cb));
204+
// First try resolved module
205+
if (resolved.resolvedModule) {
206+
const result = tryChange(resolved.resolvedModule.resolvedFileName);
207+
if (result) return result;
207208
}
208209

209-
function tryGetNewFile(oldFileName: string): ToImport | undefined {
210-
const newFileName = oldToNew(oldFileName);
211-
return newFileName !== undefined && host.fileExists!(newFileName) ? { newFileName, updated: true } : undefined; // TODO: GH#18217
210+
// Then failed lookups except package.json since we dont want to touch them (only included ts/js files)
211+
const result = forEach(resolved.failedLookupLocations, tryChangeWithIgnoringPackageJson);
212+
if (result) return result;
213+
214+
// If nothing changed, then result is resolved module file thats not updated
215+
return resolved.resolvedModule && { newFileName: resolved.resolvedModule.resolvedFileName, updated: false };
216+
217+
function tryChangeWithIgnoringPackageJson(oldFileName: string) {
218+
return !endsWith(oldFileName, "/package.json") ? tryChange(oldFileName) : undefined;
212219
}
213220

214-
function tryGetOldFile(oldFileName: string): ToImport | undefined {
221+
function tryChange(oldFileName: string) {
215222
const newFileName = oldToNew(oldFileName);
216-
return host.fileExists!(oldFileName) ? newFileName !== undefined ? { newFileName, updated: true } : { newFileName: oldFileName, updated: false } : undefined; // TODO: GH#18217
223+
return newFileName && { newFileName, updated: true };
217224
}
218225
}
219226

0 commit comments

Comments
 (0)