@gitwand/core 2.5.1 → 2.8.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__/patterns/llm-proposed.test.js +3 -3
- package/dist/__tests__/patterns/llm-proposed.test.js.map +1 -1
- package/dist/__tests__/refactoring/refactoring-pipeline.test.d.ts +14 -0
- package/dist/__tests__/refactoring/refactoring-pipeline.test.d.ts.map +1 -0
- package/dist/__tests__/refactoring/refactoring-pipeline.test.js +359 -0
- package/dist/__tests__/refactoring/refactoring-pipeline.test.js.map +1 -0
- package/dist/classifier.d.ts.map +1 -1
- package/dist/classifier.js +2 -0
- package/dist/classifier.js.map +1 -1
- package/dist/config.d.ts +20 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +13 -0
- package/dist/config.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/refactoring-aware-merge.d.ts +52 -0
- package/dist/patterns/refactoring-aware-merge.d.ts.map +1 -0
- package/dist/patterns/refactoring-aware-merge.js +131 -0
- package/dist/patterns/refactoring-aware-merge.js.map +1 -0
- package/dist/refactoring/detect.d.ts +54 -0
- package/dist/refactoring/detect.d.ts.map +1 -0
- package/dist/refactoring/detect.js +389 -0
- package/dist/refactoring/detect.js.map +1 -0
- package/dist/refactoring/index.d.ts +13 -0
- package/dist/refactoring/index.d.ts.map +1 -0
- package/dist/refactoring/index.js +12 -0
- package/dist/refactoring/index.js.map +1 -0
- package/dist/refactoring/invert.d.ts +53 -0
- package/dist/refactoring/invert.d.ts.map +1 -0
- package/dist/refactoring/invert.js +180 -0
- package/dist/refactoring/invert.js.map +1 -0
- package/dist/refactoring/orchestration.d.ts +65 -0
- package/dist/refactoring/orchestration.d.ts.map +1 -0
- package/dist/refactoring/orchestration.js +174 -0
- package/dist/refactoring/orchestration.js.map +1 -0
- package/dist/refactoring/replay.d.ts +74 -0
- package/dist/refactoring/replay.d.ts.map +1 -0
- package/dist/refactoring/replay.js +200 -0
- package/dist/refactoring/replay.js.map +1 -0
- package/dist/resolver/assemble.d.ts.map +1 -1
- package/dist/resolver/assemble.js +21 -0
- package/dist/resolver/assemble.js.map +1 -1
- package/dist/resolver/index.d.ts.map +1 -1
- package/dist/resolver/index.js +9 -0
- package/dist/resolver/index.js.map +1 -1
- package/dist/resolver/policy.d.ts.map +1 -1
- package/dist/resolver/policy.js +2 -0
- package/dist/resolver/policy.js.map +1 -1
- package/dist/resolvers/llm-fallback.d.ts.map +1 -1
- package/dist/resolvers/llm-fallback.js +23 -9
- package/dist/resolvers/llm-fallback.js.map +1 -1
- package/dist/types.d.ts +59 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -39,7 +39,9 @@ export { tryResolveYarnLockConflict } from "./resolvers/lockfile-yarn.js";
|
|
|
39
39
|
export { tryResolvePnpmLockConflict } from "./resolvers/lockfile-pnpm.js";
|
|
40
40
|
export { matchGlob, effectivePolicyForFile, policyToConfig, parseGitwandrc, DEFAULT_POLICY, } from "./config.js";
|
|
41
41
|
export { tryFormatAwareResolve, isJsonFile, isMarkdownFile, isYamlFile, isJsFile, isVueFile, isCssFile, isNpmLockfile, isYarnLockfile, isPnpmLockfile, isLockfile, } from "./resolvers/dispatcher.js";
|
|
42
|
-
export type { MergeInput, MergeResult, MergeStats, ConflictHunk, ConflictType, Confidence, ConfidenceScore, HunkResolution, GitWandOptions, DecisionTrace, TraceStep, ValidationResult, ExternalValidationResult, LlmEndpoint, LlmFallbackConfig, LlmTrace, } from "./types.js";
|
|
42
|
+
export type { MergeInput, MergeResult, MergeStats, ConflictHunk, ConflictType, Confidence, ConfidenceScore, HunkResolution, GitWandOptions, DecisionTrace, TraceStep, ValidationResult, ExternalValidationResult, LlmEndpoint, LlmFallbackConfig, LlmTrace, RefactoringKind, Refactoring, } from "./types.js";
|
|
43
|
+
export { detectRefactorings, invertRefactorings, replayRefactorings, mergeRefactorings, tryRefMerge, } from "./refactoring/index.js";
|
|
44
|
+
export type { RefMergeResult } from "./refactoring/index.js";
|
|
43
45
|
export { tryLlmFallbackResolve } from "./resolvers/llm-fallback.js";
|
|
44
46
|
export type { LlmResolveResult } from "./resolvers/llm-fallback.js";
|
|
45
47
|
export type { JsonMergeResult } from "./resolvers/json.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAG5D,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAAQ,kBAAkB;AAC1C,oBAAoB,EAAI,YAAY;AACpC,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAGlE,OAAO,EACL,aAAa,EACb,eAAe,EACf,SAAS,EACT,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,GAChB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9D,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGxG,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG1E,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAG1E,OAAO,EACL,SAAS,EACT,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,cAAc,EACd,UAAU,EACV,QAAQ,EACR,SAAS,EACT,SAAS,EACT,aAAa,EACb,cAAc,EACd,cAAc,EACd,UAAU,GACX,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EACV,UAAU,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EAEV,eAAe,EACf,cAAc,EACd,cAAc,EAEd,aAAa,EACb,SAAS,EAET,gBAAgB,EAChB,wBAAwB,EAExB,WAAW,EACX,iBAAiB,EACjB,QAAQ,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAG5D,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAAQ,kBAAkB;AAC1C,oBAAoB,EAAI,YAAY;AACpC,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAGlE,OAAO,EACL,aAAa,EACb,eAAe,EACf,SAAS,EACT,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,GAChB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9D,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGxG,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG1E,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAG1E,OAAO,EACL,SAAS,EACT,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,cAAc,EACd,UAAU,EACV,QAAQ,EACR,SAAS,EACT,SAAS,EACT,aAAa,EACb,cAAc,EACd,cAAc,EACd,UAAU,GACX,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EACV,UAAU,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EAEV,eAAe,EACf,cAAc,EACd,cAAc,EAEd,aAAa,EACb,SAAS,EAET,gBAAgB,EAChB,wBAAwB,EAExB,WAAW,EACX,iBAAiB,EACjB,QAAQ,EAER,eAAe,EACf,WAAW,GACZ,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,YAAY,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACpF,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACjF,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnE,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClE,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,YAAY,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,YAAY,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -44,6 +44,8 @@ export { tryResolvePnpmLockConflict } from "./resolvers/lockfile-pnpm.js";
|
|
|
44
44
|
// Phase 7.4 — Politiques de merge et configuration par projet
|
|
45
45
|
export { matchGlob, effectivePolicyForFile, policyToConfig, parseGitwandrc, DEFAULT_POLICY, } from "./config.js";
|
|
46
46
|
export { tryFormatAwareResolve, isJsonFile, isMarkdownFile, isYamlFile, isJsFile, isVueFile, isCssFile, isNpmLockfile, isYarnLockfile, isPnpmLockfile, isLockfile, } from "./resolvers/dispatcher.js";
|
|
47
|
+
// v2.6 — Refactoring-aware merge pipeline
|
|
48
|
+
export { detectRefactorings, invertRefactorings, replayRefactorings, mergeRefactorings, tryRefMerge, } from "./refactoring/index.js";
|
|
47
49
|
// v2.5 — LLM fallback resolver (consommateurs souhaitant invoquer directement)
|
|
48
50
|
export { tryLlmFallbackResolve } from "./resolvers/llm-fallback.js";
|
|
49
51
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE5D,2EAA2E;AAC3E,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAAQ,kBAAkB;AAC1C,oBAAoB,EAAI,YAAY;AACpC,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAElE,wCAAwC;AACxC,OAAO,EACL,aAAa,EACb,eAAe,EACf,SAAS,GAIV,MAAM,iBAAiB,CAAC;AAEzB,kDAAkD;AAClD,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,eAAe,GAGhB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,GAChB,MAAM,iCAAiC,CAAC;AAGzC,gDAAgD;AAChD,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAExG,8EAA8E;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE1E,oEAAoE;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,8DAA8D;AAC9D,OAAO,EACL,SAAS,EACT,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,cAAc,EACd,UAAU,EACV,QAAQ,EACR,SAAS,EACT,SAAS,EACT,aAAa,EACb,cAAc,EACd,cAAc,EACd,UAAU,GACX,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE5D,2EAA2E;AAC3E,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAAQ,kBAAkB;AAC1C,oBAAoB,EAAI,YAAY;AACpC,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAElE,wCAAwC;AACxC,OAAO,EACL,aAAa,EACb,eAAe,EACf,SAAS,GAIV,MAAM,iBAAiB,CAAC;AAEzB,kDAAkD;AAClD,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,eAAe,GAGhB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,GAChB,MAAM,iCAAiC,CAAC;AAGzC,gDAAgD;AAChD,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAExG,8EAA8E;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE1E,oEAAoE;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,8DAA8D;AAC9D,OAAO,EACL,SAAS,EACT,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,cAAc,EACd,UAAU,EACV,QAAQ,EACR,SAAS,EACT,SAAS,EACT,aAAa,EACb,cAAc,EACd,cAAc,EACd,UAAU,GACX,MAAM,2BAA2B,CAAC;AA4BnC,0CAA0C;AAC1C,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAGhC,+EAA+E;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.6 — Pattern refactoring-aware-merge (priority 25, expérimental, opt-in).
|
|
3
|
+
*
|
|
4
|
+
* Détecte les conflits causés par des refactorings concurrents (renommages,
|
|
5
|
+
* déplacements de méthode) et délègue la résolution au pipeline RefMerge.
|
|
6
|
+
*
|
|
7
|
+
* ## Position dans la hiérarchie
|
|
8
|
+
*
|
|
9
|
+
* Priority 25 — après les patterns trivials (1–10) mais avant les patterns
|
|
10
|
+
* heuristiques (whitespace: 5, value_only: 8, non_overlapping: 4). En pratique,
|
|
11
|
+
* ce pattern n'est évalué que sur les hunks qui ont déjà résisté aux patterns
|
|
12
|
+
* plus simples, car ceux-ci ont une priorité inférieure (numéro plus petit).
|
|
13
|
+
*
|
|
14
|
+
* Attendez — la convention est : **plus petit = évalué en premier**. Donc 25
|
|
15
|
+
* signifie évalué AVANT whitespace_only (5) ? Non — whitespace (5) est évalué
|
|
16
|
+
* avant RefMerge (25). Les patterns à faible numéro sont prioritaires.
|
|
17
|
+
*
|
|
18
|
+
* RefMerge à priority 25 est évalué :
|
|
19
|
+
* - APRÈS non_overlapping (4), whitespace_only (5), reorder_only (6),
|
|
20
|
+
* insertion_at_boundary (7), value_only_change (8)
|
|
21
|
+
* - AVANT complex (999) et llm_proposed (998)
|
|
22
|
+
*
|
|
23
|
+
* C'est intentionnel : on ne tente RefMerge que si les patterns textuels simples
|
|
24
|
+
* n'ont pas suffi, car RefMerge est plus coûteux (tokenisation + détection).
|
|
25
|
+
*
|
|
26
|
+
* ## Activation
|
|
27
|
+
*
|
|
28
|
+
* Ce pattern est désactivé par défaut. Il s'active via `setRefMergeEnabled(true)`
|
|
29
|
+
* appelé par `resolve()` quand `options.refactoringAware.enabled === true`.
|
|
30
|
+
* Le flag est réinitialisé après chaque appel à `resolve()`.
|
|
31
|
+
*
|
|
32
|
+
* ## Résolution
|
|
33
|
+
*
|
|
34
|
+
* `detect()` exécute le pipeline RefMerge complet et cache le résultat dans
|
|
35
|
+
* `_lastResult`. Si le pipeline réussit (`lines !== null`), detect retourne `true`
|
|
36
|
+
* et `assembleResolution()` peut récupérer les lignes via `getLastRefMergeResult()`.
|
|
37
|
+
*/
|
|
38
|
+
import type { PatternPlugin } from "../types.js";
|
|
39
|
+
import type { RefMergeResult } from "../refactoring/orchestration.js";
|
|
40
|
+
/** Active ou désactive le pattern RefMerge pour la prochaine résolution. */
|
|
41
|
+
export declare function setRefMergeEnabled(enabled: boolean, max?: number): void;
|
|
42
|
+
/** Retourne l'état d'activation courant (utile pour les tests). */
|
|
43
|
+
export declare function isRefMergeEnabled(): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Retourne le dernier résultat RefMerge mis en cache par `detect()`.
|
|
46
|
+
* Appelé par `assembleResolution()` pour récupérer les lignes sans recalcul.
|
|
47
|
+
* Retourne `null` si `detect()` n'a pas encore été appelé ou si le résultat a été reset.
|
|
48
|
+
*/
|
|
49
|
+
export declare function getLastRefMergeResult(): RefMergeResult | null;
|
|
50
|
+
declare const refactoringAwareMerge: PatternPlugin;
|
|
51
|
+
export default refactoringAwareMerge;
|
|
52
|
+
//# sourceMappingURL=refactoring-aware-merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refactoring-aware-merge.d.ts","sourceRoot":"","sources":["../../src/patterns/refactoring-aware-merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EAAkC,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAatE,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,SAAK,GAAG,IAAI,CAInE;AAED,mEAAmE;AACnE,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,cAAc,GAAG,IAAI,CAE7D;AAID,QAAA,MAAM,qBAAqB,EAAE,aAyE5B,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.6 — Pattern refactoring-aware-merge (priority 25, expérimental, opt-in).
|
|
3
|
+
*
|
|
4
|
+
* Détecte les conflits causés par des refactorings concurrents (renommages,
|
|
5
|
+
* déplacements de méthode) et délègue la résolution au pipeline RefMerge.
|
|
6
|
+
*
|
|
7
|
+
* ## Position dans la hiérarchie
|
|
8
|
+
*
|
|
9
|
+
* Priority 25 — après les patterns trivials (1–10) mais avant les patterns
|
|
10
|
+
* heuristiques (whitespace: 5, value_only: 8, non_overlapping: 4). En pratique,
|
|
11
|
+
* ce pattern n'est évalué que sur les hunks qui ont déjà résisté aux patterns
|
|
12
|
+
* plus simples, car ceux-ci ont une priorité inférieure (numéro plus petit).
|
|
13
|
+
*
|
|
14
|
+
* Attendez — la convention est : **plus petit = évalué en premier**. Donc 25
|
|
15
|
+
* signifie évalué AVANT whitespace_only (5) ? Non — whitespace (5) est évalué
|
|
16
|
+
* avant RefMerge (25). Les patterns à faible numéro sont prioritaires.
|
|
17
|
+
*
|
|
18
|
+
* RefMerge à priority 25 est évalué :
|
|
19
|
+
* - APRÈS non_overlapping (4), whitespace_only (5), reorder_only (6),
|
|
20
|
+
* insertion_at_boundary (7), value_only_change (8)
|
|
21
|
+
* - AVANT complex (999) et llm_proposed (998)
|
|
22
|
+
*
|
|
23
|
+
* C'est intentionnel : on ne tente RefMerge que si les patterns textuels simples
|
|
24
|
+
* n'ont pas suffi, car RefMerge est plus coûteux (tokenisation + détection).
|
|
25
|
+
*
|
|
26
|
+
* ## Activation
|
|
27
|
+
*
|
|
28
|
+
* Ce pattern est désactivé par défaut. Il s'active via `setRefMergeEnabled(true)`
|
|
29
|
+
* appelé par `resolve()` quand `options.refactoringAware.enabled === true`.
|
|
30
|
+
* Le flag est réinitialisé après chaque appel à `resolve()`.
|
|
31
|
+
*
|
|
32
|
+
* ## Résolution
|
|
33
|
+
*
|
|
34
|
+
* `detect()` exécute le pipeline RefMerge complet et cache le résultat dans
|
|
35
|
+
* `_lastResult`. Si le pipeline réussit (`lines !== null`), detect retourne `true`
|
|
36
|
+
* et `assembleResolution()` peut récupérer les lignes via `getLastRefMergeResult()`.
|
|
37
|
+
*/
|
|
38
|
+
import { makeScore, scopeImpact } from "./utils.js";
|
|
39
|
+
import { tryRefMerge } from "../refactoring/orchestration.js";
|
|
40
|
+
// ─── État module ──────────────────────────────────────────────────────────────
|
|
41
|
+
/** Flag d'activation — positionné par `resolve()` */
|
|
42
|
+
let _refMergeEnabled = false;
|
|
43
|
+
/** Quota maximum de refactorings par branche */
|
|
44
|
+
let _maxRefactoringsPerSide = 10;
|
|
45
|
+
/** Dernier résultat RefMerge (cache pour éviter un double calcul detect+assemble) */
|
|
46
|
+
let _lastResult = null;
|
|
47
|
+
// ─── API d'activation (consommée par resolver/index.ts) ──────────────────────
|
|
48
|
+
/** Active ou désactive le pattern RefMerge pour la prochaine résolution. */
|
|
49
|
+
export function setRefMergeEnabled(enabled, max = 10) {
|
|
50
|
+
_refMergeEnabled = enabled;
|
|
51
|
+
_maxRefactoringsPerSide = max;
|
|
52
|
+
_lastResult = null; // reset cache
|
|
53
|
+
}
|
|
54
|
+
/** Retourne l'état d'activation courant (utile pour les tests). */
|
|
55
|
+
export function isRefMergeEnabled() {
|
|
56
|
+
return _refMergeEnabled;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Retourne le dernier résultat RefMerge mis en cache par `detect()`.
|
|
60
|
+
* Appelé par `assembleResolution()` pour récupérer les lignes sans recalcul.
|
|
61
|
+
* Retourne `null` si `detect()` n'a pas encore été appelé ou si le résultat a été reset.
|
|
62
|
+
*/
|
|
63
|
+
export function getLastRefMergeResult() {
|
|
64
|
+
return _lastResult;
|
|
65
|
+
}
|
|
66
|
+
// ─── Plugin ───────────────────────────────────────────────────────────────────
|
|
67
|
+
const refactoringAwareMerge = {
|
|
68
|
+
type: "refactoring_aware_merge",
|
|
69
|
+
/**
|
|
70
|
+
* Priority 970 — évalué après tous les patterns textuels (10–60) mais avant
|
|
71
|
+
* llm_proposed (998) et complex (999). RefMerge est un recours pour les hunks
|
|
72
|
+
* que tous les patterns simples ont échoué à résoudre.
|
|
73
|
+
*/
|
|
74
|
+
priority: 970,
|
|
75
|
+
/**
|
|
76
|
+
* Nécessite la base (diff3) pour détecter correctement les refactorings.
|
|
77
|
+
* Sans base, impossible de calculer ce qui a changé de chaque côté.
|
|
78
|
+
*/
|
|
79
|
+
requires: "diff3",
|
|
80
|
+
detect(h) {
|
|
81
|
+
if (!_refMergeEnabled)
|
|
82
|
+
return false;
|
|
83
|
+
if (h.baseLines.length === 0)
|
|
84
|
+
return false;
|
|
85
|
+
// Exécuter le pipeline RefMerge complet et cacher le résultat
|
|
86
|
+
const result = tryRefMerge(h, _maxRefactoringsPerSide);
|
|
87
|
+
_lastResult = result;
|
|
88
|
+
return result.lines !== null;
|
|
89
|
+
},
|
|
90
|
+
confidence(h) {
|
|
91
|
+
return makeScore(82, // typeClassification : refactoring bijectivement vérifié + merge réussi
|
|
92
|
+
12, // dataRisk : faible — merge déterministe, pas génératif
|
|
93
|
+
scopeImpact(h.oursLines.length + h.theirsLines.length), [
|
|
94
|
+
"Refactoring bijectivement vérifié (substitution simulée)",
|
|
95
|
+
"Merge textuel réussi sur les versions inversées",
|
|
96
|
+
], []);
|
|
97
|
+
},
|
|
98
|
+
explanation(_h) {
|
|
99
|
+
if (_lastResult) {
|
|
100
|
+
const refs = [..._lastResult.oursRefs, ..._lastResult.theirsRefs];
|
|
101
|
+
const renames = refs.filter((r) => r.kind !== "move-method");
|
|
102
|
+
const moves = refs.filter((r) => r.kind === "move-method");
|
|
103
|
+
const parts = [];
|
|
104
|
+
if (renames.length > 0) {
|
|
105
|
+
parts.push(`${renames.length} renommage(s) détecté(s) et inversé(s)`);
|
|
106
|
+
}
|
|
107
|
+
if (moves.length > 0) {
|
|
108
|
+
parts.push(`${moves.length} déplacement(s) de méthode`);
|
|
109
|
+
}
|
|
110
|
+
return `Conflit de refactoring — ${parts.join(", ") || "refactoring détecté"}. Résolu via le pipeline RefMerge (inversion + merge + rejeu).`;
|
|
111
|
+
}
|
|
112
|
+
return "Conflit causé par un refactoring concurrent — résolu via le pipeline RefMerge.";
|
|
113
|
+
},
|
|
114
|
+
passReason(_h) {
|
|
115
|
+
if (_lastResult?.oursRefs.length || _lastResult?.theirsRefs.length) {
|
|
116
|
+
return `Refactoring(s) détecté(s) : ours=${_lastResult.oursRefs.length}, theirs=${_lastResult.theirsRefs.length}. Merge textuel réussi après inversion.`;
|
|
117
|
+
}
|
|
118
|
+
return "Refactoring bijectivement détecté — merge réussi après inversion.";
|
|
119
|
+
},
|
|
120
|
+
failReason(_h) {
|
|
121
|
+
if (!_refMergeEnabled) {
|
|
122
|
+
return "RefMerge désactivé (options.refactoringAware.enabled !== true).";
|
|
123
|
+
}
|
|
124
|
+
if (_lastResult && _lastResult.lines === null) {
|
|
125
|
+
return `RefMerge échoué : ${_lastResult.reason}`;
|
|
126
|
+
}
|
|
127
|
+
return "Aucun refactoring bijectivement détectable dans ce hunk.";
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
export default refactoringAwareMerge;
|
|
131
|
+
//# sourceMappingURL=refactoring-aware-merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refactoring-aware-merge.js","sourceRoot":"","sources":["../../src/patterns/refactoring-aware-merge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitWand v2.6 — Détection de refactorings (expérimental)
|
|
3
|
+
*
|
|
4
|
+
* Détecte les refactorings entre la version de base d'un fichier et une branche
|
|
5
|
+
* (ours ou theirs). Utilisé par le pipeline RefMerge avant la résolution textuelle.
|
|
6
|
+
*
|
|
7
|
+
* ## Algorithme
|
|
8
|
+
*
|
|
9
|
+
* La détection est **purement textuelle** (zero dépendance, compatible browser) :
|
|
10
|
+
*
|
|
11
|
+
* ### rename-local / rename-top-level
|
|
12
|
+
* 1. Tokeniser base et branch en listes d'identifiants (sans mots-clés).
|
|
13
|
+
* 2. Identifier les tokens présents uniquement dans base (`removed`) et
|
|
14
|
+
* uniquement dans branch (`added`).
|
|
15
|
+
* 3. Pour chaque paire (oldName, newName) dont le compte d'occurrences est
|
|
16
|
+
* identique ET unique dans le groupe, construire une substitution candidate.
|
|
17
|
+
* 4. Appliquer toutes les substitutions simultanément sur la séquence base.
|
|
18
|
+
* 5. Si la séquence obtenue == séquence branch : les renames sont confirmés.
|
|
19
|
+
* 6. Classifier rename-local vs rename-top-level selon le contexte syntaxique.
|
|
20
|
+
*
|
|
21
|
+
* ### move-method
|
|
22
|
+
* Parser léger ligne par ligne pour extraire `Map<className → Set<methodName>>`.
|
|
23
|
+
* Détecter les méthodes ayant changé de classe entre base et branch.
|
|
24
|
+
*
|
|
25
|
+
* ## Garanties
|
|
26
|
+
* - Retourne `[]` en cas d'erreur ou d'absence de tree-sitter (safe by default).
|
|
27
|
+
* - Zéro import Node.js — compatible browser, Node.js, Tauri WebView.
|
|
28
|
+
* - Complexité O(n) sur la longueur du code (n = nombre de tokens).
|
|
29
|
+
*/
|
|
30
|
+
import type { Refactoring } from "../types.js";
|
|
31
|
+
/**
|
|
32
|
+
* Détecte les refactorings entre la version de base d'un fichier et une branche.
|
|
33
|
+
*
|
|
34
|
+
* Point d'entrée principal du module. Appelé deux fois par l'orchestrateur
|
|
35
|
+
* RefMerge — une fois pour `(base, ours)`, une fois pour `(base, theirs)`.
|
|
36
|
+
*
|
|
37
|
+
* @param baseLines Lignes du fichier dans la version de base (ancêtre commun)
|
|
38
|
+
* @param branchLines Lignes du fichier dans la branche (ours ou theirs)
|
|
39
|
+
* @param maxRefactorings Quota maximum de refactorings retournés (défaut: 10)
|
|
40
|
+
* @returns Liste des refactorings détectés, triée par type de confiance
|
|
41
|
+
* (rename-top-level > rename-local > move-method).
|
|
42
|
+
* Retourne `[]` en cas d'erreur ou si aucun refactoring détecté.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* const refs = detectRefactorings(
|
|
47
|
+
* ["function foo(x) { return x + 1; }"],
|
|
48
|
+
* ["function foo(value) { return value + 1; }"],
|
|
49
|
+
* );
|
|
50
|
+
* // refs = [{ kind: "rename-local", oldName: "x", newName: "value", scope: "foo" }]
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export declare function detectRefactorings(baseLines: string[], branchLines: string[], maxRefactorings?: number): Refactoring[];
|
|
54
|
+
//# sourceMappingURL=detect.d.ts.map
|
|
@@ -0,0 +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;AAoX/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EAAE,EACnB,WAAW,EAAE,MAAM,EAAE,EACrB,eAAe,SAAK,GACnB,WAAW,EAAE,CA2Bf"}
|