Skip to content

Commit d74dd23

Browse files
committed
Changeset: Replace appendATextToAssembler() with a generator
1 parent 9cd59a8 commit d74dd23

File tree

5 files changed

+26
-10
lines changed

5 files changed

+26
-10
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
* `eachAttribNumber()`
2020
* `makeAttribsString()`
2121
* `opAttributeValue()`
22+
* `appendATextToAssembler()`: Deprecated in favor of the new `opsFromAText()`
23+
generator function.
2224

2325
# 1.8.15
2426

src/node/db/Pad.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,7 @@ Pad.prototype.copyPadWithoutHistory = async function (destinationID, force) {
499499

500500
// based on Changeset.makeSplice
501501
const assem = Changeset.smartOpAssembler();
502-
Changeset.appendATextToAssembler(oldAText, assem);
502+
for (const op of Changeset.opsFromAText(oldAText)) assem.append(op);
503503
assem.endDocument();
504504

505505
// although we have instantiated the newPad with '\n', an additional '\n' is

src/static/js/Changeset.js

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1718,17 +1718,18 @@ exports.copyAText = (atext1, atext2) => {
17181718
};
17191719

17201720
/**
1721-
* Append the set of operations from atext to an assembler.
1721+
* Convert AText to a series of operations.
17221722
*
1723-
* @param {AText} atext -
1724-
* @param assem - Assembler like SmartOpAssembler TODO add desc
1723+
* @param {AText} atext - The AText to convert.
1724+
* @yields {Op}
1725+
* @returns {Generator<Op>}
17251726
*/
1726-
exports.appendATextToAssembler = (atext, assem) => {
1727+
exports.opsFromAText = function* (atext) {
17271728
// intentionally skips last newline char of atext
17281729
const iter = exports.opIterator(atext.attribs);
17291730
let lastOp = null;
17301731
while (iter.hasNext()) {
1731-
if (lastOp != null) assem.append(lastOp);
1732+
if (lastOp != null) yield lastOp;
17321733
lastOp = iter.next();
17331734
}
17341735
if (lastOp == null) return;
@@ -1741,11 +1742,24 @@ exports.appendATextToAssembler = (atext, assem) => {
17411742
const lastLineLength = atext.text.length - nextToLastNewlineEnd - 1;
17421743
lastOp.lines--;
17431744
lastOp.chars -= (lastLineLength + 1);
1744-
assem.append(lastOp);
1745+
yield copyOp(lastOp);
17451746
lastOp.lines = 0;
17461747
lastOp.chars = lastLineLength;
17471748
}
1748-
if (lastOp.chars) assem.append(lastOp);
1749+
if (lastOp.chars) yield lastOp;
1750+
};
1751+
1752+
/**
1753+
* Append the set of operations from atext to an assembler.
1754+
*
1755+
* @deprecated Use `opsFromAText` instead.
1756+
* @param {AText} atext -
1757+
* @param assem - Assembler like SmartOpAssembler TODO add desc
1758+
*/
1759+
exports.appendATextToAssembler = (atext, assem) => {
1760+
padutils.warnWithStack(
1761+
'Changeset.appendATextToAssembler() is deprecated; use Changeset.opsFromAText() instead');
1762+
for (const op of exports.opsFromAText(atext)) assem.append(op);
17491763
};
17501764

17511765
/**

src/static/js/ace2_inner.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -530,7 +530,7 @@ function Ace2Inner(editorInfo, cssManagers) {
530530
o.chars = lastLineLength;
531531
o.lines = 0;
532532
assem.append(o);
533-
Changeset.appendATextToAssembler(atext, assem);
533+
for (const op of Changeset.opsFromAText(atext)) assem.append(op);
534534
const newLen = oldLen + assem.getLengthChange();
535535
const changeset = Changeset.checkRep(
536536
Changeset.pack(oldLen, newLen, assem.toString(), atext.text.slice(0, -1)));

src/tests/frontend/specs/easysync.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -745,7 +745,7 @@ describe('easysync', function () {
745745
const testAppendATextToAssembler = (testId, atext, correctOps) => {
746746
it(`testAppendATextToAssembler#${testId}`, async function () {
747747
const assem = Changeset.smartOpAssembler();
748-
Changeset.appendATextToAssembler(atext, assem);
748+
for (const op of Changeset.opsFromAText(atext)) assem.append(op);
749749
expect(assem.toString()).to.equal(correctOps);
750750
});
751751
};

0 commit comments

Comments
 (0)