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

Function fix

api/diffview.ts:51–182  ·  view source on GitHub ↗
(code:codes)

Source from the content-addressed store, hash-verified

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 }
98 }
99 } else if (code[0] === "delete") {
100 codes[len] = ["replace", code[1], code[1] + 1, prior[3], prior[4]];
101 prior = codes[len];
102 code[1] = code[1] + 1;
103 } else if (code[0] === "replace") {
104 codes[len] = ["replace", code[1], code[1] + 1, prior[3], prior[4]];
105 prior = codes[len];
106 c = (prior[2] > 0)
107 ? prior[2]
108 : 0;

Callers 8

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

Calls

no outgoing calls

Tested by

no test coverage detected