提交 33db5326 编写于 作者: M Matt Bierner

Show error early on invalid rename in js/ts

Fixes #58393
上级 2b459378
......@@ -14,15 +14,49 @@ class TypeScriptRenameProvider implements vscode.RenameProvider {
private readonly client: ITypeScriptServiceClient
) { }
public async prepareRename(
document: vscode.TextDocument,
position: vscode.Position,
token: vscode.CancellationToken
): Promise<vscode.Range | null> {
const body = await this.execRename(document, position, token);
if (!body) {
return null;
}
const renameInfo = body.info;
if (!renameInfo.canRename) {
return Promise.reject<vscode.Range>(new Error(renameInfo.localizedErrorMessage));
}
return null;
}
public async provideRenameEdits(
document: vscode.TextDocument,
position: vscode.Position,
newName: string,
token: vscode.CancellationToken
): Promise<vscode.WorkspaceEdit | null> {
const body = await this.execRename(document, position, token);
if (!body) {
return null;
}
const renameInfo = body.info;
if (!renameInfo.canRename) {
return Promise.reject<vscode.WorkspaceEdit>(renameInfo.localizedErrorMessage);
}
return this.toWorkspaceEdit(body.locs, newName);
}
public async execRename(
document: vscode.TextDocument,
position: vscode.Position,
token: vscode.CancellationToken
): Promise<Proto.RenameResponseBody | undefined> {
const file = this.client.toPath(document.uri);
if (!file) {
return null;
return undefined;
}
const args: Proto.RenameRequestArgs = {
......@@ -31,22 +65,12 @@ class TypeScriptRenameProvider implements vscode.RenameProvider {
findInComments: false
};
let body: Proto.RenameResponseBody | undefined;
try {
body = (await this.client.execute('rename', args, token)).body;
if (!body) {
return null;
}
return (await this.client.execute('rename', args, token)).body;
} catch {
// noop
return null;
}
const renameInfo = body.info;
if (!renameInfo.canRename) {
return Promise.reject<vscode.WorkspaceEdit>(renameInfo.localizedErrorMessage);
return undefined;
}
return this.toWorkspaceEdit(body.locs, newName);
}
private toWorkspaceEdit(
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册