Skip to content

Commit 8b5bcf4

Browse files
committed
Changeset: Replace appendATextToAssembler() with a generator
1 parent b51bf7e commit 8b5bcf4

File tree

5 files changed

+25
-11
lines changed

5 files changed

+25
-11
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
function instead.
4040
* The `mergingOpAssembler()` function is deprecated; use the new
4141
`squashOps()` generator function with `serializeOps()` instead.
42+
* The `appendATextToAssembler()` function is deprecated; use the new
43+
`opsFromAText()` generator function instead.
4244

4345
### Notable enhancements
4446

src/node/db/Pad.js

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

491491
// based on Changeset.makeSplice
492492
const assem = Changeset.smartOpAssembler();
493-
Changeset.appendATextToAssembler(oldAText, assem);
493+
for (const op of Changeset.opsFromAText(oldAText)) assem.append(op);
494494
assem.endDocument();
495495

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

src/static/js/Changeset.js

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1806,16 +1806,15 @@ exports.copyAText = (atext1, atext2) => {
18061806
};
18071807

18081808
/**
1809-
* Append the set of operations from atext to an assembler.
1810-
*
1811-
* @param {AText} atext -
1812-
* @param assem - Assembler like SmartOpAssembler TODO add desc
1809+
* Convert AText to a series of operations.
1810+
* @param {AText} atext - The AText to convert.
1811+
* @yields {Op}
18131812
*/
1814-
exports.appendATextToAssembler = (atext, assem) => {
1813+
exports.opsFromAText = function* (atext) {
18151814
// intentionally skips last newline char of atext
18161815
let lastOp = null;
18171816
for (const op of new exports.OpIter(atext.attribs)) {
1818-
if (lastOp != null) assem.append(lastOp);
1817+
if (lastOp != null) yield lastOp;
18191818
lastOp = op;
18201819
}
18211820
if (lastOp == null) return;
@@ -1828,11 +1827,24 @@ exports.appendATextToAssembler = (atext, assem) => {
18281827
const lastLineLength = atext.text.length - nextToLastNewlineEnd - 1;
18291828
lastOp.lines--;
18301829
lastOp.chars -= (lastLineLength + 1);
1831-
assem.append(lastOp);
1830+
yield copyOp(lastOp);
18321831
lastOp.lines = 0;
18331832
lastOp.chars = lastLineLength;
18341833
}
1835-
if (lastOp.chars) assem.append(lastOp);
1834+
if (lastOp.chars) yield lastOp;
1835+
};
1836+
1837+
/**
1838+
* Append the set of operations from atext to an assembler.
1839+
*
1840+
* @deprecated Use `opsFromAText` instead.
1841+
* @param {AText} atext -
1842+
* @param assem - Assembler like SmartOpAssembler TODO add desc
1843+
*/
1844+
exports.appendATextToAssembler = (atext, assem) => {
1845+
warnDeprecated(
1846+
'Changeset.appendATextToAssembler() is deprecated; use Changeset.opsFromAText() instead');
1847+
for (const op of exports.opsFromAText(atext)) assem.append(op);
18361848
};
18371849

18381850
/**

src/static/js/ace2_inner.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,7 @@ function Ace2Inner(editorInfo, cssManagers) {
538538
o.chars = lastLineLength;
539539
o.lines = 0;
540540
assem.append(o);
541-
Changeset.appendATextToAssembler(atext, assem);
541+
for (const op of Changeset.opsFromAText(atext)) assem.append(op);
542542
const newLen = oldLen + assem.getLengthChange();
543543
const changeset = Changeset.checkRep(
544544
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
@@ -741,7 +741,7 @@ describe('easysync', function () {
741741
const testAppendATextToAssembler = (testId, atext, correctOps) => {
742742
it(`testAppendATextToAssembler#${testId}`, async function () {
743743
const assem = Changeset.smartOpAssembler();
744-
Changeset.appendATextToAssembler(atext, assem);
744+
for (const op of Changeset.opsFromAText(atext)) assem.append(op);
745745
expect(assem.toString()).to.equal(correctOps);
746746
});
747747
};

0 commit comments

Comments
 (0)