package lsp
LSP protocol implementation in OCaml
Install
Dune Dependency
Authors
-
AAndrey Popp <8mayday@gmail.com>
-
RRusty Key <iam@stfoo.ru>
-
LLouis Roché <louis@louisroche.net>
-
OOleksiy Golovko <alexei.golovko@gmail.com>
-
RRudi Grinberg <me@rgrinberg.com>
-
SSacha Ayoun <sachaayoun@gmail.com>
-
Ccannorin <cannorin@gmail.com>
-
UUlugbek Abdullaev <ulugbekna@gmail.com>
-
Thibaut Mattio
-
MMax Lantas <mnxndev@outlook.com>
Maintainers
Sources
jsonrpc-1.10.1.tbz
sha256=23006064074617974a7237443f4db6234e305b3b74eb7134bf870499cb59aafe
sha512=f6925524a9c947c104cf2b054dae118186f4c559c572fec1426bdbdc33cfc5c8e097581ad82c52f0872f8c5721852d96cff86fd66abf452350cb1d04f2f2110d
doc/src/lsp.stdune/map.ml.html
Source file map.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270
# 1 "submodules/dune/otherlibs/stdune/map.ml" module type S = Map_intf.S module type Key = Map_intf.Key module Make (Key : Key) : S with type key = Key.t = struct include MoreLabels.Map.Make (struct type t = Key.t let compare a b = Ordering.to_int (Key.compare a b) end) let find key t = find_opt t key let mem t k = mem k t let set t k v = add ~key:k ~data:v t let update t k ~f = update ~key:k ~f t let add_exn t key v = update t key ~f:(function | None -> Some v | Some _ -> Code_error.raise "Map.add_exn: key already exists" [ ("key", Key.to_dyn key) ]) let add (type e) (t : e t) key v = let module M = struct exception Found of e end in try Result.Ok (update t key ~f:(function | None -> Some v | Some e -> raise_notrace (M.Found e))) with | M.Found e -> Error e let remove t k = remove k t let add_multi t key x = let l = Option.value (find t key) ~default:[] in set t key (x :: l) let merge a b ~f = merge a b ~f let union a b ~f = union a b ~f let union_exn a b = union a b ~f:(fun key _ _ -> Code_error.raise "Map.union_exn: a key appears in both maps" [ ("key", Key.to_dyn key) ]) let compare a b ~compare:f = compare a b ~cmp:(fun a b -> Ordering.to_int (f a b)) |> Ordering.of_int let equal a b ~equal:f = equal a b ~cmp:f let iteri t ~f = iter t ~f:(fun ~key ~data -> f key data) let iter t ~f = iteri t ~f:(fun _ x -> f x) let iter2 a b ~f = ignore (merge a b ~f:(fun key a b -> f key a b; None) : _ t) let foldi t ~init ~f = fold t ~init ~f:(fun ~key ~data acc -> f key data acc) let fold t ~init ~f = foldi t ~init ~f:(fun _ x acc -> f x acc) let for_alli t ~f = for_all t ~f let for_all t ~f = for_alli t ~f:(fun _ x -> f x) let existsi t ~f = exists t ~f let exists t ~f = existsi t ~f:(fun _ x -> f x) let filteri t ~f = filter t ~f let filter t ~f = filteri t ~f:(fun _ x -> f x) let partitioni t ~f = partition t ~f let partition t ~f = partitioni t ~f:(fun _ x -> f x) let to_list = bindings let to_list_map t ~f = foldi t ~init:[] ~f:(fun k v acc -> f k v :: acc) |> List.rev let of_list = let rec loop acc = function | [] -> Result.Ok acc | (k, v) :: l -> ( match find acc k with | None -> loop (set acc k v) l | Some v_old -> Error (k, v_old, v)) in fun l -> loop empty l let of_list_map = let rec loop f acc = function | [] -> Result.Ok acc | x :: l -> let k, v = f x in if not (mem acc k) then loop f (set acc k v) l else Error k in fun l ~f -> match loop f empty l with | Result.Ok _ as x -> x | Error k -> ( match List.filter l ~f:(fun x -> match Key.compare (fst (f x)) k with | Eq -> true | _ -> false) with | x :: y :: _ -> Error (k, x, y) | _ -> assert false) let of_list_map_exn t ~f = match of_list_map t ~f with | Result.Ok x -> x | Error (key, _, _) -> Code_error.raise "Map.of_list_map_exn" [ ("key", Key.to_dyn key) ] let of_list_exn l = match of_list l with | Result.Ok x -> x | Error (key, _, _) -> Code_error.raise "Map.of_list_exn" [ ("key", Key.to_dyn key) ] let of_list_reduce l ~f = List.fold_left l ~init:empty ~f:(fun acc (key, data) -> match find acc key with | None -> set acc key data | Some x -> set acc key (f x data)) let of_list_fold l ~init ~f = List.fold_left l ~init:empty ~f:(fun acc (key, data) -> let x = Option.value (find acc key) ~default:init in set acc key (f x data)) let of_list_reducei l ~f = List.fold_left l ~init:empty ~f:(fun acc (key, data) -> match find acc key with | None -> set acc key data | Some x -> set acc key (f key x data)) let of_list_multi l = List.fold_left (List.rev l) ~init:empty ~f:(fun acc (key, data) -> add_multi acc key data) let of_list_unit = let rec loop acc = function | [] -> acc | k :: l -> loop (set acc k ()) l in fun l -> loop empty l let keys t = foldi t ~init:[] ~f:(fun k _ l -> k :: l) |> List.rev let values t = foldi t ~init:[] ~f:(fun _ v l -> v :: l) |> List.rev let find_exn t key = match find_opt key t with | Some v -> v | None -> Code_error.raise "Map.find_exn: failed to find key" [ ("key", Key.to_dyn key); ("keys", Dyn.list Key.to_dyn (keys t)) ] let min_binding = min_binding_opt let max_binding = max_binding_opt let choose = choose_opt let split k t = split t k let map t ~f = map t ~f let mapi t ~f = mapi t ~f let fold_mapi t ~init ~f = let acc = ref init in let result = mapi t ~f:(fun i x -> let new_acc, y = f i !acc x in acc := new_acc; y) in (!acc, result) let filter_mapi t ~f = merge t empty ~f:(fun key data _always_none -> match data with | None -> assert false | Some data -> f key data) let filter_map t ~f = filter_mapi t ~f:(fun _ x -> f x) let superpose a b = union a b ~f:(fun _ _ y -> Some y) let is_subset t ~of_ ~f = let not_subset () = raise_notrace Exit in match merge t of_ ~f:(fun _dir t of_ -> match t with | None -> None | Some t -> ( match of_ with | None -> not_subset () | Some of_ -> if f t ~of_ then None else not_subset ())) with | (_ : _ t) -> true | exception Exit -> false module Multi = struct type nonrec 'a t = 'a list t let rev_union m1 m2 = union m1 m2 ~f:(fun _ l1 l2 -> Some (List.rev_append l1 l2)) let cons t k x = update t k ~f:(function | None -> Some [ x ] | Some xs -> Some (x :: xs)) let find t k = Option.value (find t k) ~default:[] let add_all t k = function | [] -> t | entries -> update t k ~f:(fun v -> Some (match v with | None -> entries | Some x -> List.append x entries)) end exception Found of Key.t let find_key t ~f = match iteri t ~f:(fun key _ -> if f key then raise_notrace (Found key) else ()) with | () -> None | exception Found e -> Some e let to_dyn f t = Dyn.Map (to_list t |> List.map ~f:(fun (k, v) -> (Key.to_dyn k, f v))) let to_seq = to_seq end
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>