This commit is contained in:
Matt Bierner 2020-03-05 12:10:29 -08:00
parent 5a0ab960f0
commit 9cc4da7503

View file

@ -8,7 +8,6 @@ import * as vscode from 'vscode';
import * as nls from 'vscode-nls'; import * as nls from 'vscode-nls';
import type * as Proto from '../protocol'; import type * as Proto from '../protocol';
import { ITypeScriptServiceClient, ServerResponse } from '../typescriptService'; import { ITypeScriptServiceClient, ServerResponse } from '../typescriptService';
import API from '../utils/api';
import * as typeConverters from '../utils/typeConverters'; import * as typeConverters from '../utils/typeConverters';
import FileConfigurationManager from './fileConfigurationManager'; import FileConfigurationManager from './fileConfigurationManager';
@ -26,7 +25,7 @@ class TypeScriptRenameProvider implements vscode.RenameProvider {
token: vscode.CancellationToken token: vscode.CancellationToken
): Promise<vscode.Range | null> { ): Promise<vscode.Range | null> {
const response = await this.execRename(document, position, token); const response = await this.execRename(document, position, token);
if (!response || response.type !== 'response' || !response.body) { if (response?.type !== 'response' || !response.body) {
return null; return null;
} }
@ -35,11 +34,9 @@ class TypeScriptRenameProvider implements vscode.RenameProvider {
return Promise.reject<vscode.Range>(renameInfo.localizedErrorMessage); return Promise.reject<vscode.Range>(renameInfo.localizedErrorMessage);
} }
if (this.client.apiVersion.gte(API.v310)) { const triggerSpan = renameInfo.triggerSpan; // added in TS 3.1
const triggerSpan = renameInfo.triggerSpan; if (triggerSpan) {
if (triggerSpan) { return typeConverters.Range.fromTextSpan(triggerSpan);
return typeConverters.Range.fromTextSpan(triggerSpan);
}
} }
return null; return null;
@ -61,17 +58,15 @@ class TypeScriptRenameProvider implements vscode.RenameProvider {
return Promise.reject<vscode.WorkspaceEdit>(renameInfo.localizedErrorMessage); return Promise.reject<vscode.WorkspaceEdit>(renameInfo.localizedErrorMessage);
} }
if (renameInfo.fileToRename) {
if (this.client.apiVersion.gte(API.v310)) { const edits = await this.renameFile(renameInfo.fileToRename, newName, token);
if (renameInfo.fileToRename) { if (edits) {
const edits = await this.renameFile(renameInfo.fileToRename, newName, token); return edits;
if (edits) { } else {
return edits; return Promise.reject<vscode.WorkspaceEdit>(localize('fileRenameFail', "An error occurred while renaming file"));
} else {
return Promise.reject<vscode.WorkspaceEdit>(localize('fileRenameFail', "An error occurred while renaming file"));
}
} }
} }
return this.updateLocs(response.body.locs, newName); return this.updateLocs(response.body.locs, newName);
} }
@ -104,11 +99,9 @@ class TypeScriptRenameProvider implements vscode.RenameProvider {
const edit = new vscode.WorkspaceEdit(); const edit = new vscode.WorkspaceEdit();
for (const spanGroup of locations) { for (const spanGroup of locations) {
const resource = this.client.toResource(spanGroup.file); const resource = this.client.toResource(spanGroup.file);
if (resource) { for (const textSpan of spanGroup.locs) {
for (const textSpan of spanGroup.locs as Proto.RenameTextSpan[]) { edit.replace(resource, typeConverters.Range.fromTextSpan(textSpan),
edit.replace(resource, typeConverters.Range.fromTextSpan(textSpan), (textSpan.prefixText || '') + newName + (textSpan.suffixText || ''));
(textSpan.prefixText || '') + newName + (textSpan.suffixText || ''));
}
} }
} }
return edit; return edit;