提交 dd5e66ed 编写于 作者: A Alexandru Dima 提交者: GitHub

Merge pull request #35778 from dgileadi/trim-whitespace-preserve-cursor

Support the "reason" arg for trimming trailing whitespace
......@@ -15,13 +15,15 @@ export class TrimTrailingWhitespaceCommand implements editorCommon.ICommand {
private selection: Selection;
private selectionId: string;
private cursors: Position[];
constructor(selection: Selection) {
constructor(selection: Selection, cursors: Position[]) {
this.selection = selection;
this.cursors = cursors;
}
public getEditOperations(model: editorCommon.ITokenizedModel, builder: editorCommon.IEditOperationBuilder): void {
let ops = trimTrailingWhitespace(model, []);
let ops = trimTrailingWhitespace(model, this.cursors);
for (let i = 0, len = ops.length; i < len; i++) {
let op = ops[i];
......
......@@ -14,6 +14,7 @@ import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
import { ReplaceCommand, ReplaceCommandThatPreservesSelection } from 'vs/editor/common/commands/replaceCommand';
import { Range } from 'vs/editor/common/core/range';
import { Selection } from 'vs/editor/common/core/selection';
import { Position } from 'vs/editor/common/core/position';
import { editorAction, ServicesAccessor, IActionOptions, EditorAction } from 'vs/editor/common/editorCommonExtensions';
import { CopyLinesCommand } from './copyLinesCommand';
import { DeleteLinesCommand } from './deleteLinesCommand';
......@@ -206,9 +207,17 @@ export class TrimTrailingWhitespaceAction extends EditorAction {
});
}
public run(accessor: ServicesAccessor, editor: ICommonCodeEditor): void {
public run(accessor: ServicesAccessor, editor: ICommonCodeEditor, args: any): void {
let cursors: Position[] = [];
if (args.reason === 'auto-save') {
// See https://github.com/editorconfig/editorconfig-vscode/issues/47
// It is very convenient for the editor config extension to invoke this action.
// So, if we get a reason:'auto-save' passed in, let's preserve cursor positions.
cursors = editor.getSelections().map(s => new Position(s.positionLineNumber, s.positionColumn));
}
var command = new TrimTrailingWhitespaceCommand(editor.getSelection());
var command = new TrimTrailingWhitespaceCommand(editor.getSelection(), cursors);
editor.pushUndoStop();
editor.executeCommands(this.id, [command]);
......
......@@ -14,7 +14,7 @@ import { withEditorModel } from 'vs/editor/test/common/editorTestUtils';
function assertTrimTrailingWhitespaceCommand(text: string[], expected: IIdentifiedSingleEditOperation[]): void {
return withEditorModel(text, (model) => {
var op = new TrimTrailingWhitespaceCommand(new Selection(1, 1, 1, 1));
var op = new TrimTrailingWhitespaceCommand(new Selection(1, 1, 1, 1), []);
var actual = getEditOperation(model, op);
assert.deepEqual(actual, expected);
});
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册