/** * GitWand — Détection de blocs déplacés (block-move) * * Approche Rabin-Karp : on hash chaque fenêtre de N lignes consécutives dans * `base`, `ours` et `theirs`, on cherche les fenêtres présentes dans **ours et * theirs mais pas dans base** (ou à des positions différentes), et on les * confirme littéralement (anti-collision). * * Usage v2.1 : primitive seule, exposée via `src/index.ts`. Les patterns * peuvent l'utiliser pour pénaliser le score de confiance de `complex` quand * un refactor massif est détecté côté ours et côté theirs (signal « pas * d'auto-résolution »). Cette dimension `algorithmStability` est wired dans * `ConfidenceScore` au commit suivant — mais aucun pattern ne la consomme * encore (la primitive sert pour la v2.6 refactoring-aware merge). */ /** Un bloc déplacé entre `ours` et `theirs`, absent de `base` à cette position. */ export interface MovedBlock { /** Les lignes brutes du bloc (depuis `ours`, non normalisées). */ block: string[]; /** Position de début dans `ours` (inclus). */ oursPos: number; /** Position de début dans `theirs` (inclus). */ theirsPos: number; /** Position dans `base` si la fenêtre y existe, sinon `null`. */ basePos: number | null; } /** Options pour `detectBlockMove`. */ export interface BlockMoveOptions { /** Taille de la fenêtre de hash. Défaut 5 — équilibre robustesse vs sensibilité. */ windowSize?: number; /** * Diversité minimale de tokens uniques (split sur whitespace + ponctuation) * dans la fenêtre normalisée — sous ce seuil, on skip pour éviter les faux * positifs sur les boucles `for (let i = 0; ...)` répétées. Défaut 4. */ minTokenDiversity?: number; } /** * Détecte les blocs de N lignes consécutives présents à la fois dans `ours` et * `theirs` mais absents (ou à une autre position) dans `base`. * * Heuristique anti-faux-positif : * 1. Whitespace trim sur chaque ligne pour le hash (le contenu du bloc reste * original dans la sortie). * 2. Filtre `minTokenDiversity` : la fenêtre doit contenir suffisamment de * tokens distincts pour ne pas matcher du code triviale répété. * 3. Confirmation littérale : après match de hash, comparaison ligne-à-ligne. * 4. Compaction : blocs adjacents fusionnés en un seul `MovedBlock` plus grand. * * @returns tableau de blocs déplacés détectés (vide si rien) */ export declare function detectBlockMove(base: string[], ours: string[], theirs: string[], opts?: BlockMoveOptions): MovedBlock[]; //# sourceMappingURL=block-move.d.ts.map