fix trimTrailingSpace on save with multiple cursors

pull/282/head
nightwing 2016-03-01 10:06:30 +00:00
rodzic 22f777e408
commit 6862b66d21
2 zmienionych plików z 89 dodań i 7 usunięć

Wyświetl plik

@ -127,10 +127,20 @@ exports.trimTrailingSpace = function(session, options) {
var lines = doc.getAllLines();
var min = options && options.trimEmpty ? -1 : 0;
var cursors = session.selection.rangeCount
? session.selection.ranges.map(function(x) { return x.cursor; })
: [session.selection.getCursor()];
var ci = options && options.keepCursorPosition ? 0 : -1;
var cursors = [], ci = -1;
if (options && options.keepCursorPosition) {
if (session.selection.rangeCount) {
session.selection.rangeList.ranges.forEach(function(x, i, ranges) {
var next = ranges[i + 1]
if (next && next.cursor.row == x.cursor.row)
return;
cursors.push(x.cursor);
});
} else {
cursors.push(session.selection.getCursor());
}
ci = 0;
}
var cursorRow = cursors[ci] && cursors[ci].row;
for (var i = 0, l=lines.length; i < l; i++) {
@ -139,7 +149,7 @@ exports.trimTrailingSpace = function(session, options) {
if (i == cursorRow) {
if (index < cursors[ci].column)
index = min;
index = cursors[ci].column;
ci++;
cursorRow = cursors[ci] ? cursors[ci].row : -1;
}

Wyświetl plik

@ -1,13 +1,14 @@
if (typeof process !== "undefined") {
require("amd-loader");
require("../test/mockdom");
}
define(function(require, exports, module) {
"use strict";
require("../multi_select");
var assert = require("assert");
var EditSession = require("../edit_session").EditSession;
var UndoManager = require("../undomanager").UndoManager;
var whitespace = require("./whitespace");
// Execution ORDER: test.setUpSuite, setUp, testFn, tearDown, test.tearDownSuite
@ -111,8 +112,79 @@ module.exports = {
assert.equal(indent.length, 1);
next();
}
},
"test trimTrailingSpace": function(next) {
var session = new EditSession([
"a",
"\t b \t",
" ",
"\t",
"\t\tx\t\t",
" ",
" "
]);
session.setUndoManager(new UndoManager());
function testOne(value, options) {
console.log(JSON.stringify(session.getValue()))
whitespace.trimTrailingSpace(session, options);
assert.equal(value, session.getValue());
session.markUndoGroup();
session.getUndoManager().undo();
}
testOne("a\n\t b\n \n\t\n\t\tx\n \n ")
testOne("a\n\t b\n\n\n\t\tx\n\n", {
trimEmpty: true
});
session.selection.fromJSON([{
start: {row:2,column:3},
end: {row:4,column:4}
}]);
testOne("a\n\t b\n\n\n\t\tx\t\n\n", {
keepCursorPosition: true,
trimEmpty: true
});
session.selection.fromJSON([{
start: {row:2,column:3},
end: {row:4,column:4},
isBackwards: true
}]);
testOne("a\n\t b\n \n\n\t\tx\n\n", {
keepCursorPosition: true,
trimEmpty: true
});
session.selection.$initRangeList();
session.selection.fromJSON([{
start: {row:2, column:3},
end: {row:2,column:3}
}, {
start: {row:1, column:1},
end: {row:1, column:1}
}, {
start: {row:2,column:2},
end: {row:2,column:2}
}, {
start: {row:0,column:5},
end: {row:0,column:5},
isBackwards:false
}, {
start: {row:6,column:1},
end: {row:6,column:1},
isBackwards:false
}]);
testOne("a\n\t b\n \n\n\t\tx\n\n ", {
trimEmpty: true,
keepCursorPosition: true
});
next();
},
};
});