diff --git a/extensions/typescript-language-features/src/languageFeatures/rename.ts b/extensions/typescript-language-features/src/languageFeatures/rename.ts index 3dcca16f5b2..19dc5b93c99 100644 --- a/extensions/typescript-language-features/src/languageFeatures/rename.ts +++ b/extensions/typescript-language-features/src/languageFeatures/rename.ts @@ -85,7 +85,7 @@ class TypeScriptRenameProvider implements vscode.RenameProvider { } if (renameInfo.fileToRename) { - const edits = await this.renameFile(renameInfo.fileToRename, newName, token); + const edits = await this.renameFile(renameInfo.fileToRename, renameInfo.fullDisplayName, newName, token); if (edits) { return edits; } else { @@ -170,13 +170,17 @@ class TypeScriptRenameProvider implements vscode.RenameProvider { private async renameFile( fileToRename: string, + fullDisplayName: string, newName: string, token: vscode.CancellationToken, ): Promise { - // Make sure we preserve file extension if none provided + // Make sure we preserve file extension if extension is unchanged or none provided if (!path.extname(newName)) { newName += path.extname(fileToRename); } + else if (path.extname(newName) === path.extname(fullDisplayName)) { + newName = newName.slice(0, newName.length - path.extname(newName).length) + path.extname(fileToRename); + } const dirname = path.dirname(fileToRename); const newFilePath = path.join(dirname, newName);