Skip to content

Commit

Permalink
Merge pull request #3975 from ajaxorg/do-not-throw-from-addfold
Browse files Browse the repository at this point in the history
remove unnecessary throw in addFold
  • Loading branch information
nightwing authored May 31, 2019
2 parents e06ce2b + c94ae45 commit fbe3b69
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 42 deletions.
23 changes: 12 additions & 11 deletions lib/ace/edit_session/fold.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
define(function(require, exports, module) {
"use strict";

var Range = require("../range").Range;
var RangeList = require("../range_list").RangeList;
var oop = require("../lib/oop");
/*
Expand Down Expand Up @@ -77,9 +76,6 @@ oop.inherits(Fold, RangeList);
if (this.range.isEqual(fold))
return;

if (!this.range.containsRange(fold))
throw new Error("A fold can't intersect already existing fold" + fold.range + this.range);

// transform fold to local coordinates
consumeRange(fold, this.start);

Expand All @@ -90,9 +86,14 @@ oop.inherits(Fold, RangeList);
break;
}
var afterStart = this.subFolds[i];
var firstConsumed = 0;

if (cmp == 0)
return afterStart.addSubFold(fold);
if (cmp == 0) {
if (afterStart.range.containsRange(fold))
return afterStart.addSubFold(fold);
else
firstConsumed = 1;
}

// cmp == -1
var row = fold.range.end.row, column = fold.range.end.column;
Expand All @@ -101,12 +102,12 @@ oop.inherits(Fold, RangeList);
if (cmp != 1)
break;
}
var afterEnd = this.subFolds[j];

if (cmp == 0)
throw new Error("A fold can't intersect already existing fold" + fold.range + this.range);

if (cmp == 0) j++;
var consumedFolds = this.subFolds.splice(i, j - i, fold);
var last = cmp == 0 ? consumedFolds.length - 1 : consumedFolds.length;
for (var k = firstConsumed; k < last; k++) {
fold.addSubFold(consumedFolds[k]);
}
fold.setFoldLine(this.foldLine);

return fold;
Expand Down
15 changes: 5 additions & 10 deletions lib/ace/edit_session/folding.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,14 @@ function Folding() {

var folds = foldLine.folds;
for (var i = 0; i < folds.length; i++) {
var fold = folds[i];
if (fold.range.contains(row, column)) {
if (side == 1 && fold.range.isEnd(row, column)) {
var range = folds[i].range;
if (range.contains(row, column)) {
if (side == 1 && range.isEnd(row, column) && !range.isEmpty()) {
continue;
} else if (side == -1 && fold.range.isStart(row, column)) {
} else if (side == -1 && range.isStart(row, column) && !range.isEmpty()) {
continue;
}
return fold;
return folds[i];
}
}
};
Expand Down Expand Up @@ -279,11 +279,6 @@ function Folding() {
var endRow = fold.end.row;
var endColumn = fold.end.column;

// --- Some checking ---
if (!(startRow < endRow ||
startRow == endRow && startColumn <= endColumn - 2))
throw new Error("The range has to be at least 2 characters width");

var startFold = this.getFoldAt(startRow, startColumn, 1);
var endFold = this.getFoldAt(endRow, endColumn, -1);
if (startFold && endFold == startFold)
Expand Down
52 changes: 31 additions & 21 deletions lib/ace/edit_session_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,6 @@ module.exports = {
line = lang.stringTrimRight(line);
var tokens = EditSession.prototype.$getDisplayTokens(line);
var splits = EditSession.prototype.$computeWrapSplits(tokens, wrapLimit, tabSize);
console.log("String:", line, "Result:", splits, "Expected:", assertEqual);

assert.ok(splits.length == assertEqual.length);
for (var i = 0; i < splits.length; i++) {
Expand Down Expand Up @@ -479,7 +478,6 @@ module.exports = {
"test wrapMode init has to create wrapData array": function() {
var session = new EditSession("foo bar\nfoo bar");
var editor = new Editor(new MockRenderer(), session);
var document = session.getDocument();

session.setUseWrapMode(true);
session.setWrapLimitRange(3, 3);
Expand Down Expand Up @@ -767,7 +765,7 @@ module.exports = {
session.$syncInformUndoManager();
}

var foldLines = session.$foldData, foldLine, fold, folds;
var foldLines = session.$foldData;

insert(0, 0, "\nfo0");
assert.equal(foldLines.length, 2);
Expand Down Expand Up @@ -941,31 +939,43 @@ module.exports = {
var session = createFoldTestSession();
var fold;

function tryAddFold(placeholder, range, shouldFail) {
var fail = false;
try {
fold = session.addFold(placeholder, range);
} catch (e) {
fail = true;
}
if (fail != shouldFail) {
throw new Error("Expected to get an exception");
}
function addFold(placeholder, range) {
fold = session.addFold(placeholder, range);
}

tryAddFold("foo", new Range(0, 13, 0, 17), false);
tryAddFold("foo", new Range(0, 14, 0, 18), true);
tryAddFold("foo", new Range(0, 13, 0, 18), false);
addFold("foo", new Range(0, 13, 0, 17));
addFold("foo", new Range(0, 14, 0, 18));
addFold("foo", new Range(0, 13, 0, 18));
assert.equal(session.$foldData[0].folds.length, 1);

tryAddFold("f", new Range(0, 13, 0, 18), false);
tryAddFold("foo", new Range(0, 18, 0, 21), false);
addFold("f", new Range(0, 13, 0, 18));
addFold("foo", new Range(0, 18, 0, 21));
assert.equal(session.$foldData[0].folds.length, 2);
session.removeFold(fold);

tryAddFold("foo", new Range(0, 18, 0, 22), false);
tryAddFold("foo", new Range(0, 18, 0, 19), true);
tryAddFold("foo", new Range(0, 22, 1, 10), false);
addFold("foo", new Range(0, 18, 0, 22));
addFold("foo", new Range(0, 18, 0, 19));
addFold("foo", new Range(0, 22, 1, 10));

session.unfold();
addFold("x", new Range(1, 9, 3, 15));
addFold("x", new Range(2, 9, 2, 15));
addFold("x", new Range(2, 10, 2, 18));
addFold("x", new Range(2, 10, 2, 18));
addFold("x", new Range(2, 25, 2, 27));
addFold("x", new Range(2, 28, 2, 30));
addFold("x", new Range(2, 7, 2, 29));
var folds = session.getFoldsInRange(new Range(0,0,100,100));
assert.equal(folds.length, 1);
session.expandFolds(folds);
folds = session.getFoldsInRange(new Range(0,0,100,100));
assert.equal(folds.length, 1);
session.expandFolds(folds);
folds = session.getFoldsInRange(new Range(0,0,100,100));
assert.equal(folds.length, 2);
session.expandFolds(folds);
folds = session.getFoldsInRange(new Range(0,0,100,100));
assert.equal(folds.length, 0);
},

"test add subfolds": function() {
Expand Down

0 comments on commit fbe3b69

Please sign in to comment.