add ISuggestion#extraEdits, #6874
This commit is contained in:
parent
5f53f7c741
commit
66bb8ff968
|
@ -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
|
||||
};
|
||||
|
|
|
@ -367,6 +367,7 @@ export interface ISuggestion {
|
|||
noAutoAccept?: boolean;
|
||||
overwriteBefore?: number;
|
||||
overwriteAfter?: number;
|
||||
extraEdits?: editorCommon.ISingleEditOperation[];
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in a new issue