diff --git a/extensions/typescript-language-features/src/features/updatePathsOnRename.ts b/extensions/typescript-language-features/src/features/updatePathsOnRename.ts index c92d0205cb1c52578abe2b3d573033472ea22bc4..76ef25cd3dd41037ec2c4d84b976db9b765e2e9d 100644 --- a/extensions/typescript-language-features/src/features/updatePathsOnRename.ts +++ b/extensions/typescript-language-features/src/features/updatePathsOnRename.ts @@ -13,7 +13,6 @@ import { nulToken } from '../utils/cancellation'; import { VersionDependentRegistration } from '../utils/dependentRegistration'; import { Disposable } from '../utils/dispose'; import * as fileSchemes from '../utils/fileSchemes'; -import { isTypeScriptDocument } from '../utils/languageModeIds'; import * as typeConverters from '../utils/typeConverters'; import FileConfigurationManager from './fileConfigurationManager'; @@ -43,6 +42,10 @@ interface RenameAction { readonly jsTsFileThatIsBeingMoved: vscode.Uri; } +function doesResourceLookLikeATypeScriptFile(resource: vscode.Uri): boolean { + return /\.tsx?$/i.test(resource.fsPath); +} + class UpdateImportsOnFileRenameHandler extends Disposable { public static readonly minVersion = API.v300; @@ -64,6 +67,12 @@ class UpdateImportsOnFileRenameHandler extends Disposable { return; } + const config = this.getConfiguration(newUri); + const setting = config.get(updateImportsOnFileMoveName); + if (setting === UpdateImportsOnFileMoveSetting.Never) { + return; + } + // Try to get a js/ts file that is being moved // For directory moves, this returns a js/ts file under the directory. const jsTsFileThatIsBeingMoved = await this.getJsTsFileBeingMoved(newUri); @@ -83,12 +92,6 @@ class UpdateImportsOnFileRenameHandler extends Disposable { private async doRename({ oldUri, newUri, newFilePath, oldFilePath, jsTsFileThatIsBeingMoved }: RenameAction): Promise { const document = await vscode.workspace.openTextDocument(jsTsFileThatIsBeingMoved); - const config = this.getConfiguration(document); - const setting = config.get(updateImportsOnFileMoveName); - if (setting === UpdateImportsOnFileMoveSetting.Never) { - return; - } - // Make sure TS knows about file this.client.bufferSyncSupport.closeResource(oldUri); this.client.bufferSyncSupport.openTextDocument(document); @@ -98,16 +101,13 @@ class UpdateImportsOnFileRenameHandler extends Disposable { return; } - if (await this.confirmActionWithUser(newUri, document)) { + if (await this.confirmActionWithUser(newUri)) { await vscode.workspace.applyEdit(edits); } } - private async confirmActionWithUser( - newResource: vscode.Uri, - newDocument: vscode.TextDocument - ): Promise { - const config = this.getConfiguration(newDocument); + private async confirmActionWithUser(newResource: vscode.Uri): Promise { + const config = this.getConfiguration(newResource); const setting = config.get(updateImportsOnFileMoveName); switch (setting) { case UpdateImportsOnFileMoveSetting.Always: @@ -116,18 +116,15 @@ class UpdateImportsOnFileRenameHandler extends Disposable { return false; case UpdateImportsOnFileMoveSetting.Prompt: default: - return this.promptUser(newResource, newDocument); + return this.promptUser(newResource); } } - private getConfiguration(newDocument: vscode.TextDocument) { - return vscode.workspace.getConfiguration(isTypeScriptDocument(newDocument) ? 'typescript' : 'javascript', newDocument.uri); + private getConfiguration(resource: vscode.Uri) { + return vscode.workspace.getConfiguration(doesResourceLookLikeATypeScriptFile(resource) ? 'typescript' : 'javascript', resource); } - private async promptUser( - newResource: vscode.Uri, - newDocument: vscode.TextDocument - ): Promise { + private async promptUser(newResource: vscode.Uri): Promise { const enum Choice { None = 0, Accept = 1, @@ -173,7 +170,7 @@ class UpdateImportsOnFileRenameHandler extends Disposable { } case Choice.Always: { - const config = this.getConfiguration(newDocument); + const config = this.getConfiguration(newResource); config.update( updateImportsOnFileMoveName, UpdateImportsOnFileMoveSetting.Always, @@ -182,7 +179,7 @@ class UpdateImportsOnFileRenameHandler extends Disposable { } case Choice.Never: { - const config = this.getConfiguration(newDocument); + const config = this.getConfiguration(newResource); config.update( updateImportsOnFileMoveName, UpdateImportsOnFileMoveSetting.Never,