@@ -104,6 +104,7 @@ namespace ts {
104
104
) : void {
105
105
for ( const sourceFile of program . getSourceFiles ( ) ) {
106
106
const newImportFromPath = oldToNew ( sourceFile . fileName ) || sourceFile . fileName ;
107
+ const importingSourceFileMoved = newImportFromPath !== sourceFile . fileName ;
107
108
const newImportFromDirectory = getDirectoryPath ( newImportFromPath ) ;
108
109
109
110
const oldFromNew : string | undefined = newToOld ( sourceFile . fileName ) ;
@@ -123,7 +124,10 @@ namespace ts {
123
124
// TODO:GH#18217
124
125
? getSourceFileToImportFromResolved ( resolveModuleName ( importLiteral . text , oldImportFromPath , program . getCompilerOptions ( ) , host as ModuleResolutionHost ) , oldToNew , program )
125
126
: getSourceFileToImport ( importLiteral , sourceFile , program , host , oldToNew ) ;
126
- return toImport === undefined ? undefined : moduleSpecifiers . getModuleSpecifier ( program , sourceFile , newImportFromPath , toImport , host , preferences ) ;
127
+ // If neither the importing source file nor the imported file moved, do nothing.
128
+ return toImport === undefined || ! toImport . updated && ! importingSourceFileMoved
129
+ ? undefined
130
+ : moduleSpecifiers . getModuleSpecifier ( program , sourceFile , newImportFromPath , toImport . newFileName , host , preferences ) ;
127
131
} ) ;
128
132
}
129
133
}
@@ -135,12 +139,18 @@ namespace ts {
135
139
return ensurePathIsNonModuleName ( combineNormal ( pathA , pathB ) ) ;
136
140
}
137
141
138
- function getSourceFileToImport ( importLiteral : StringLiteralLike , importingSourceFile : SourceFile , program : Program , host : LanguageServiceHost , oldToNew : PathUpdater ) : string | undefined {
142
+ interface ToImport {
143
+ readonly newFileName : string ;
144
+ /** True if the imported file was renamed. */
145
+ readonly updated : boolean ;
146
+ }
147
+ function getSourceFileToImport ( importLiteral : StringLiteralLike , importingSourceFile : SourceFile , program : Program , host : LanguageServiceHost , oldToNew : PathUpdater ) : ToImport | undefined {
139
148
const symbol = program . getTypeChecker ( ) . getSymbolAtLocation ( importLiteral ) ;
140
149
if ( symbol ) {
141
150
if ( symbol . declarations . some ( d => isAmbientModule ( d ) ) ) return undefined ; // No need to update if it's an ambient module
142
151
const oldFileName = find ( symbol . declarations , isSourceFile ) ! . fileName ;
143
- return oldToNew ( oldFileName ) || oldFileName ;
152
+ const newFileName = oldToNew ( oldFileName ) ;
153
+ return newFileName === undefined ? { newFileName : oldFileName , updated : false } : { newFileName, updated : true } ;
144
154
}
145
155
else {
146
156
const resolved = host . resolveModuleNames
@@ -150,14 +160,15 @@ namespace ts {
150
160
}
151
161
}
152
162
153
- function getSourceFileToImportFromResolved ( resolved : ResolvedModuleWithFailedLookupLocations | undefined , oldToNew : PathUpdater , program : Program ) : string | undefined {
163
+ function getSourceFileToImportFromResolved ( resolved : ResolvedModuleWithFailedLookupLocations | undefined , oldToNew : PathUpdater , program : Program ) : ToImport | undefined {
154
164
return resolved && (
155
165
( resolved . resolvedModule && getIfInProgram ( resolved . resolvedModule . resolvedFileName ) ) || firstDefined ( resolved . failedLookupLocations , getIfInProgram ) ) ;
156
166
157
- function getIfInProgram ( oldLocation : string ) : string | undefined {
167
+ function getIfInProgram ( oldLocation : string ) : ToImport | undefined {
158
168
const newLocation = oldToNew ( oldLocation ) ;
169
+
159
170
return program . getSourceFile ( oldLocation ) || newLocation !== undefined && program . getSourceFile ( newLocation )
160
- ? newLocation || oldLocation
171
+ ? newLocation !== undefined ? { newFileName : newLocation , updated : true } : { newFileName : oldLocation , updated : false }
161
172
: undefined ;
162
173
}
163
174
}
0 commit comments