MCPcopy Index your code
hub / github.com/prettydiff/prettydiff / codeBuild

Function codeBuild

api/diffview.ts:40–321  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

38 ? stringAsLines(options.diff)
39 : options.diff,
40 codeBuild = function diffview_opcodes(): opcodes {
41 const table: difftable = {},
42 one: string[] = baseTextArray,
43 two: string[] = newTextArray;
44 let lena: number = one.length,
45 lenb: number = two.length,
46 a: number = 0,
47 b: number = 0,
48 c: number = 0,
49 d: number = 0,
50 codes: opcodes = [],
51 fix = function diffview_opcodes_fix(code:codes): void {
52 let len:number = codes.length - 1,
53 prior:[string, number, number, number, number] = codes[len];
54 if (prior !== undefined) {
55 if (prior[0] === code[0]) {
56 if (code[0] === "replace" || code[0] === "equal") {
57 prior[2] = code[2];
58 prior[4] = code[4];
59 } else if (code[0] === "delete") {
60 prior[2] = code[2];
61 } else if (code[0] === "insert") {
62 prior[4] = code[4];
63 }
64 if (codes.length > 1 && prior[2] === code[2] && prior[4] === code[4]) {
65 if (prior[0] === "insert" && two[codes[codes.length - 2][4] - (prior[4] - prior[3])] === one[codes[codes.length - 2][1]]) {
66 codes.pop();
67 len = len - 1;
68 codes[len] = ["insert", -1, -1, codes[len][3], codes[len][4] - (prior[4] - prior[3])];
69 if (codes[len][4] < 0) {
70 codes[len][4] = prior[4] - prior[3];
71 }
72 do {
73 // one-sided replacement undo, more like undelete
74 table[one[c]][0] = table[one[c]][0] + 1;
75 c = c - 1;
76 } while (c > codes[codes.length - 2][2]);
77 d = codes[len][4] - 1;
78 }
79 }
80 return;
81 }
82 if (prior[0] === "insert" && prior[4] - prior[3] === 1) {
83 if (code[2] - code[1] === 1) {
84 if (code[0] === "replace") {
85 codes[len] = ["replace", code[1], code[2], prior[3], prior[4]];
86 prior = codes[len];
87 code = ["insert", -1, -2, code[3], code[4]];
88 } else if (code[0] === "delete") {
89 code = ["replace", code[1], code[2], prior[3], prior[4]];
90 codes.pop();
91 len = len - 1;
92 prior = codes[len];
93 if (codes[len][0] === "replace") {
94 prior[2] = code[2];
95 prior[4] = code[4];
96 return;
97 }

Callers 1

diffviewFunction · 0.85

Calls 8

equalityFunction · 0.85
replaceUniquesFunction · 0.85
deletionFunction · 0.85
insertionFunction · 0.85
deletionStaticFunction · 0.85
insertionStaticFunction · 0.85
replacementFunction · 0.85
fixFunction · 0.85

Tested by

no test coverage detected