提交 f8a31fde 编写于 作者: J Johannes Rieken

fix #23404

上级 b7e71acc
......@@ -343,6 +343,11 @@ export abstract class BaseEditorSimpleWorker {
lastEol = eol;
}
if (!range) {
// eol-change only
continue;
}
const original = model.getValueInRange(range);
text = text.replace(/\r\n|\n|\r/g, model.eol);
......@@ -376,7 +381,7 @@ export abstract class BaseEditorSimpleWorker {
}
if (typeof lastEol === 'number') {
result[result.length - 1].eol = lastEol;
result.push({ eol: lastEol, text: undefined, range: undefined });
}
return TPromise.as(result);
......
......@@ -28,6 +28,11 @@ import EditorContextKeys = editorCommon.EditorContextKeys;
function alertFormattingEdits(edits: editorCommon.ISingleEditOperation[]): void {
edits = edits.filter(edit => edit.range);
if (!edits) {
return;
}
let { range } = edits[0];
for (let i = 1; i < edits.length; i++) {
range = Range.plusRange(range, edits[i].range);
......
......@@ -28,8 +28,18 @@ export class EditOperationsCommand implements editorCommon.ICommand {
private _selectionId: string;
constructor(edits: TextEdit[], initialSelection: Selection) {
this._edits = edits;
this._initialSelection = initialSelection;
this._edits = [];
this._newEol = undefined;
for (let edit of edits) {
if (typeof edit.eol === 'number') {
this._newEol = edit.eol;
}
if (edit.range && edit.text) {
this._edits.push(edit);
}
}
}
public getEditOperations(model: editorCommon.ITokenizedModel, builder: editorCommon.IEditOperationBuilder): void {
......@@ -40,7 +50,6 @@ export class EditOperationsCommand implements editorCommon.ICommand {
if (trimEdit !== null) { // produced above in case the edit.text is identical to the existing text
builder.addEditOperation(Range.lift(edit.range), edit.text);
}
this._newEol = edit.eol;
}
var selectionIsSet = false;
......
......@@ -147,7 +147,7 @@ class FormatOnSaveParticipant implements INamedSaveParticpant {
}
const versionNow = model.getVersionId();
const {tabSize, insertSpaces} = model.getOptions();
const { tabSize, insertSpaces } = model.getOptions();
return new TPromise<ISingleEditOperation[]>((resolve, reject) => {
setTimeout(reject, 750);
......@@ -166,16 +166,16 @@ class FormatOnSaveParticipant implements INamedSaveParticpant {
}
private _editsWithEditor(editor: ICommonCodeEditor, edits: ISingleEditOperation[]): void {
editor.executeCommand('files.formatOnSave', new EditOperationsCommand(edits, editor.getSelection()));
EditOperationsCommand.execute(editor, edits);
}
private _editWithModel(model: IModel, edits: ISingleEditOperation[]): void {
const [{range}] = edits;
const [{ range }] = edits;
const initialSelection = new Selection(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn);
model.pushEditOperations([initialSelection], edits.map(FormatOnSaveParticipant._asIdentEdit), undoEdits => {
for (const {range} of undoEdits) {
for (const { range } of undoEdits) {
if (Range.areIntersectingOrTouching(range, initialSelection)) {
return [new Selection(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn)];
}
......@@ -184,7 +184,7 @@ class FormatOnSaveParticipant implements INamedSaveParticpant {
});
}
private static _asIdentEdit({text, range}: ISingleEditOperation): IIdentifiedSingleEditOperation {
private static _asIdentEdit({ text, range }: ISingleEditOperation): IIdentifiedSingleEditOperation {
return {
text,
range: Range.lift(range),
......@@ -246,7 +246,7 @@ export class SaveParticipant implements ISaveParticipant {
const promiseFactory = this._saveParticipants.map(p => () => {
const {name} = p;
const { name } = p;
const t1 = Date.now();
return TPromise.as(p.participate(model, env)).then(() => {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册