提交 96de72d9 编写于 作者: M Matt Bierner

Defer code action edit creation until action is actually accepted

上级 5600402d
...@@ -32,7 +32,12 @@ export default class TypeScriptCodeActionProvider implements CodeActionProvider ...@@ -32,7 +32,12 @@ export default class TypeScriptCodeActionProvider implements CodeActionProvider
commands.registerCommand(this.commandId, this.onCodeAction, this); commands.registerCommand(this.commandId, this.onCodeAction, this);
} }
public async provideCodeActions(document: TextDocument, range: Range, context: CodeActionContext, token: CancellationToken): Promise<Command[]> { public async provideCodeActions(
document: TextDocument,
range: Range,
context: CodeActionContext,
token: CancellationToken
): Promise<Command[]> {
if (!this.client.apiVersion.has213Features()) { if (!this.client.apiVersion.has213Features()) {
return []; return [];
} }
...@@ -70,7 +75,7 @@ export default class TypeScriptCodeActionProvider implements CodeActionProvider ...@@ -70,7 +75,7 @@ export default class TypeScriptCodeActionProvider implements CodeActionProvider
errorCodes: Array.from(supportedActions) errorCodes: Array.from(supportedActions)
}; };
const response = await this.client.execute('getCodeFixes', args, token); const response = await this.client.execute('getCodeFixes', args, token);
return (response.body || []).map(action => this.actionToEdit(source, action)); return (response.body || []).map(action => this.getCommandForAction(source, action));
} }
private get supportedCodeActions(): Thenable<NumberSet> { private get supportedCodeActions(): Thenable<NumberSet> {
...@@ -94,7 +99,15 @@ export default class TypeScriptCodeActionProvider implements CodeActionProvider ...@@ -94,7 +99,15 @@ export default class TypeScriptCodeActionProvider implements CodeActionProvider
.filter(code => supportedActions[code]))); .filter(code => supportedActions[code])));
} }
private actionToEdit(source: Source, action: Proto.CodeAction): Command { private getCommandForAction(source: Source, action: Proto.CodeAction): Command {
return {
title: action.description,
command: this.commandId,
arguments: [source, action]
};
}
private async onCodeAction(source: Source, action: Proto.CodeAction): Promise<boolean> {
const workspaceEdit = new WorkspaceEdit(); const workspaceEdit = new WorkspaceEdit();
for (const change of action.changes) { for (const change of action.changes) {
for (const textChange of change.textChanges) { for (const textChange of change.textChanges) {
...@@ -105,14 +118,7 @@ export default class TypeScriptCodeActionProvider implements CodeActionProvider ...@@ -105,14 +118,7 @@ export default class TypeScriptCodeActionProvider implements CodeActionProvider
textChange.newText); textChange.newText);
} }
} }
return {
title: action.description,
command: this.commandId,
arguments: [source, workspaceEdit]
};
}
private async onCodeAction(source: Source, workspaceEdit: WorkspaceEdit): Promise<boolean> {
const success = workspace.applyEdit(workspaceEdit); const success = workspace.applyEdit(workspaceEdit);
if (!success) { if (!success) {
return false; return false;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册