MCPcopy Index your code
hub / github.com/midrender/revideo / defaultDiffer

Function defaultDiffer

packages/2d/src/lib/code/CodeDiffer.ts:32–78  ·  view source on GitHub ↗
(
  from: CodeScope,
  to: CodeScope,
  tokenize: CodeTokenizer,
)

Source from the content-addressed store, hash-verified

30 * @param tokenize - The inherited tokenizer to use.
31 */
32export function defaultDiffer(
33 from: CodeScope,
34 to: CodeScope,
35 tokenize: CodeTokenizer,
36) {
37 const fromString = resolveScope(from, false);
38 const toString = resolveScope(to, true);
39
40 const diff = patienceDiff(tokenize(fromString), tokenize(toString));
41
42 const fragments: CodeTag[] = [];
43 let before = '';
44 let after = '';
45 let lastAdded = false;
46 const flush = () => {
47 if (before !== '' || after !== '') {
48 fragments.push({
49 before,
50 after,
51 });
52 before = '';
53 after = '';
54 }
55 };
56
57 for (const line of diff.lines) {
58 if (line.aIndex === -1) {
59 if (after !== '' && !lastAdded) {
60 flush();
61 }
62 lastAdded = true;
63 after += line.line;
64 } else if (line.bIndex === -1) {
65 if (before !== '' && lastAdded) {
66 flush();
67 }
68 lastAdded = false;
69 before += line.line;
70 } else {
71 flush();
72 fragments.push(line.line);
73 }
74 }
75 flush();
76
77 return fragments;
78}

Callers 1

tweenerMethod · 0.90

Calls 3

resolveScopeFunction · 0.90
patienceDiffFunction · 0.90
flushFunction · 0.85

Tested by

no test coverage detected