package merlin-lib

  1. Overview
  2. Docs
Merlin's libraries

Install

Dune Dependency

Authors

Maintainers

Sources

merlin-4.16-501.tbz
sha256=da5bf309b040645c292ae4572cc6a0a700dbd2bcfc996ac13c8e5c3836c21e26
sha512=99eba17b2bdec5411d239093f4e8e11ada79b2b84ae88074a1b46e47eb836bbf8cb7836c472c22e7f9e68cff1b9ea6d9b9989b70055c3277edb4cddc4a86460c

doc/merlin-lib.ocaml_utils/Ocaml_utils/Diffing_with_keys/index.html

Module Ocaml_utils.Diffing_with_keysSource

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.

Swaps exchange the position of two elements. Swap cost is set to 2 * change - epsilon. Moves 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 Swaps and Moves can be computed directly and cheaply from the original optimal patch.

Sourcetype 'a with_pos = {
  1. pos : int;
  2. data : 'a;
}
Sourceval with_pos : 'a list -> 'a with_pos list
Sourcetype ('l, 'r, 'diff) mismatch =
  1. | Name of {
    1. pos : int;
    2. got : string;
    3. expected : string;
    4. types_match : bool;
    }
  2. | Type of {
    1. pos : int;
    2. got : 'l;
    3. expected : 'r;
    4. reason : 'diff;
    }
Sourcetype ('l, 'r, 'diff) change =
  1. | Change of ('l, 'r, 'diff) mismatch
  2. | Swap of {
    1. pos : int * int;
    2. first : string;
    3. last : string;
    }
  3. | Move of {
    1. name : string;
    2. got : int;
    3. expected : int;
    }
  4. | Insert of {
    1. pos : int;
    2. insert : 'r;
    }
  5. | Delete of {
    1. pos : int;
    2. delete : 'l;
    }

This specialized version of changes introduces two composite changes: Move and Swap

Sourceval prefix : Format.formatter -> ('l, 'r, 'diff) change -> unit
Sourcemodule Define (D : Diffing.Defs with type eq := unit) : sig ... end
OCaml

Innovation. Community. Security.