@gitwand/core 3.2.0 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/corpus.d.ts.map +1 -1
- package/dist/__tests__/corpus.js +29 -0
- package/dist/__tests__/corpus.js.map +1 -1
- package/dist/__tests__/golden-funnel.test.d.ts +44 -0
- package/dist/__tests__/golden-funnel.test.d.ts.map +1 -0
- package/dist/__tests__/golden-funnel.test.js +100 -0
- package/dist/__tests__/golden-funnel.test.js.map +1 -0
- package/dist/__tests__/imports-extended.test.js +21 -0
- package/dist/__tests__/imports-extended.test.js.map +1 -1
- package/dist/__tests__/llm-refactoring-coupling.test.d.ts +16 -0
- package/dist/__tests__/llm-refactoring-coupling.test.d.ts.map +1 -0
- package/dist/__tests__/llm-refactoring-coupling.test.js +100 -0
- package/dist/__tests__/llm-refactoring-coupling.test.js.map +1 -0
- package/dist/__tests__/patterns/insertion-at-boundary.test.js +35 -0
- package/dist/__tests__/patterns/insertion-at-boundary.test.js.map +1 -1
- package/dist/__tests__/patterns/token-level-merge.test.d.ts +2 -0
- package/dist/__tests__/patterns/token-level-merge.test.d.ts.map +1 -0
- package/dist/__tests__/patterns/token-level-merge.test.js +117 -0
- package/dist/__tests__/patterns/token-level-merge.test.js.map +1 -0
- package/dist/__tests__/patterns/value-only-change.test.js +134 -0
- package/dist/__tests__/patterns/value-only-change.test.js.map +1 -1
- package/dist/__tests__/patterns/whitespace-only.test.js +57 -0
- package/dist/__tests__/patterns/whitespace-only.test.js.map +1 -1
- package/dist/__tests__/refactoring/refactoring-pipeline.test.js +36 -0
- package/dist/__tests__/refactoring/refactoring-pipeline.test.js.map +1 -1
- package/dist/__tests__/regression-guard-tiers.test.d.ts +33 -0
- package/dist/__tests__/regression-guard-tiers.test.d.ts.map +1 -0
- package/dist/__tests__/regression-guard-tiers.test.js +81 -0
- package/dist/__tests__/regression-guard-tiers.test.js.map +1 -0
- package/dist/__tests__/resolver.test.js +18 -0
- package/dist/__tests__/resolver.test.js.map +1 -1
- package/dist/__tests__/resolvers/json.test.js +12 -3
- package/dist/__tests__/resolvers/json.test.js.map +1 -1
- package/dist/__tests__/stats/tiers.test.d.ts +16 -0
- package/dist/__tests__/stats/tiers.test.d.ts.map +1 -0
- package/dist/__tests__/stats/tiers.test.js +97 -0
- package/dist/__tests__/stats/tiers.test.js.map +1 -0
- package/dist/__tests__/types.test.d.ts +2 -0
- package/dist/__tests__/types.test.d.ts.map +1 -0
- package/dist/__tests__/types.test.js +26 -0
- package/dist/__tests__/types.test.js.map +1 -0
- package/dist/classifier.d.ts.map +1 -1
- package/dist/classifier.js +7 -0
- package/dist/classifier.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/patterns/token-level-merge.d.ts +6 -0
- package/dist/patterns/token-level-merge.d.ts.map +1 -0
- package/dist/patterns/token-level-merge.js +149 -0
- package/dist/patterns/token-level-merge.js.map +1 -0
- package/dist/patterns/utils.d.ts +38 -1
- package/dist/patterns/utils.d.ts.map +1 -1
- package/dist/patterns/utils.js +171 -9
- package/dist/patterns/utils.js.map +1 -1
- package/dist/patterns/value-only-change.d.ts.map +1 -1
- package/dist/patterns/value-only-change.js +9 -5
- package/dist/patterns/value-only-change.js.map +1 -1
- package/dist/patterns/whitespace-only.d.ts.map +1 -1
- package/dist/patterns/whitespace-only.js +11 -2
- package/dist/patterns/whitespace-only.js.map +1 -1
- package/dist/refactoring/detect.d.ts.map +1 -1
- package/dist/refactoring/detect.js +72 -1
- package/dist/refactoring/detect.js.map +1 -1
- package/dist/resolver/assemble.d.ts.map +1 -1
- package/dist/resolver/assemble.js +40 -4
- package/dist/resolver/assemble.js.map +1 -1
- package/dist/resolver/index.d.ts.map +1 -1
- package/dist/resolver/index.js +8 -1
- package/dist/resolver/index.js.map +1 -1
- package/dist/resolvers/imports.d.ts.map +1 -1
- package/dist/resolvers/imports.js +20 -0
- package/dist/resolvers/imports.js.map +1 -1
- package/dist/stats/tiers.d.ts +30 -0
- package/dist/stats/tiers.d.ts.map +1 -0
- package/dist/stats/tiers.js +57 -0
- package/dist/stats/tiers.js.map +1 -0
- package/dist/types.d.ts +30 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { makeScore, scopeImpact, tokenizeLine } from "./utils.js";
|
|
2
|
+
/**
|
|
3
|
+
* Cache module-level, keyed par référence sur le dernier hunk calculé.
|
|
4
|
+
*
|
|
5
|
+
* `detect()`, `confidence()` et `explanation()` reçoivent tous le même hunk
|
|
6
|
+
* dans le flux normal (classifier.ts appelle les trois coup sur coup sur la
|
|
7
|
+
* même référence `ClassifyInput`), donc le cache est un hit à chaque fois en
|
|
8
|
+
* pratique. Mais contrairement à un simple "dernier résultat calculé" (qui
|
|
9
|
+
* suppose implicitement qu'aucun autre appel à detect() ne s'intercale entre
|
|
10
|
+
* temps sur un hunk différent), la clé sur la référence rend le cache
|
|
11
|
+
* auto-correcteur : un hunk différent en entrée déclenche un recalcul au lieu
|
|
12
|
+
* de retourner silencieusement le résultat d'un autre hunk.
|
|
13
|
+
*/
|
|
14
|
+
let _lastInput = null;
|
|
15
|
+
let _lastResult = null;
|
|
16
|
+
function computeTokenMergeCached(h) {
|
|
17
|
+
if (_lastInput === h)
|
|
18
|
+
return _lastResult;
|
|
19
|
+
_lastInput = h;
|
|
20
|
+
_lastResult = computeTokenMerge(h);
|
|
21
|
+
return _lastResult;
|
|
22
|
+
}
|
|
23
|
+
/** Retourne le dernier résultat mis en cache (lu par classifier.ts pour peupler `trace.tokenMergeTrace`). */
|
|
24
|
+
export function getLastTokenMergeResult() {
|
|
25
|
+
return _lastResult;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Tente de résoudre une seule ligne en conflit (base/ours/theirs différents).
|
|
29
|
+
* Retourne le detail de résolution si réussi, `null` si conflit réel ou tokens non alignés.
|
|
30
|
+
*/
|
|
31
|
+
function resolveConflictedLine(lineIndex, base, ours, theirs) {
|
|
32
|
+
const baseTokens = tokenizeLine(base);
|
|
33
|
+
const oursTokens = tokenizeLine(ours);
|
|
34
|
+
const theirsTokens = tokenizeLine(theirs);
|
|
35
|
+
if (oursTokens.length !== baseTokens.length || theirsTokens.length !== baseTokens.length) {
|
|
36
|
+
return null; // Pas de réalignement — hors périmètre v1.
|
|
37
|
+
}
|
|
38
|
+
const merged = [];
|
|
39
|
+
const oursTokenIndices = [];
|
|
40
|
+
const theirsTokenIndices = [];
|
|
41
|
+
for (let j = 0; j < baseTokens.length; j++) {
|
|
42
|
+
const oursChanged = oursTokens[j] !== baseTokens[j];
|
|
43
|
+
const theirsChanged = theirsTokens[j] !== baseTokens[j];
|
|
44
|
+
if (oursChanged && theirsChanged) {
|
|
45
|
+
if (oursTokens[j] !== theirsTokens[j]) {
|
|
46
|
+
return null; // Vrai conflit sur ce token — la ligne échoue.
|
|
47
|
+
}
|
|
48
|
+
merged.push(oursTokens[j]); // Même changement des deux côtés.
|
|
49
|
+
}
|
|
50
|
+
else if (oursChanged) {
|
|
51
|
+
merged.push(oursTokens[j]);
|
|
52
|
+
oursTokenIndices.push(j);
|
|
53
|
+
}
|
|
54
|
+
else if (theirsChanged) {
|
|
55
|
+
merged.push(theirsTokens[j]);
|
|
56
|
+
theirsTokenIndices.push(j);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
merged.push(baseTokens[j]);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
lineIndex,
|
|
64
|
+
resolvedBy: "pass2",
|
|
65
|
+
resolvedLine: merged.join(""),
|
|
66
|
+
oursTokenIndices,
|
|
67
|
+
theirsTokenIndices,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Calcule la proposition complète de fusion pour le hunk, ou `null` si une
|
|
72
|
+
* ligne au moins résiste (échec global — pas de résolution partielle).
|
|
73
|
+
*/
|
|
74
|
+
function computeTokenMerge(h) {
|
|
75
|
+
if (h.baseLines.length === 0)
|
|
76
|
+
return null; // requires: diff3
|
|
77
|
+
if (h.oursLines.length !== h.baseLines.length || h.theirsLines.length !== h.baseLines.length) {
|
|
78
|
+
return null; // Pas d'alignement 1:1 possible.
|
|
79
|
+
}
|
|
80
|
+
const mergedLines = [];
|
|
81
|
+
const lineDetails = [];
|
|
82
|
+
let pass1Count = 0;
|
|
83
|
+
let pass2Count = 0;
|
|
84
|
+
for (let i = 0; i < h.baseLines.length; i++) {
|
|
85
|
+
const base = h.baseLines[i];
|
|
86
|
+
const ours = h.oursLines[i];
|
|
87
|
+
const theirs = h.theirsLines[i];
|
|
88
|
+
if (ours === base && theirs === base) {
|
|
89
|
+
mergedLines.push(base); // Contexte pur.
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
if (ours === base && theirs !== base) {
|
|
93
|
+
mergedLines.push(theirs);
|
|
94
|
+
lineDetails.push({ lineIndex: i, resolvedBy: "pass1", resolvedLine: theirs });
|
|
95
|
+
pass1Count++;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (theirs === base && ours !== base) {
|
|
99
|
+
mergedLines.push(ours);
|
|
100
|
+
lineDetails.push({ lineIndex: i, resolvedBy: "pass1", resolvedLine: ours });
|
|
101
|
+
pass1Count++;
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
// Les deux côtés diffèrent de la base sur cette ligne — passe 2.
|
|
105
|
+
const resolved = resolveConflictedLine(i, base, ours, theirs);
|
|
106
|
+
if (resolved === null)
|
|
107
|
+
return null; // Échec global.
|
|
108
|
+
mergedLines.push(resolved.resolvedLine);
|
|
109
|
+
lineDetails.push(resolved);
|
|
110
|
+
pass2Count++;
|
|
111
|
+
}
|
|
112
|
+
if (pass2Count === 0 && pass1Count === 0)
|
|
113
|
+
return null; // Rien à proposer.
|
|
114
|
+
return { mergedLines, pass1Count, pass2Count, lineDetails };
|
|
115
|
+
}
|
|
116
|
+
const tokenLevelMerge = {
|
|
117
|
+
type: "token_level_merge",
|
|
118
|
+
priority: 65,
|
|
119
|
+
requires: "diff3",
|
|
120
|
+
detect(h) {
|
|
121
|
+
return computeTokenMergeCached(h) !== null;
|
|
122
|
+
},
|
|
123
|
+
confidence(h) {
|
|
124
|
+
const result = computeTokenMergeCached(h);
|
|
125
|
+
const totalLines = result ? result.mergedLines.length : 0;
|
|
126
|
+
// dataRisk volontairement non-nul : ce pattern ne doit JAMAIS s'auto-appliquer,
|
|
127
|
+
// quel que soit le score obtenu (cf. resolver/assemble.ts — case dédié).
|
|
128
|
+
return makeScore(70, 38, scopeImpact(totalLines), [
|
|
129
|
+
"Décomposition ligne-par-ligne et token-level réussie",
|
|
130
|
+
], [
|
|
131
|
+
"Résolution proposée — jamais auto-appliquée, confirmation utilisateur requise",
|
|
132
|
+
]);
|
|
133
|
+
},
|
|
134
|
+
explanation(h) {
|
|
135
|
+
const result = computeTokenMergeCached(h);
|
|
136
|
+
if (!result)
|
|
137
|
+
return "Fusion token-level proposée.";
|
|
138
|
+
const { pass1Count, pass2Count } = result;
|
|
139
|
+
return `Fusion proposée : ${pass1Count} ligne${pass1Count === 1 ? "" : "s"} résolue${pass1Count === 1 ? "" : "s"} ligne-par-ligne, ${pass2Count} ligne${pass2Count === 1 ? "" : "s"} fusionnée${pass2Count === 1 ? "" : "s"} token-par-token. Confirmation requise avant application.`;
|
|
140
|
+
},
|
|
141
|
+
passReason(_h) {
|
|
142
|
+
return "Décomposition ligne-par-ligne + diff token-level réussis sur toutes les lignes du hunk.";
|
|
143
|
+
},
|
|
144
|
+
failReason(_h) {
|
|
145
|
+
return "Au moins une ligne résiste (vrai conflit token-level ou désalignement de tokens) — pas de résolution partielle.";
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
export default tokenLevelMerge;
|
|
149
|
+
//# sourceMappingURL=token-level-merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-level-merge.js","sourceRoot":"","sources":["../../src/patterns/token-level-merge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAElE;;;;;;;;;;;GAWG;AACH,IAAI,UAAU,GAAyB,IAAI,CAAC;AAC5C,IAAI,WAAW,GAA2B,IAAI,CAAC;AAE/C,SAAS,uBAAuB,CAAC,CAAgB;IAC/C,IAAI,UAAU,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IACzC,UAAU,GAAG,CAAC,CAAC;IACf,WAAW,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;IACnC,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,6GAA6G;AAC7G,MAAM,UAAU,uBAAuB;IACrC,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAC5B,SAAiB,EACjB,IAAY,EACZ,IAAY,EACZ,MAAc;IAEd,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAE1C,IAAI,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;QACzF,OAAO,IAAI,CAAC,CAAC,2CAA2C;IAC1D,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,MAAM,kBAAkB,GAAa,EAAE,CAAC;IAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC;QAExD,IAAI,WAAW,IAAI,aAAa,EAAE,CAAC;YACjC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtC,OAAO,IAAI,CAAC,CAAC,+CAA+C;YAC9D,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kCAAkC;QAChE,CAAC;aAAM,IAAI,WAAW,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3B,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,aAAa,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO;QACL,SAAS;QACT,UAAU,EAAE,OAAO;QACnB,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,gBAAgB;QAChB,kBAAkB;KACnB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,CAAgB;IACzC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,kBAAkB;IAC7D,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QAC7F,OAAO,IAAI,CAAC,CAAC,iCAAiC;IAChD,CAAC;IAED,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAEhC,IAAI,IAAI,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACrC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB;YACxC,SAAS;QACX,CAAC;QACD,IAAI,IAAI,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACrC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzB,WAAW,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;YAC9E,UAAU,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,MAAM,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACrC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,WAAW,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5E,UAAU,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QAED,iEAAiE;QACjE,MAAM,QAAQ,GAAG,qBAAqB,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9D,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC,CAAC,gBAAgB;QACpD,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,UAAU,EAAE,CAAC;IACf,CAAC;IAED,IAAI,UAAU,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,mBAAmB;IAE1E,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AAC9D,CAAC;AAED,MAAM,eAAe,GAAkB;IACrC,IAAI,EAAE,mBAAmB;IACzB,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,OAAO;IAEjB,MAAM,CAAC,CAAgB;QACrB,OAAO,uBAAuB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC7C,CAAC;IAED,UAAU,CAAC,CAAgB;QACzB,MAAM,MAAM,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,gFAAgF;QAChF,yEAAyE;QACzE,OAAO,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,CAAC,UAAU,CAAC,EAAE;YAChD,sDAAsD;SACvD,EAAE;YACD,+EAA+E;SAChF,CAAC,CAAC;IACL,CAAC;IAED,WAAW,CAAC,CAAgB;QAC1B,MAAM,MAAM,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM;YAAE,OAAO,8BAA8B,CAAC;QACnD,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;QAC1C,OAAO,qBAAqB,UAAU,SAAS,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,WAAW,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,qBAAqB,UAAU,SAAS,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,aAAa,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,2DAA2D,CAAC;IACzR,CAAC;IAED,UAAU,CAAC,EAAiB;QAC1B,OAAO,yFAAyF,CAAC;IACnG,CAAC;IAED,UAAU,CAAC,EAAiB;QAC1B,OAAO,iHAAiH,CAAC;IAC3H,CAAC;CACF,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
package/dist/patterns/utils.d.ts
CHANGED
|
@@ -52,6 +52,20 @@ export declare function normalizeForWhitespaceCheck(lines: string[]): string;
|
|
|
52
52
|
* Tabs → espaces, trim, collapse.
|
|
53
53
|
*/
|
|
54
54
|
export declare function normalizeLine(line: string): string;
|
|
55
|
+
/**
|
|
56
|
+
* Extrait la séquence des contenus de string literals (`"…"`, `'…'`, `` `…` ``)
|
|
57
|
+
* d'un bloc de lignes, dans l'ordre. Scan naïf caractère par caractère avec
|
|
58
|
+
* gestion de l'échappement `\"` — pas un vrai lexer (un apostrophe de prose
|
|
59
|
+
* dans un commentaire ouvre une "string"), mais les deux côtés d'un conflit
|
|
60
|
+
* subissent la même approximation : la comparaison des séquences reste
|
|
61
|
+
* équitable, et l'erreur pousse vers le refus de résoudre (direction sûre).
|
|
62
|
+
*
|
|
63
|
+
* Utilisé par whitespace_only : le whitespace À L'INTÉRIEUR d'une string est
|
|
64
|
+
* de la donnée, pas de la mise en forme — deux blocs "identiques modulo
|
|
65
|
+
* whitespace" mais dont les strings diffèrent ne doivent pas être résolus
|
|
66
|
+
* en préférant silencieusement un côté.
|
|
67
|
+
*/
|
|
68
|
+
export declare function extractQuotedSegments(lines: string[]): string[];
|
|
55
69
|
/** Regex qui matche les tokens "volatiles" : hashes, UUIDs, semver, timestamps, URLs */
|
|
56
70
|
export declare const VOLATILE_PATTERNS: RegExp[];
|
|
57
71
|
/**
|
|
@@ -62,13 +76,36 @@ export declare function isPairwiseVolatile(a: string, b: string): boolean;
|
|
|
62
76
|
* Tokenize une ligne en parties structurelles et valeurs.
|
|
63
77
|
*/
|
|
64
78
|
export declare function tokenizeLine(line: string): string[];
|
|
79
|
+
/**
|
|
80
|
+
* Variante quote-aware de tokenizeLine : le contenu d'une string literal est
|
|
81
|
+
* gardé ATOMIQUE (un seul token), quotes émises comme délimiteurs séparés.
|
|
82
|
+
*
|
|
83
|
+
* Indispensable pour les valeurs volatiles multi-mots : `'2026-07-06 11:42:00'`
|
|
84
|
+
* splitté sur l'espace donne deux fragments dont aucun ne matche la regex
|
|
85
|
+
* datetime — le cas résiduel le plus récurrent du corpus réel (config PHP
|
|
86
|
+
* `last_update`). Utilisé par detectValueOnlyChange/pickNewerVersionSide ;
|
|
87
|
+
* token_level_merge garde volontairement tokenizeLine (fusion INTRA-string
|
|
88
|
+
* voulue là-bas, cf. ses fixtures Tailwind).
|
|
89
|
+
*/
|
|
90
|
+
export declare function tokenizeLineQuoteAware(line: string): string[];
|
|
65
91
|
/**
|
|
66
92
|
* Détecte si deux ensembles de lignes ne diffèrent que par des valeurs atomiques.
|
|
67
93
|
* Retourne un résultat de classification ou null si non applicable.
|
|
68
94
|
*/
|
|
69
|
-
export declare function detectValueOnlyChange(oursLines: string[], theirsLines: string[]): {
|
|
95
|
+
export declare function detectValueOnlyChange(oursLines: string[], theirsLines: string[], hasBase?: boolean): {
|
|
70
96
|
confidenceScore: ConfidenceScore;
|
|
71
97
|
explanation: string;
|
|
72
98
|
traceReason: string;
|
|
73
99
|
} | null;
|
|
100
|
+
/**
|
|
101
|
+
* Si TOUTES les paires de tokens qui diffèrent entre ours et theirs sont des
|
|
102
|
+
* semver comparables ET que le même côté est ≥ sur chaque paire (avec au
|
|
103
|
+
* moins un >), retourne ce côté. Sinon null (résolution par politique).
|
|
104
|
+
*
|
|
105
|
+
* Consommé par assembleResolution (value_only_change) : « accepter la version
|
|
106
|
+
* la plus récente » n'est déterministe que quand les valeurs sont ORDONNABLES
|
|
107
|
+
* (semver, ou datetime ISO où l'ordre lexicographique est chronologique) —
|
|
108
|
+
* pour les hashes et autres valeurs ambiguës on retombe sur la politique.
|
|
109
|
+
*/
|
|
110
|
+
export declare function pickNewerSemverSide(oursLines: string[], theirsLines: string[]): "ours" | "theirs" | null;
|
|
74
111
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/patterns/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI/D;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAKxD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,SAAS,CACvB,kBAAkB,EAAE,MAAM,EAC1B,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAAE,EAClB,SAAS,EAAE,MAAM,EAAE,EACnB,aAAa,SAAI,EACjB,gBAAgB,SAAI,EACpB,kBAAkB,SAAI,EACtB,aAAa,SAAI,GAChB,eAAe,CA8BjB;AAID;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAOnE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAID,wFAAwF;AACxF,eAAO,MAAM,iBAAiB,UAQ7B,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAqChE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEnD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EAAE,EACnB,WAAW,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/patterns/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI/D;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAKxD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,SAAS,CACvB,kBAAkB,EAAE,MAAM,EAC1B,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAAE,EAClB,SAAS,EAAE,MAAM,EAAE,EACnB,aAAa,SAAI,EACjB,gBAAgB,SAAI,EACpB,kBAAkB,SAAI,EACtB,aAAa,SAAI,GAChB,eAAe,CA8BjB;AAID;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAOnE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CA0B/D;AAID,wFAAwF;AACxF,eAAO,MAAM,iBAAiB,UAQ7B,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAqChE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEnD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAoC7D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EAAE,EACnB,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,UAAQ,GACd;IAAE,eAAe,EAAE,eAAe,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAqEvF;AAyBD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EAAE,EACnB,WAAW,EAAE,MAAM,EAAE,GACpB,MAAM,GAAG,QAAQ,GAAG,IAAI,CA2B1B"}
|
package/dist/patterns/utils.js
CHANGED
|
@@ -109,6 +109,46 @@ export function normalizeForWhitespaceCheck(lines) {
|
|
|
109
109
|
export function normalizeLine(line) {
|
|
110
110
|
return line.replace(/\t/g, " ").trim().replace(/ +/g, " ");
|
|
111
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* Extrait la séquence des contenus de string literals (`"…"`, `'…'`, `` `…` ``)
|
|
114
|
+
* d'un bloc de lignes, dans l'ordre. Scan naïf caractère par caractère avec
|
|
115
|
+
* gestion de l'échappement `\"` — pas un vrai lexer (un apostrophe de prose
|
|
116
|
+
* dans un commentaire ouvre une "string"), mais les deux côtés d'un conflit
|
|
117
|
+
* subissent la même approximation : la comparaison des séquences reste
|
|
118
|
+
* équitable, et l'erreur pousse vers le refus de résoudre (direction sûre).
|
|
119
|
+
*
|
|
120
|
+
* Utilisé par whitespace_only : le whitespace À L'INTÉRIEUR d'une string est
|
|
121
|
+
* de la donnée, pas de la mise en forme — deux blocs "identiques modulo
|
|
122
|
+
* whitespace" mais dont les strings diffèrent ne doivent pas être résolus
|
|
123
|
+
* en préférant silencieusement un côté.
|
|
124
|
+
*/
|
|
125
|
+
export function extractQuotedSegments(lines) {
|
|
126
|
+
const text = lines.join("\n");
|
|
127
|
+
const segments = [];
|
|
128
|
+
let i = 0;
|
|
129
|
+
while (i < text.length) {
|
|
130
|
+
const ch = text[i];
|
|
131
|
+
if (ch === '"' || ch === "'" || ch === "`") {
|
|
132
|
+
const quote = ch;
|
|
133
|
+
let content = "";
|
|
134
|
+
i++;
|
|
135
|
+
while (i < text.length && text[i] !== quote) {
|
|
136
|
+
if (text[i] === "\\" && i + 1 < text.length) {
|
|
137
|
+
content += text[i] + text[i + 1];
|
|
138
|
+
i += 2;
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
content += text[i];
|
|
142
|
+
i++;
|
|
143
|
+
}
|
|
144
|
+
segments.push(content);
|
|
145
|
+
i++; // closing quote (or end of text)
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
i++;
|
|
149
|
+
}
|
|
150
|
+
return segments;
|
|
151
|
+
}
|
|
112
152
|
// ─── Détection de valeurs volatiles ──────────────────────────
|
|
113
153
|
/** Regex qui matche les tokens "volatiles" : hashes, UUIDs, semver, timestamps, URLs */
|
|
114
154
|
export const VOLATILE_PATTERNS = [
|
|
@@ -163,11 +203,63 @@ export function isPairwiseVolatile(a, b) {
|
|
|
163
203
|
export function tokenizeLine(line) {
|
|
164
204
|
return line.split(/(\s+|[{}[\](),:;"'`=<>])/);
|
|
165
205
|
}
|
|
206
|
+
/**
|
|
207
|
+
* Variante quote-aware de tokenizeLine : le contenu d'une string literal est
|
|
208
|
+
* gardé ATOMIQUE (un seul token), quotes émises comme délimiteurs séparés.
|
|
209
|
+
*
|
|
210
|
+
* Indispensable pour les valeurs volatiles multi-mots : `'2026-07-06 11:42:00'`
|
|
211
|
+
* splitté sur l'espace donne deux fragments dont aucun ne matche la regex
|
|
212
|
+
* datetime — le cas résiduel le plus récurrent du corpus réel (config PHP
|
|
213
|
+
* `last_update`). Utilisé par detectValueOnlyChange/pickNewerVersionSide ;
|
|
214
|
+
* token_level_merge garde volontairement tokenizeLine (fusion INTRA-string
|
|
215
|
+
* voulue là-bas, cf. ses fixtures Tailwind).
|
|
216
|
+
*/
|
|
217
|
+
export function tokenizeLineQuoteAware(line) {
|
|
218
|
+
const tokens = [];
|
|
219
|
+
let i = 0;
|
|
220
|
+
let plain = "";
|
|
221
|
+
const flushPlain = () => {
|
|
222
|
+
if (plain !== "") {
|
|
223
|
+
tokens.push(...plain.split(/(\s+|[{}[\](),:;=<>])/).filter((t) => t !== ""));
|
|
224
|
+
plain = "";
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
while (i < line.length) {
|
|
228
|
+
const ch = line[i];
|
|
229
|
+
if (ch === '"' || ch === "'" || ch === "`") {
|
|
230
|
+
flushPlain();
|
|
231
|
+
const quote = ch;
|
|
232
|
+
let content = "";
|
|
233
|
+
i++;
|
|
234
|
+
while (i < line.length && line[i] !== quote) {
|
|
235
|
+
if (line[i] === "\\" && i + 1 < line.length) {
|
|
236
|
+
content += line[i] + line[i + 1];
|
|
237
|
+
i += 2;
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
240
|
+
content += line[i];
|
|
241
|
+
i++;
|
|
242
|
+
}
|
|
243
|
+
tokens.push(quote);
|
|
244
|
+
if (content !== "")
|
|
245
|
+
tokens.push(content);
|
|
246
|
+
if (i < line.length) {
|
|
247
|
+
tokens.push(quote);
|
|
248
|
+
i++;
|
|
249
|
+
}
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
252
|
+
plain += ch;
|
|
253
|
+
i++;
|
|
254
|
+
}
|
|
255
|
+
flushPlain();
|
|
256
|
+
return tokens;
|
|
257
|
+
}
|
|
166
258
|
/**
|
|
167
259
|
* Détecte si deux ensembles de lignes ne diffèrent que par des valeurs atomiques.
|
|
168
260
|
* Retourne un résultat de classification ou null si non applicable.
|
|
169
261
|
*/
|
|
170
|
-
export function detectValueOnlyChange(oursLines, theirsLines) {
|
|
262
|
+
export function detectValueOnlyChange(oursLines, theirsLines, hasBase = false) {
|
|
171
263
|
if (oursLines.length !== theirsLines.length)
|
|
172
264
|
return null;
|
|
173
265
|
if (oursLines.length === 0)
|
|
@@ -176,13 +268,17 @@ export function detectValueOnlyChange(oursLines, theirsLines) {
|
|
|
176
268
|
let totalTokens = 0;
|
|
177
269
|
let allDiffsAreVolatile = true;
|
|
178
270
|
for (let i = 0; i < oursLines.length; i++) {
|
|
179
|
-
const oursTokens =
|
|
180
|
-
const theirsTokens =
|
|
271
|
+
const oursTokens = tokenizeLineQuoteAware(oursLines[i]);
|
|
272
|
+
const theirsTokens = tokenizeLineQuoteAware(theirsLines[i]);
|
|
181
273
|
if (oursTokens.length !== theirsTokens.length) {
|
|
182
274
|
allDiffsAreVolatile = false;
|
|
183
275
|
break;
|
|
184
276
|
}
|
|
185
|
-
|
|
277
|
+
// Dénominateur du ratio : granularité de l'ancien tokenizeLine (dont les
|
|
278
|
+
// chaînes vides d'artefact de split) — les seuils de typeClassification
|
|
279
|
+
// (10/20/30 %) ont été calibrés sur cette granularité-là. La boucle de
|
|
280
|
+
// comparaison, elle, travaille sur les tokens quote-aware.
|
|
281
|
+
totalTokens += tokenizeLine(oursLines[i]).length;
|
|
186
282
|
for (let j = 0; j < oursTokens.length; j++) {
|
|
187
283
|
if (oursTokens[j] !== theirsTokens[j]) {
|
|
188
284
|
diffCount++;
|
|
@@ -209,17 +305,83 @@ export function detectValueOnlyChange(oursLines, theirsLines) {
|
|
|
209
305
|
if (typeClassification < 55)
|
|
210
306
|
return null;
|
|
211
307
|
const si = scopeImpact(oursLines.length);
|
|
308
|
+
const penalties = [`Ratio de différences : ${(diffRatio * 100).toFixed(1)}%`];
|
|
309
|
+
if (!hasBase)
|
|
310
|
+
penalties.push("Sans base (diff2) — heuristique basée sur les patterns volatils");
|
|
212
311
|
const confidenceScore = makeScore(typeClassification, 25, si, [
|
|
213
312
|
`${diffCount} token${diffCount > 1 ? "s" : ""} identifié${diffCount > 1 ? "s" : ""} comme volatile${diffCount > 1 ? "s" : ""} (hash, version, timestamp…)`,
|
|
214
313
|
"Même structure de lignes",
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
"Sans base (diff2) — heuristique basée sur les patterns volatils",
|
|
218
|
-
]);
|
|
314
|
+
...(hasBase ? ["Base disponible — les deux côtés ont changé la valeur"] : []),
|
|
315
|
+
], penalties, 0, hasBase ? 100 : 0);
|
|
219
316
|
if (confidenceScore.label === "low")
|
|
220
317
|
return null;
|
|
221
|
-
const explanation = `Même structure avec ${diffCount} valeur${diffCount > 1 ? "s" : ""} volatile${diffCount > 1 ? "s" : ""} différente${diffCount > 1 ? "s" : ""} (hash, version, timestamp…). Résolution
|
|
318
|
+
const explanation = `Même structure avec ${diffCount} valeur${diffCount > 1 ? "s" : ""} volatile${diffCount > 1 ? "s" : ""} différente${diffCount > 1 ? "s" : ""} (hash, version, timestamp…). Résolution : semver le plus élevé si comparable, sinon selon la politique de merge.`;
|
|
222
319
|
const traceReason = `${diffCount} token${diffCount > 1 ? "s" : ""} différent${diffCount > 1 ? "s" : ""} sur ${totalTokens} — tous identifiés comme volatiles (hash, version, timestamp…). Ratio : ${(diffRatio * 100).toFixed(1)}% → score ${confidenceScore.score} (${confidenceScore.label}).`;
|
|
223
320
|
return { confidenceScore, explanation, traceReason };
|
|
224
321
|
}
|
|
322
|
+
// ─── Comparaison semver pour value_only_change ────────────────
|
|
323
|
+
const RE_SEMVER_TOKEN = /^[~^>=<]*(\d+)\.(\d+)\.(\d+)(-[\w.]+)?(\+[\w.]+)?$/;
|
|
324
|
+
/** Datetime ISO-ish `YYYY-MM-DD[ T]HH:MM[:SS]` — l'ordre lexicographique EST l'ordre chronologique. */
|
|
325
|
+
const RE_DATETIME_TOKEN = /^\d{4}-\d{2}-\d{2}[T\s]\d{2}:\d{2}(:\d{2})?([Z+\-]\S*)?$/;
|
|
326
|
+
function parseSemver(tok) {
|
|
327
|
+
const m = tok.match(RE_SEMVER_TOKEN);
|
|
328
|
+
if (!m)
|
|
329
|
+
return null;
|
|
330
|
+
return [Number(m[1]), Number(m[2]), Number(m[3]), m[4] !== undefined];
|
|
331
|
+
}
|
|
332
|
+
/** -1 si a < b, 0 si égal, 1 si a > b. Une pre-release est inférieure à la release du même triple. */
|
|
333
|
+
function compareSemver(a, b) {
|
|
334
|
+
for (let i = 0; i < 3; i++) {
|
|
335
|
+
if (a[i] !== b[i])
|
|
336
|
+
return a[i] < b[i] ? -1 : 1;
|
|
337
|
+
}
|
|
338
|
+
if (a[3] !== b[3])
|
|
339
|
+
return a[3] ? -1 : 1; // pre-release < release
|
|
340
|
+
return 0;
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Si TOUTES les paires de tokens qui diffèrent entre ours et theirs sont des
|
|
344
|
+
* semver comparables ET que le même côté est ≥ sur chaque paire (avec au
|
|
345
|
+
* moins un >), retourne ce côté. Sinon null (résolution par politique).
|
|
346
|
+
*
|
|
347
|
+
* Consommé par assembleResolution (value_only_change) : « accepter la version
|
|
348
|
+
* la plus récente » n'est déterministe que quand les valeurs sont ORDONNABLES
|
|
349
|
+
* (semver, ou datetime ISO où l'ordre lexicographique est chronologique) —
|
|
350
|
+
* pour les hashes et autres valeurs ambiguës on retombe sur la politique.
|
|
351
|
+
*/
|
|
352
|
+
export function pickNewerSemverSide(oursLines, theirsLines) {
|
|
353
|
+
if (oursLines.length !== theirsLines.length)
|
|
354
|
+
return null;
|
|
355
|
+
let winner = null;
|
|
356
|
+
for (let i = 0; i < oursLines.length; i++) {
|
|
357
|
+
const oursTokens = tokenizeLineQuoteAware(oursLines[i]);
|
|
358
|
+
const theirsTokens = tokenizeLineQuoteAware(theirsLines[i]);
|
|
359
|
+
if (oursTokens.length !== theirsTokens.length)
|
|
360
|
+
return null;
|
|
361
|
+
for (let j = 0; j < oursTokens.length; j++) {
|
|
362
|
+
if (oursTokens[j] === theirsTokens[j])
|
|
363
|
+
continue;
|
|
364
|
+
let cmp;
|
|
365
|
+
const a = parseSemver(oursTokens[j]);
|
|
366
|
+
const b = parseSemver(theirsTokens[j]);
|
|
367
|
+
if (a && b) {
|
|
368
|
+
cmp = compareSemver(a, b);
|
|
369
|
+
}
|
|
370
|
+
else if (RE_DATETIME_TOKEN.test(oursTokens[j]) && RE_DATETIME_TOKEN.test(theirsTokens[j])) {
|
|
371
|
+
// Format ISO : comparaison lexicographique = chronologique.
|
|
372
|
+
cmp = oursTokens[j] < theirsTokens[j] ? -1 : oursTokens[j] > theirsTokens[j] ? 1 : 0;
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
return null; // paire ni semver ni datetime → politique
|
|
376
|
+
}
|
|
377
|
+
if (cmp === 0)
|
|
378
|
+
continue;
|
|
379
|
+
const side = cmp > 0 ? "ours" : "theirs";
|
|
380
|
+
if (winner !== null && winner !== side)
|
|
381
|
+
return null; // désaccord entre paires
|
|
382
|
+
winner = side;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
return winner;
|
|
386
|
+
}
|
|
225
387
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/patterns/utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/patterns/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value-only-change.d.ts","sourceRoot":"","sources":["../../src/patterns/value-only-change.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkC,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjF,QAAA,MAAM,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"value-only-change.d.ts","sourceRoot":"","sources":["../../src/patterns/value-only-change.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkC,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjF,QAAA,MAAM,eAAe,EAAE,aAqCtB,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -2,25 +2,29 @@ import { makeScore, detectValueOnlyChange } from "./utils.js";
|
|
|
2
2
|
const valueOnlyChange = {
|
|
3
3
|
type: "value_only_change",
|
|
4
4
|
priority: 60,
|
|
5
|
-
|
|
5
|
+
// "both" depuis v2.7 : avec base (diff3), un changement unilatéral est déjà
|
|
6
|
+
// pris par one_side_change (prio 30) — ce pattern ne voit donc que les cas
|
|
7
|
+
// où LES DEUX côtés ont changé la valeur. En "diff2" il était inatteignable
|
|
8
|
+
// dès que la base recovery du desktop enrichissait le conflit.
|
|
9
|
+
requires: "both",
|
|
6
10
|
detect(h) {
|
|
7
11
|
if (h.oursLines.length !== h.theirsLines.length)
|
|
8
12
|
return false;
|
|
9
|
-
return detectValueOnlyChange(h.oursLines, h.theirsLines) !== null;
|
|
13
|
+
return detectValueOnlyChange(h.oursLines, h.theirsLines, h.baseLines.length > 0) !== null;
|
|
10
14
|
},
|
|
11
15
|
confidence(h) {
|
|
12
|
-
const result = detectValueOnlyChange(h.oursLines, h.theirsLines);
|
|
16
|
+
const result = detectValueOnlyChange(h.oursLines, h.theirsLines, h.baseLines.length > 0);
|
|
13
17
|
if (result)
|
|
14
18
|
return result.confidenceScore;
|
|
15
19
|
// Fallback (ne devrait pas être appelé si detect() retourne false)
|
|
16
20
|
return makeScore(0, 100, 0, [], ["Erreur interne : confidence() appelé sans match"]);
|
|
17
21
|
},
|
|
18
22
|
explanation(h) {
|
|
19
|
-
const result = detectValueOnlyChange(h.oursLines, h.theirsLines);
|
|
23
|
+
const result = detectValueOnlyChange(h.oursLines, h.theirsLines, h.baseLines.length > 0);
|
|
20
24
|
return result?.explanation ?? "Valeurs volatiles différentes.";
|
|
21
25
|
},
|
|
22
26
|
passReason(h) {
|
|
23
|
-
const result = detectValueOnlyChange(h.oursLines, h.theirsLines);
|
|
27
|
+
const result = detectValueOnlyChange(h.oursLines, h.theirsLines, h.baseLines.length > 0);
|
|
24
28
|
return result?.traceReason ?? "Valeurs atomiques identifiées comme volatiles.";
|
|
25
29
|
},
|
|
26
30
|
failReason(h) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value-only-change.js","sourceRoot":"","sources":["../../src/patterns/value-only-change.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE9D,MAAM,eAAe,GAAkB;IACrC,IAAI,EAAE,mBAAmB;IACzB,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"value-only-change.js","sourceRoot":"","sources":["../../src/patterns/value-only-change.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE9D,MAAM,eAAe,GAAkB;IACrC,IAAI,EAAE,mBAAmB;IACzB,QAAQ,EAAE,EAAE;IACZ,4EAA4E;IAC5E,2EAA2E;IAC3E,4EAA4E;IAC5E,+DAA+D;IAC/D,QAAQ,EAAE,MAAM;IAEhB,MAAM,CAAC,CAAgB;QACrB,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,WAAW,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC9D,OAAO,qBAAqB,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC;IAC5F,CAAC;IAED,UAAU,CAAC,CAAgB;QACzB,MAAM,MAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzF,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC,eAAe,CAAC;QAC1C,mEAAmE;QACnE,OAAO,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,iDAAiD,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,WAAW,CAAC,CAAgB;QAC1B,MAAM,MAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzF,OAAO,MAAM,EAAE,WAAW,IAAI,gCAAgC,CAAC;IACjE,CAAC;IAED,UAAU,CAAC,CAAgB;QACzB,MAAM,MAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzF,OAAO,MAAM,EAAE,WAAW,IAAI,gDAAgD,CAAC;IACjF,CAAC;IAED,UAAU,CAAC,CAAgB;QACzB,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YAChD,OAAO,2EAA2E,CAAC;QACrF,CAAC;QACD,OAAO,8GAA8G,CAAC;IACxH,CAAC;CACF,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whitespace-only.d.ts","sourceRoot":"","sources":["../../src/patterns/whitespace-only.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkC,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjF,QAAA,MAAM,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"whitespace-only.d.ts","sourceRoot":"","sources":["../../src/patterns/whitespace-only.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkC,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjF,QAAA,MAAM,cAAc,EAAE,aA+CrB,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { scopeImpact, makeScore, normalizeForWhitespaceCheck } from "./utils.js";
|
|
1
|
+
import { scopeImpact, makeScore, normalizeForWhitespaceCheck, extractQuotedSegments } from "./utils.js";
|
|
2
2
|
const whitespaceOnly = {
|
|
3
3
|
type: "whitespace_only",
|
|
4
4
|
priority: 50,
|
|
@@ -6,7 +6,16 @@ const whitespaceOnly = {
|
|
|
6
6
|
detect(h) {
|
|
7
7
|
const oursNorm = normalizeForWhitespaceCheck(h.oursLines);
|
|
8
8
|
const theirsNorm = normalizeForWhitespaceCheck(h.theirsLines);
|
|
9
|
-
|
|
9
|
+
if (oursNorm !== theirsNorm)
|
|
10
|
+
return false;
|
|
11
|
+
// Garde string-literal : la normalisation collapse aussi le whitespace à
|
|
12
|
+
// l'intérieur des strings, or là c'est de la DONNÉE ("hello world" ≠
|
|
13
|
+
// "hello world"). Les segments quotés doivent être strictement identiques
|
|
14
|
+
// des deux côtés, sinon le conflit n'est pas purement cosmétique.
|
|
15
|
+
const oursQuoted = extractQuotedSegments(h.oursLines);
|
|
16
|
+
const theirsQuoted = extractQuotedSegments(h.theirsLines);
|
|
17
|
+
return oursQuoted.length === theirsQuoted.length &&
|
|
18
|
+
oursQuoted.every((s, i) => s === theirsQuoted[i]);
|
|
10
19
|
},
|
|
11
20
|
confidence(h) {
|
|
12
21
|
const hasBase = h.baseLines.length > 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whitespace-only.js","sourceRoot":"","sources":["../../src/patterns/whitespace-only.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"whitespace-only.js","sourceRoot":"","sources":["../../src/patterns/whitespace-only.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExG,MAAM,cAAc,GAAkB;IACpC,IAAI,EAAE,iBAAiB;IACvB,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,MAAM;IAEhB,MAAM,CAAC,CAAgB;QACrB,MAAM,QAAQ,GAAG,2BAA2B,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,2BAA2B,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QAC9D,IAAI,QAAQ,KAAK,UAAU;YAAE,OAAO,KAAK,CAAC;QAC1C,yEAAyE;QACzE,sEAAsE;QACtE,0EAA0E;QAC1E,kEAAkE;QAClE,MAAM,UAAU,GAAG,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,qBAAqB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QAC1D,OAAO,UAAU,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM;YAC9C,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,UAAU,CAAC,CAAgB;QACzB,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjE,OAAO,SAAS,CACd,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EACjB,EAAE,EACF,WAAW,CAAC,KAAK,CAAC,EAClB,OAAO;YACL,CAAC,CAAC;gBACE,+DAA+D;gBAC/D,gDAAgD;aACjD;YACH,CAAC,CAAC,CAAC,uDAAuD,CAAC,EAC7D,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,qEAAqE,CAAC,CACvF,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,EAAiB;QAC3B,OAAO,2FAA2F,CAAC;IACrG,CAAC;IAED,UAAU,CAAC,EAAiB;QAC1B,OAAO,6FAA6F,CAAC;IACvG,CAAC;IAED,UAAU,CAAC,EAAiB;QAC1B,OAAO,kGAAkG,CAAC;IAC5G,CAAC;CACF,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/refactoring/detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/refactoring/detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA4b/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EAAE,EACnB,WAAW,EAAE,MAAM,EAAE,EACrB,eAAe,SAAK,GACnB,WAAW,EAAE,CA2Bf"}
|