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

Add edit stack element before and after accepting a completion

上级 008867f0
...@@ -775,18 +775,29 @@ class SnippetController implements ISnippetController { ...@@ -775,18 +775,29 @@ class SnippetController implements ISnippetController {
return snippet.bind(model.getLineContent(typeRange.startLineNumber), typeRange.startLineNumber - 1, typeRange.startColumn - 1, editor); return snippet.bind(model.getLineContent(typeRange.startLineNumber), typeRange.startLineNumber - 1, typeRange.startColumn - 1, editor);
} }
private static _getCommandForSnippet(adaptedSnippet:ICodeSnippet, typeRange:EditorCommon.IEditorRange): EditorCommon.IIdentifiedSingleEditOperation { private static _addCommandForSnippet(model:EditorCommon.ITextModel, adaptedSnippet:ICodeSnippet, typeRange:EditorCommon.IEditorRange, out:EditorCommon.IIdentifiedSingleEditOperation[]): void {
var insertText = adaptedSnippet.lines.join('\n'); let insertText = adaptedSnippet.lines.join('\n');
return EditOperation.replaceMove(typeRange, insertText); 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 { 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); let prepared = SnippetController._prepareSnippet(this._editor, this._editor.getSelection(), snippet, overwriteBefore, overwriteAfter);
this._editor.executeEdits('editor.contrib.insertSnippetHelper', [SnippetController._getCommandForSnippet(prepared.adaptedSnippet, prepared.typeRange)]); 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) { if (cursorOnly) {
this._editor.setSelection(Selection.createSelection(cursorOnly.lineNumber, cursorOnly.column, cursorOnly.lineNumber, cursorOnly.column)); this._editor.setSelection(Selection.createSelection(cursorOnly.lineNumber, cursorOnly.column, cursorOnly.lineNumber, cursorOnly.column));
} else if (prepared.adaptedSnippet.placeHolders.length > 0) { } else if (prepared.adaptedSnippet.placeHolders.length > 0) {
...@@ -802,11 +813,15 @@ class SnippetController implements ISnippetController { ...@@ -802,11 +813,15 @@ class SnippetController implements ISnippetController {
edits:EditorCommon.IIdentifiedSingleEditOperation[] = []; edits:EditorCommon.IIdentifiedSingleEditOperation[] = [];
for (let i = 0; i < selections.length; i++) { for (let i = 0; i < selections.length; i++) {
var prepared = SnippetController._prepareSnippet(this._editor, selections[i], snippet, overwriteBefore, overwriteAfter); let prepared = SnippetController._prepareSnippet(this._editor, selections[i], snippet, overwriteBefore, overwriteAfter);
edits.push(SnippetController._getCommandForSnippet(prepared.adaptedSnippet, prepared.typeRange)); 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; } { 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.
先完成此消息的编辑!
想要评论请 注册