add ISuggestion#extraEdits, #6874

This commit is contained in:
Johannes Rieken 2016-08-18 17:48:34 +02:00
parent 5f53f7c741
commit 66bb8ff968
3 changed files with 22 additions and 12 deletions

View file

@ -5,12 +5,11 @@
'use strict';
import {Range} from 'vs/editor/common/core/range';
import {IIdentifiedSingleEditOperation} from 'vs/editor/common/editorCommon';
import {Position} from 'vs/editor/common/core/position';
import {IIdentifiedSingleEditOperation, IRange, IPosition} from 'vs/editor/common/editorCommon';
export class EditOperation {
public static insert(position:Position, text:string): IIdentifiedSingleEditOperation {
public static insert(position:IPosition, text:string): IIdentifiedSingleEditOperation {
return {
identifier: null,
range: new Range(position.lineNumber, position.column, position.lineNumber, position.column),
@ -19,28 +18,28 @@ export class EditOperation {
};
}
public static delete(range:Range): IIdentifiedSingleEditOperation {
public static delete(range:IRange): IIdentifiedSingleEditOperation {
return {
identifier: null,
range: range,
range: Range.lift(range),
text: null,
forceMoveMarkers: true
};
}
public static replace(range:Range, text:string): IIdentifiedSingleEditOperation {
public static replace(range:IRange, text:string): IIdentifiedSingleEditOperation {
return {
identifier: null,
range: range,
range: Range.lift(range),
text: text,
forceMoveMarkers: false
};
}
public static replaceMove(range:Range, text:string): IIdentifiedSingleEditOperation {
public static replaceMove(range:IRange, text:string): IIdentifiedSingleEditOperation {
return {
identifier: null,
range: range,
range: Range.lift(range),
text: text,
forceMoveMarkers: true
};

View file

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

View file

@ -13,6 +13,7 @@ import { ICommonCodeEditor, IEditorContribution, EditorContextKeys, ModeContextK
import { editorAction, ServicesAccessor, EditorAction, EditorCommand, CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
import { EditorBrowserRegistry } from 'vs/editor/browser/editorBrowserExtensions';
import { EditOperation } from 'vs/editor/common/core/editOperation';
import { getSnippetController, CodeSnippet } from 'vs/editor/contrib/snippet/common/snippet';
import { Context as SuggestContext } from 'vs/editor/contrib/suggest/common/suggest';
import { SuggestModel } from '../common/suggestModel';
@ -61,12 +62,21 @@ export class SuggestController implements IEditorContribution {
private onDidSelectItem(item: CompletionItem): void {
if (item) {
const {insertText, overwriteBefore, overwriteAfter} = item.suggestion;
const {insertText, overwriteBefore, overwriteAfter, extraEdits} = item.suggestion;
const columnDelta = this.editor.getPosition().column - this.model.getTriggerPosition().column;
getSnippetController(this.editor).run(new CodeSnippet(insertText),
if (Array.isArray(extraEdits)) {
this.editor.pushUndoStop();
this.editor.executeEdits('suggestController.extraEdits', extraEdits.map(edit => EditOperation.replace(edit.range, edit.text)));
this.editor.pushUndoStop();
}
getSnippetController(this.editor).run(
new CodeSnippet(insertText),
overwriteBefore + columnDelta,
overwriteAfter);
overwriteAfter,
undefined
);
}
this.model.cancel();