add ISuggestion#extraEdits, #6874
This commit is contained in:
parent
5f53f7c741
commit
66bb8ff968
|
@ -5,12 +5,11 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import {Range} from 'vs/editor/common/core/range';
|
import {Range} from 'vs/editor/common/core/range';
|
||||||
import {IIdentifiedSingleEditOperation} from 'vs/editor/common/editorCommon';
|
import {IIdentifiedSingleEditOperation, IRange, IPosition} from 'vs/editor/common/editorCommon';
|
||||||
import {Position} from 'vs/editor/common/core/position';
|
|
||||||
|
|
||||||
export class EditOperation {
|
export class EditOperation {
|
||||||
|
|
||||||
public static insert(position:Position, text:string): IIdentifiedSingleEditOperation {
|
public static insert(position:IPosition, text:string): IIdentifiedSingleEditOperation {
|
||||||
return {
|
return {
|
||||||
identifier: null,
|
identifier: null,
|
||||||
range: new Range(position.lineNumber, position.column, position.lineNumber, position.column),
|
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 {
|
return {
|
||||||
identifier: null,
|
identifier: null,
|
||||||
range: range,
|
range: Range.lift(range),
|
||||||
text: null,
|
text: null,
|
||||||
forceMoveMarkers: true
|
forceMoveMarkers: true
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public static replace(range:Range, text:string): IIdentifiedSingleEditOperation {
|
public static replace(range:IRange, text:string): IIdentifiedSingleEditOperation {
|
||||||
return {
|
return {
|
||||||
identifier: null,
|
identifier: null,
|
||||||
range: range,
|
range: Range.lift(range),
|
||||||
text: text,
|
text: text,
|
||||||
forceMoveMarkers: false
|
forceMoveMarkers: false
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public static replaceMove(range:Range, text:string): IIdentifiedSingleEditOperation {
|
public static replaceMove(range:IRange, text:string): IIdentifiedSingleEditOperation {
|
||||||
return {
|
return {
|
||||||
identifier: null,
|
identifier: null,
|
||||||
range: range,
|
range: Range.lift(range),
|
||||||
text: text,
|
text: text,
|
||||||
forceMoveMarkers: true
|
forceMoveMarkers: true
|
||||||
};
|
};
|
||||||
|
|
|
@ -367,6 +367,7 @@ export interface ISuggestion {
|
||||||
noAutoAccept?: boolean;
|
noAutoAccept?: boolean;
|
||||||
overwriteBefore?: number;
|
overwriteBefore?: number;
|
||||||
overwriteAfter?: 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 { editorAction, ServicesAccessor, EditorAction, EditorCommand, CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';
|
||||||
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
|
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
|
||||||
import { EditorBrowserRegistry } from 'vs/editor/browser/editorBrowserExtensions';
|
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 { getSnippetController, CodeSnippet } from 'vs/editor/contrib/snippet/common/snippet';
|
||||||
import { Context as SuggestContext } from 'vs/editor/contrib/suggest/common/suggest';
|
import { Context as SuggestContext } from 'vs/editor/contrib/suggest/common/suggest';
|
||||||
import { SuggestModel } from '../common/suggestModel';
|
import { SuggestModel } from '../common/suggestModel';
|
||||||
|
@ -61,12 +62,21 @@ export class SuggestController implements IEditorContribution {
|
||||||
|
|
||||||
private onDidSelectItem(item: CompletionItem): void {
|
private onDidSelectItem(item: CompletionItem): void {
|
||||||
if (item) {
|
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;
|
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,
|
overwriteBefore + columnDelta,
|
||||||
overwriteAfter);
|
overwriteAfter,
|
||||||
|
undefined
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.model.cancel();
|
this.model.cancel();
|
||||||
|
|
Loading…
Reference in a new issue