add skeleton for ISuggestion#command, #6874

This commit is contained in:
Johannes Rieken 2016-08-18 17:57:27 +02:00
parent 1ee0c147db
commit 90d6808677
2 changed files with 14 additions and 1 deletions

View file

@ -368,6 +368,7 @@ export interface ISuggestion {
overwriteBefore?: number;
overwriteAfter?: number;
extraEdits?: editorCommon.ISingleEditOperation[];
command?: Command;
}
/**

View file

@ -9,6 +9,7 @@ import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
import { ICommandService } from 'vs/platform/commands/common/commands';
import { ICommonCodeEditor, IEditorContribution, EditorContextKeys, ModeContextKeys } from 'vs/editor/common/editorCommon';
import { editorAction, ServicesAccessor, EditorAction, EditorCommand, CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
@ -33,6 +34,7 @@ export class SuggestController implements IEditorContribution {
constructor(
private editor: ICodeEditor,
@ICommandService private commandService: ICommandService,
@IInstantiationService instantiationService: IInstantiationService
) {
this.model = new SuggestModel(this.editor);
@ -62,9 +64,19 @@ export class SuggestController implements IEditorContribution {
private onDidSelectItem(item: CompletionItem): void {
if (item) {
const {insertText, overwriteBefore, overwriteAfter, extraEdits} = item.suggestion;
const {insertText, overwriteBefore, overwriteAfter, extraEdits, command} = item.suggestion;
const columnDelta = this.editor.getPosition().column - this.model.getTriggerPosition().column;
// todo@joh
// * order of stuff command/extraEdit/actual edit
// * failure of command?
// * wait for command to execute?
if (command) {
this.commandService.executeCommand(command.id, ...command.arguments).then(undefined, err => {
console.error(err);
});
}
if (Array.isArray(extraEdits)) {
this.editor.pushUndoStop();
this.editor.executeEdits('suggestController.extraEdits', extraEdits.map(edit => EditOperation.replace(edit.range, edit.text)));