Fix 'Changes overlap' error in move to file refactoring #62404
+48
−4
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fix 'Changes overlap' error in move to file refactoring
Fixes #62378
Description
This PR fixes the "Changes overlap" error that occurs when using the "move to file" refactor on code that needs to be moved to a file with existing imports. The issue was caused by uncoordinated text changes that overlapped when both removing imports from the target file and adding new content.
Problem
When moving code to a file that already contains imports, the refactor would fail with:
Changes overlap
This happened because the move-to-file refactor was making conflicting text changes:
These operations weren't coordinated, causing text ranges to overlap.
Solution
updateImportsInTargetFile()
function: Uses the ImportAdder API to safely coordinate import removalgetNewStatementsAndRemoveFromOldFile()
to call the new function when working with existing target filesTechnical Details
The fix leverages TypeScript's existing
codefix.ImportAdder
infrastructure, which is specifically designed to coordinate import-related text changes without conflicts. This follows the established patterns used throughout the TypeScript codebase for similar import manipulation scenarios.Testing