logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Diffing_with_keys - When diffing lists where each element has a distinct key, we can refine the diffing

Documentation

       Module Diffing_with_keys
        : sigend

       When diffing lists where each element has a distinct key, we can refine the diffing patch by  introducing
       two composite edit moves: swaps and moves.

       Swap  s exchange the position of two elements.  Swap cost is set to 2*change-epsilon .  Move s change
       the position of one element.  Move cost is set to delete+addition-epsilon .

       When the cost delete+addition is greater than change and with those specific weights, the optimal patch
       with Swap s and Move s can be computed directly and cheaply from the original optimal patch.

       type'awith_pos = {
        pos : int ;
        data : 'a ;
        }

       valwith_pos : 'alist->'awith_poslisttype('l,'r,'diff)mismatch =
        | Name of{
        pos : int ;
        got : string ;
        expected : string ;
        types_match : bool ;
        }
        | Type of{
        pos : int ;
        got : 'l ;
        expected : 'r ;
        reason : 'diff ;
        }

       type('l,'r,'diff)change =
        | Change of('l,'r,'diff)mismatch
        | Swap of{
        pos : int*int ;
        first : string ;
        last : string ;
        }
        | Move of{
        name : string ;
        got : int ;
        expected : int ;
        }
        | Insert of{
        pos : int ;
        insert : 'r ;
        }
        | Delete of{
        pos : int ;
        delete : 'l ;
        }

       This specialized version of changes introduces two composite changes: Move and Swapvalprefix : ('l,'r,'diff)changeFormat_doc.printermoduleDefine:(D:sigend)->sigend

OCamldoc                                           2025-06-12                              Diffing_with_keys(3o)

Module

       Module   Diffing_with_keys

Name

       Diffing_with_keys  -  When diffing lists where each element has a distinct key, we can refine the diffing
       patch by introducing two composite edit moves: swaps and moves.

See Also