diff --git a/src/bindings/em/patch.cc b/src/bindings/em/patch.cc index 2f660615..b4e9ddbb 100644 --- a/src/bindings/em/patch.cc +++ b/src/bindings/em/patch.cc @@ -36,6 +36,21 @@ Patch * deserialize(std::vector const & vec) return new Patch(vec); } +Point get_old_extent(Patch::Hunk const & hunk) +{ + return hunk.old_end.traversal(hunk.old_start); +} + +Point get_new_extent(Patch::Hunk const & hunk) +{ + return hunk.new_end.traversal(hunk.new_start); +} + +template +void hunk_set_noop(Patch::Hunk & hunk, T const &) +{ +} + EMSCRIPTEN_BINDINGS(Patch) { emscripten::class_("Patch") @@ -81,6 +96,13 @@ EMSCRIPTEN_BINDINGS(Patch) { .field("oldText", WRAP_FIELD(Patch::Hunk, old_text)) .field("newText", WRAP_FIELD(Patch::Hunk, new_text)) + // The following fields are legacy only (most notably, TextBuffer doesn't work without them) + + .field("start", WRAP_FIELD(Patch::Hunk, new_start)) + + .field("oldExtent", &get_old_extent, &hunk_set_noop) + .field("newExtent", &get_new_extent, &hunk_set_noop) + ; } diff --git a/test/js/patch.test.js b/test/js/patch.test.js index d36ad078..c8c66867 100644 --- a/test/js/patch.test.js +++ b/test/js/patch.test.js @@ -34,6 +34,18 @@ describe('Patch', function () { patch.delete(); }) + it('expose legacy fields', function () { + const patch = new Patch({ mergeAdjacentHunks: false }) + + patch.splice({row: 0, column: 10}, {row: 0, column: 0}, {row: 1, column: 5}) + patch.splice({row: 1, column: 5}, {row: 0, column: 2}, {row: 0, column: 8}) + + const hunk = patch.getHunks()[0]; + + assert.ok(hunk.oldExtent); + assert.ok(hunk.newExtent); + }) + it('honors the mergeAdjacentHunks option set to true', function () { const patch = new Patch({ mergeAdjacentHunks: true })