提交 2cdf977a 编写于 作者: A Alex Dima

Add edit stack element before and after accepting a completion

上级 008867f0
......@@ -775,18 +775,29 @@ class SnippetController implements ISnippetController {
return snippet.bind(model.getLineContent(typeRange.startLineNumber), typeRange.startLineNumber - 1, typeRange.startColumn - 1, editor);
}
private static _getCommandForSnippet(adaptedSnippet:ICodeSnippet, typeRange:EditorCommon.IEditorRange): EditorCommon.IIdentifiedSingleEditOperation {
var insertText = adaptedSnippet.lines.join('\n');
return EditOperation.replaceMove(typeRange, insertText);
private static _addCommandForSnippet(model:EditorCommon.ITextModel, adaptedSnippet:ICodeSnippet, typeRange:EditorCommon.IEditorRange, out:EditorCommon.IIdentifiedSingleEditOperation[]): void {
let insertText = adaptedSnippet.lines.join('\n');
let currentText = model.getValueInRange(typeRange, EditorCommon.EndOfLinePreference.LF);
if (insertText !== currentText) {
out.push(EditOperation.replaceMove(typeRange, insertText));
}
}
private _runForPrimarySelection(snippet: CodeSnippet, overwriteBefore: number, overwriteAfter: number): void {
var initialAlternativeVersionId = this._editor.getModel().getAlternativeVersionId();
let initialAlternativeVersionId = this._editor.getModel().getAlternativeVersionId();
let edits: EditorCommon.IIdentifiedSingleEditOperation[] = [];
var prepared = SnippetController._prepareSnippet(this._editor, this._editor.getSelection(), snippet, overwriteBefore, overwriteAfter);
this._editor.executeEdits('editor.contrib.insertSnippetHelper', [SnippetController._getCommandForSnippet(prepared.adaptedSnippet, prepared.typeRange)]);
let prepared = SnippetController._prepareSnippet(this._editor, this._editor.getSelection(), snippet, overwriteBefore, overwriteAfter);
SnippetController._addCommandForSnippet(this._editor.getModel(), prepared.adaptedSnippet, prepared.typeRange, edits);
var cursorOnly = SnippetController._getSnippetCursorOnly(prepared.adaptedSnippet);
if (edits.length > 0) {
this._editor.getModel().pushStackElement();
this._editor.executeEdits('editor.contrib.insertSnippetHelper', edits);
this._editor.getModel().pushStackElement();
}
let cursorOnly = SnippetController._getSnippetCursorOnly(prepared.adaptedSnippet);
if (cursorOnly) {
this._editor.setSelection(Selection.createSelection(cursorOnly.lineNumber, cursorOnly.column, cursorOnly.lineNumber, cursorOnly.column));
} else if (prepared.adaptedSnippet.placeHolders.length > 0) {
......@@ -802,11 +813,15 @@ class SnippetController implements ISnippetController {
edits:EditorCommon.IIdentifiedSingleEditOperation[] = [];
for (let i = 0; i < selections.length; i++) {
var prepared = SnippetController._prepareSnippet(this._editor, selections[i], snippet, overwriteBefore, overwriteAfter);
edits.push(SnippetController._getCommandForSnippet(prepared.adaptedSnippet, prepared.typeRange));
let prepared = SnippetController._prepareSnippet(this._editor, selections[i], snippet, overwriteBefore, overwriteAfter);
SnippetController._addCommandForSnippet(this._editor.getModel(), prepared.adaptedSnippet, prepared.typeRange, edits);
}
this._editor.executeEdits('editor.contrib.insertSnippetHelper', edits);
if (edits.length > 0) {
this._editor.getModel().pushStackElement();
this._editor.executeEdits('editor.contrib.insertSnippetHelper', edits);
this._editor.getModel().pushStackElement();
}
}
private static _prepareSnippet(editor:EditorCommon.ICommonCodeEditor, selection:EditorCommon.IEditorSelection, snippet:CodeSnippet, overwriteBefore:number, overwriteAfter:number): { typeRange: EditorCommon.IEditorRange; adaptedSnippet: ICodeSnippet; } {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册