computeMinimalDocumentChange()
function computeMinimalDocumentChange(current, next): DocumentChangeSpec | null;
Defined in: document-sync.ts:54
计算把 current 变成 next 所需的最小替换区间。
跳过公共前缀与公共后缀,只替换真正变化的那一段;两者相同时返回 null,
调用方据此完全跳过事务。
Parameters
| Parameter | Type | Description |
|---|---|---|
current | string | 编辑器当前文档内容 |
next | string | 宿主希望写入的新内容 |
Returns
DocumentChangeSpec | null
最小替换区间;无变化时为 null
Remarks
只做前后缀比对,不做逐行 diff:宿主回写的典型形态是「追加一段」「改中间一小块」 「整体格式化」,前后缀已经能把前两种收敛到极小区间;而整体格式化本就没有可保留的区间。 复杂 diff 会带来更大的实现与性能风险,收益却只在极少数场景。
调用方还须给事务加上 Transaction.addToHistory.of(false) ——
最小差量只解决光标问题,不会阻止程序写入进入 undo 栈。
Example
computeMinimalDocumentChange('hello world', 'hello brave world');
// `{ from: 6, to: 6, insert: 'brave ' }`
computeMinimalDocumentChange('same', 'same'); // null