提交 66bb8ff9 编写于 作者: J Johannes Rieken

add ISuggestion#extraEdits, #6874

上级 5f53f7c7
...@@ -5,12 +5,11 @@ ...@@ -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 { ...@@ -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 { ...@@ -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 ...@@ -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 { ...@@ -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();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册