Skip to content

Instantly share code, notes, and snippets.

@Julow
Last active July 5, 2023 17:56
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Julow/110dc94308d6078225e0665e3eccd433 to your computer and use it in GitHub Desktop.
Save Julow/110dc94308d6078225e0665e3eccd433 to your computer and use it in GitHub Desktop.
Which OCamlformat options are most used
;;
#use "topfind"
;;
#require "unix"
;;
#require "astring"
open Astring
let read_file path =
let inp = open_in path in
let do_read () =
let lines = ref [] in
(try
while true do
lines := input_line inp :: !lines
done
with End_of_file -> ());
List.rev !lines
in
Fun.protect ~finally:(fun () -> close_in inp) do_read
let parse_opt line =
let line =
match String.cut ~sep:"#" line with Some (l', _) -> l' | None -> line
in
let opt, value =
match String.cut ~sep:"=" line with
| Some (opt, value) -> (String.trim opt, Some (String.trim value))
| None -> (String.trim line, None)
in
if opt = "" then None else Some (opt, value)
let parse_ocamlformat_file path = read_file path |> List.filter_map parse_opt
(** Recursively scan a directory, calls [f acc path] on every files. *)
let rec scan_dir f acc path =
(* Don't recurse into symlinks. *)
match Unix.lstat path with
| { st_kind = S_REG; _ } -> f acc path
| { st_kind = S_DIR; _ } ->
let cnames = Sys.readdir path in
Array.fold_left
(fun acc cname -> scan_dir f acc (Filename.concat path cname))
acc cnames
| _ -> acc
let ocamlformat_files =
let root = "pkgs" in
Sys.readdir root
|> Array.fold_left
(fun acc name ->
let path = Filename.concat root name in
(* For each project, scan for [.ocamlformat] files. Keep the union of
the options present to avoid over-representing some projects. *)
let files =
scan_dir
(fun acc path ->
if Filename.basename path = ".ocamlformat" then
parse_ocamlformat_file path :: acc
else acc)
[] path
in
if files = [] then acc
else (name, List.sort_uniq compare (List.concat files)) :: acc)
[]
let () =
Format.printf "%d projects@\n" (List.length ocamlformat_files);
(* Count usage for each pair [option, value]. *)
let tbl = Hashtbl.create 0 in
List.iter
(fun (project, options) ->
List.iter
(fun opt ->
let p', n' =
match Hashtbl.find_opt tbl opt with Some v -> v | None -> ([], 0)
in
Hashtbl.replace tbl opt (project :: p', n' + 1))
options)
ocamlformat_files;
(* Print. *)
Hashtbl.to_seq tbl |> List.of_seq
|> List.sort (fun (_, (_, a)) (_, (_, b)) -> b - a)
|> List.iter (fun ((opt, value), (projects, count)) ->
let open Format in
let pp_value ppf v = fprintf ppf " = %s" v in
let pp_projects ppf = function
| [] -> ()
| _ :: _ as projects ->
let pp_sep ppf () = fprintf ppf ", " in
fprintf ppf " (%a)"
(pp_print_list ~pp_sep pp_print_string)
projects
in
(* For options with a count < 10, show the list of projects using it. *)
printf "%4d %s%a%a@\n" count opt (pp_print_option pp_value) value
pp_projects
(if count < 10 then projects else []))
94 projects
36 parse-docstrings = true
34 break-infix = fit-or-vertical
31 profile = conventional
19 cases-exp-indent = 2
19 module-item-spacing = compact
17 type-decl = sparse
17 version = 0.21.0
16 doc-comments = before
16 indicate-multiline-delimiters = no
15 sequence-style = terminator
15 version = 0.24.1
14 exp-grouping = preserve
14 dock-collection-brackets = false
14 wrap-comments = true
13 if-then-else = keyword-first
13 break-separators = before
13 field-space = loose
12 let-binding-spacing = compact
12 break-separators = after
11 version = 0.19.0
10 let-and = sparse
10 break-fun-decl = fit-or-vertical
10 parens-tuple = multi-line-only
10 break-infix-before-func = false
10 space-around-lists = false
9 profile = default (ppx_system.1.0, dream-encoding.0.2.0, gitlab.0.1.7, ppx_parser.0.1.1, crunch.3.3.1, dream-cli.0.2.0, extunix.0.4.1, ppx_interact.0.1.0, dream-accept.0.1.0)
9 sequence-style = separator (digestif.1.1.4, json-data-encoding.1.0.0, dream.1.0.0~alpha4, piaf.0.1.0, colombe.0.8.0, checkseum.0.5.1, lun.0.0.1, multipart_form.0.5.0, base64.3.5.1)
9 module-item-spacing = sparse (ocamlformat-lib.0.25.1, json-data-encoding.1.0.0, js_of_ocaml.5.3.0, drom.0.8.0, js_of_ocaml-ocamlbuild.5.0, ez_opam_file.0.1.0, dune.3.8.2, csexp.1.5.2, ez_cmdliner.0.4.3)
9 wrap-comments = false (ke.0.6, ppx_deriving_rpc.9.0.0, rpclib.9.0.0, drom.0.8.0, prettym.0.0.3, ez_opam_file.0.1.0, ppx_cstubs.0.7.0, md2mld.0.7.0, ez_cmdliner.0.4.3)
8 break-sequences = true (spawn.v0.15.1, gluten.0.4.1, drom.0.8.0, dream.1.0.0~alpha5, ocaml-compiler-libs.v0.12.4, ez_opam_file.0.1.0, ppx_cstubs.0.7.0, ez_cmdliner.0.4.3)
8 parens-tuple = always (ke.0.6, json-data-encoding.1.0.0, drom.0.8.0, prettym.0.0.3, ez_opam_file.0.1.0, pecu.0.6, popper.0.1.1, ez_cmdliner.0.4.3)
8 break-before-in = auto (digestif.1.1.4, decompress.1.5.2, dream.1.0.0~alpha4, piaf.0.1.0, colombe.0.8.0, checkseum.0.5.1, multipart_form.0.5.0, base64.3.5.1)
8 nested-match = align (digestif.1.1.4, dream.1.0.0~alpha4, piaf.0.1.0, colombe.0.8.0, checkseum.0.5.1, multipart_form.0.5.0, base64.3.5.1, metrics.0.4.1)
8 margin = 80 (ocamlformat-lib.0.25.1, json-data-encoding.1.0.0, drom.0.8.0, ez_opam_file.0.1.0, popper.0.1.1, ppx_cstubs.0.7.0, containers.3.12, ez_cmdliner.0.4.3)
7 wrap-fun-args = false (ppx_deriving_scad.1.0.0, json-data-encoding.1.0.0, omd.2.0.0~alpha3, gluten.0.4.1, js_of_ocaml.5.3.0, dream.1.0.0~alpha5, js_of_ocaml-ocamlbuild.5.0)
7 parens-tuple-patterns = multi-line-only (dream.1.0.0~alpha4, piaf.0.1.0, drom.0.8.0, ez_opam_file.0.1.0, eliom.10.0.0, ez_cmdliner.0.4.3, ocsipersist.1.1.0)
7 profile = janestreet (ppx_deriving_rpc.9.0.0, ppx_deriving_cad.0.2.0, ppx_string_interpolation.1.0.1, rpclib.9.0.0, routes.2.0.0, popper.0.1.1, md2mld.0.7.0)
7 if-then-else = fit-or-vertical (dream.1.0.0~alpha4, piaf.0.1.0, ppx_pyformat.0.1.2, ppx_string_interpolation.1.0.1, ppx_make.0.3.2, popper.0.1.1, ppx_subliner.0.2.0)
6 disable = true (odoc.2.2.0, eqaf.0.9, dream.1.0.0~alpha4, mdx.2.3.0, cstruct.6.2.0, unstrctrd.0.3)
6 space-around-lists = true (ppx_deriving_scad.1.0.0, gluten.0.4.1, drom.0.8.0, dream.1.0.0~alpha5, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
6 ocaml-version = 4.08.0 (gitlab.0.1.7, ppx_irmin.3.7.2, mdx.2.3.0, js_of_ocaml.5.3.0, dune.3.8.2, csexp.1.5.2)
6 match-indent-nested = always (sedlex.3.1, xml-light.2.5, duppy.0.9.2, dtools.0.4.4, popper.0.1.1, mm.0.8.3)
6 break-collection-expressions = fit-or-vertical (drom.0.8.0, ez_opam_file.0.1.0, eliom.10.0.0, popper.0.1.1, ez_cmdliner.0.4.3, ocsipersist.1.1.0)
6 break-cases = fit (ocamlformat-lib.0.25.1, ppx_rapper.3.1.0, ppx_import.1.10.0, eliom.10.0.0, ppx_cstubs.0.7.0, ocsipersist.1.1.0)
6 space-around-variants = true (ppx_deriving_scad.1.0.0, gluten.0.4.1, drom.0.8.0, dream.1.0.0~alpha5, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
6 space-around-arrays = true (ppx_deriving_scad.1.0.0, gluten.0.4.1, drom.0.8.0, dream.1.0.0~alpha5, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
6 parens-ite = false (dream.1.0.0~alpha4, piaf.0.1.0, drom.0.8.0, ez_opam_file.0.1.0, popper.0.1.1, ez_cmdliner.0.4.3)
6 space-around-records = true (ppx_deriving_scad.1.0.0, gluten.0.4.1, drom.0.8.0, dream.1.0.0~alpha5, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
6 if-then-else = k-r (spawn.v0.15.1, drom.0.8.0, ocaml-compiler-libs.v0.12.4, ez_opam_file.0.1.0, containers.3.12, ez_cmdliner.0.4.3)
6 ocp-indent-compat = true (dream.1.0.0~alpha4, piaf.0.1.0, gluten.0.4.1, dream.1.0.0~alpha5, eliom.10.0.0, ocsipersist.1.1.0)
5 sequence-blank-line = preserve-one (gluten.0.4.1, drom.0.8.0, dream.1.0.0~alpha5, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
5 break-fun-sig = wrap (drom.0.8.0, ez_opam_file.0.1.0, eliom.10.0.0, ez_cmdliner.0.4.3, ocsipersist.1.1.0)
5 break-infix-before-func (ppx_pyformat.0.1.2, js_of_ocaml.5.3.0, js_of_ocaml-ocamlbuild.5.0, ppx_make.0.3.2, ppx_subliner.0.2.0)
5 match-indent = 2 (sedlex.3.1, xml-light.2.5, duppy.0.9.2, dtools.0.4.4, mm.0.8.3)
5 infix-precedence = indent (drom.0.8.0, ez_opam_file.0.1.0, eliom.10.0.0, ez_cmdliner.0.4.3, ocsipersist.1.1.0)
5 parens-ite (sedlex.3.1, xml-light.2.5, duppy.0.9.2, dtools.0.4.4, mm.0.8.3)
5 version = 0.25.1 (ipaddr.5.5.0, dockerfile.8.2.1, multipart_form.0.5.0, js_of_ocaml.5.3.0, md2mld.0.7.0)
5 break-cases = all (spawn.v0.15.1, drom.0.8.0, ocaml-compiler-libs.v0.12.4, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
5 version = 0.23.0 (ppx_system.1.0, colombe.0.8.0, crunch.3.3.1, conduit.6.2.0, ca-certs.0.2.3)
5 indicate-nested-or-patterns = unsafe-no (spawn.v0.15.1, drom.0.8.0, ocaml-compiler-libs.v0.12.4, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
5 break-fun-decl = wrap (drom.0.8.0, ez_opam_file.0.1.0, eliom.10.0.0, ez_cmdliner.0.4.3, ocsipersist.1.1.0)
5 break-struct = force (drom.0.8.0, ez_opam_file.0.1.0, eliom.10.0.0, ez_cmdliner.0.4.3, ocsipersist.1.1.0)
5 break-infix = wrap (drom.0.8.0, ez_opam_file.0.1.0, eliom.10.0.0, ez_cmdliner.0.4.3, ocsipersist.1.1.0)
5 type-decl = compact (lun.0.0.1, ppx_string_interpolation.1.0.1, eliom.10.0.0, containers.3.12, ocsipersist.1.1.0)
5 break-fun-sig = fit-or-vertical (ppx_deriving_scad.1.0.0, omd.2.0.0~alpha3, ppx_pyformat.0.1.2, ppx_make.0.3.2, ppx_subliner.0.2.0)
5 break-cases = fit-or-vertical (js_of_ocaml.5.3.0, js_of_ocaml-ocamlbuild.5.0, popper.0.1.1, dune.3.8.2, csexp.1.5.2)
5 infix-precedence = parens (dream.1.0.0~alpha4, piaf.0.1.0, gluten.0.4.1, dream.1.0.0~alpha5, ppx_cstubs.0.7.0)
5 single-case = compact (drom.0.8.0, ez_opam_file.0.1.0, eliom.10.0.0, ez_cmdliner.0.4.3, ocsipersist.1.1.0)
4 space-around-arrays = false (json-data-encoding.1.0.0, decompress.1.5.2, eliom.10.0.0, ocsipersist.1.1.0)
4 indicate-multiline-delimiters = space (ppx_deriving_cad.0.2.0, drom.0.8.0, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
4 break-collection-expressions = wrap (digestif.1.1.4, ke.0.6, decompress.1.5.2, prettym.0.0.3)
4 break-struct = natural (ke.0.6, decompress.1.5.2, prettym.0.0.3, pecu.0.6)
4 space-around-records = false (json-data-encoding.1.0.0, decompress.1.5.2, eliom.10.0.0, ocsipersist.1.1.0)
4 sequence-blank-line = compact (dream.1.0.0~alpha4, piaf.0.1.0, eliom.10.0.0, ocsipersist.1.1.0)
4 dock-collection-brackets = true (digestif.1.1.4, json-data-encoding.1.0.0, lun.0.0.1, ppx_interact.0.1.0)
4 break-before-in = fit-or-vertical (drom.0.8.0, ez_opam_file.0.1.0, popper.0.1.1, ez_cmdliner.0.4.3)
4 leading-nested-match-parens = true (gluten.0.4.1, dream.1.0.0~alpha5, containers.3.12, ppx_interact.0.1.0)
3 doc-comments-padding = 2 (drom.0.8.0, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
3 disambiguate-non-breaking-match = false (drom.0.8.0, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
3 space-around-records (spawn.v0.15.1, textmate-language.0.3.4, ocaml-compiler-libs.v0.12.4)
3 version = 0.22.4 (odoc-parser.2.0.0, decompress.1.5.2, extunix.0.4.1)
3 assignment-operator = end-line (drom.0.8.0, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
3 indent-after-in = 0 (drom.0.8.0, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
3 field-space = tight-decl (ppx_rapper.3.1.0, lun.0.0.1, containers.3.12)
3 version = 0.15.0 (either.1.0.0, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
3 space-around-arrays (spawn.v0.15.1, textmate-language.0.3.4, ocaml-compiler-libs.v0.12.4)
3 match-indent = 0 (drom.0.8.0, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
3 ocp-indent-compat = false (drom.0.8.0, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
3 break-string-literals = auto (drom.0.8.0, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
3 doc-comments-tag-only = default (drom.0.8.0, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
3 type-decl-indent = 2 (drom.0.8.0, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
3 cases-matching-exp-indent = normal (drom.0.8.0, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
3 wrap-fun-args = true (drom.0.8.0, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
3 match-indent-nested = never (drom.0.8.0, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
3 version = 0.20.1 (river.0.2, ppx_import.1.10.0, cstruct.6.2.0)
3 margin = 90 (ppx_deriving_scad.1.0.0, js_of_ocaml.5.3.0, js_of_ocaml-ocamlbuild.5.0)
3 break-cases = nested (dream.1.0.0~alpha4, piaf.0.1.0, ppx_string_interpolation.1.0.1)
3 space-around-variants = false (json-data-encoding.1.0.0, eliom.10.0.0, ocsipersist.1.1.0)
3 let-module = compact (drom.0.8.0, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
3 break-sequences = false (decompress.1.5.2, eliom.10.0.0, ocsipersist.1.1.0)
3 stritem-extension-indent = 0 (drom.0.8.0, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
3 let-binding-indent = 2 (drom.0.8.0, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
3 profile = ocamlformat (ocamlformat-lib.0.25.1, ppx_deriving_scad.1.0.0, ppx_import.1.10.0)
3 disable (ocamlformat-lib.0.25.1, mdx.2.3.0, js_of_ocaml.5.3.0)
3 leading-nested-match-parens = false (drom.0.8.0, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
3 function-indent = 2 (drom.0.8.0, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
3 extension-indent = 2 (drom.0.8.0, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
3 max-indent = 68 (drom.0.8.0, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
3 function-indent-nested = never (drom.0.8.0, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
3 break-string-literals = never (eliom.10.0.0, ppx_cstubs.0.7.0, ocsipersist.1.1.0)
3 space-around-lists (spawn.v0.15.1, textmate-language.0.3.4, ocaml-compiler-libs.v0.12.4)
3 break-fun-decl = smart (decompress.1.5.2, dream.1.0.0~alpha4, piaf.0.1.0)
3 let-binding-spacing = sparse (ppx_deriving_rpc.9.0.0, rpclib.9.0.0, md2mld.0.7.0)
3 nested-match = wrap (drom.0.8.0, ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
2 let-module = sparse (gluten.0.4.1, dream.1.0.0~alpha5)
2 version = 0.18.0 (conduit.4.0.2, pecu.0.6)
2 single-case = sparse (gluten.0.4.1, dream.1.0.0~alpha5)
2 break-cases = toplevel (textmate-language.0.3.4, containers.3.12)
2 cases-matching-exp-indent = compact (eliom.10.0.0, ocsipersist.1.1.0)
2 parse-docstrings (alcotest.1.7.0, ppx_repr.0.6.0)
2 align-constructors-decl = false (ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
2 ocaml-version = 4.08 (dockerfile.8.2.1, crunch.3.3.1)
2 parse-docstrings = false (piaf.0.1.0, multipart_form.0.5.0)
2 align-cases = false (ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
2 doc-comments = after-when-possible (eliom.10.0.0, ocsipersist.1.1.0)
2 let-and = compact (eliom.10.0.0, ocsipersist.1.1.0)
2 align-variants-decl = false (ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
2 profile = sparse (dream.1.0.0~alpha4, piaf.0.1.0)
2 version = 0.20.0 (ppxlib.0.27.0, cohttp.5.1.0)
2 ocaml-version = 4.13.0 (ocamlformat-lib.0.25.1, ppx_parser.0.1.1)
2 version = 0.16.0 (piaf.0.1.0, base64.3.5.1)
2 let-open = preserve (ez_opam_file.0.1.0, ez_cmdliner.0.4.3)
1 align-cases = true (ppx_deriving_scad.1.0.0)
1 parens-ite = true (containers.3.12)
1 max-indent = 2 (popper.0.1.1)
1 field-space = tight (decompress.1.5.2)
1 max-iters = 2 (ocamlformat-lib.0.25.1)
1 assignment-operator = begin-line (ppx_deriving_scad.1.0.0)
1 sequence-style = before (decompress.1.5.2)
1 margin = 79 (textmate-language.0.3.4)
1 margin = 10 (ocamlformat-lib.0.25.1)
1 ocaml-version = 4.10.0 (json-data-encoding.1.0.0)
1 profile = compact (msgpck.1.7)
1 module-item-spacing = preserve (odoc.2.2.0)
1 margin = 77 (ocamlformat-lib.0.25.1)
1 ocaml-version = 4.05.0 (alcotest.1.7.0)
1 ocaml-version = 5.0.0 (textmate-language.0.3.4)
1 dock-collection-brackets (textmate-language.0.3.4)
1 quiet = true (containers.3.12)
1 line-endings = lf (ocamlformat-lib.0.25.1)
1 this_is_an_error = true (ocamlformat-lib.0.25.1)
ppx_deriving_rpc;9.0.0;git://github.com/mirage/ocaml-rpc
ppx_units;1.0.0;git://github.com/SGrondin/ppx_units
ppx_deriving_encoding;0.3.0;git://gitlab.com/o-labs/ppx_deriving_encoding
ppx_deriving_jsoo;0.3;git://gitlab.com/o-labs/ppx_deriving_jsoo
asetmap;0.8.1;git+http://erratique.ch/repos/asetmap.git
astring;0.8.5;git+http://erratique.ch/repos/astring.git
hmap;0.8.1;git+http://erratique.ch/repos/hmap.git
ctypes;0.20.2;git+http://github.com/yallop/ocaml-ctypes.git
bos;0.2.1;git+https://erratique.ch/repos/bos.git
brr;0.0.5;git+https://erratique.ch/repos/brr.git
cmdliner;1.2.0;git+https://erratique.ch/repos/cmdliner.git
fmt;0.9.0;git+https://erratique.ch/repos/fmt.git
fpath;0.7.3;git+https://erratique.ch/repos/fpath.git
jsonm;1.0.2;git+https://erratique.ch/repos/jsonm.git
logs;0.7.0;git+https://erratique.ch/repos/logs.git
mtime;2.0.0;git+https://erratique.ch/repos/mtime.git
note;0.0.2;git+https://erratique.ch/repos/note.git
ptime;1.1.0;git+https://erratique.ch/repos/ptime.git
react;1.2.2;git+https://erratique.ch/repos/react.git
rresult;0.7.0;git+https://erratique.ch/repos/rresult.git
topkg;1.0.7;git+https://erratique.ch/repos/topkg.git
uucp;15.0.0;git+https://erratique.ch/repos/uucp.git
uunf;15.0.0;git+https://erratique.ch/repos/uunf.git
uuseg;15.0.0;git+https://erratique.ch/repos/uuseg.git
uutf;1.0.3;git+https://erratique.ch/repos/uutf.git
xmlm;1.4.0;git+https://erratique.ch/repos/xmlm.git
dream;1.0.0~alpha4;git+https://github.com/aantron/dream.git
hyper;1.0.0~alpha1;git+https://github.com/aantron/hyper.git
lambdasoup;1.0.0;git+https://github.com/aantron/lambdasoup.git
luv;0.5.12;git+https://github.com/aantron/luv.git
markup;1.0.3;git+https://github.com/aantron/markup.ml.git
pbkdf;1.2.0;git+https://github.com/abeaumont/ocaml-pbkdf.git
atd;2.12.0;git+https://github.com/ahrefs/atd.git
ppx_counters;0.1;git+https://github.com/ahrefs/ppx_counters.git
oniguruma;0.1.2;git+https://github.com/alan-j-hu/ocaml-oniguruma.git
textmate-language;0.3.4;git+https://github.com/alan-j-hu/ocaml-textmate-language.git
ppx_deriving_protocol;0.8.1;git+https://github.com/andersfugmann/ppx_protocol_conv
graphql;0.14.0;git+https://github.com/andreas/ocaml-graphql-server.git
stdint;0.7.2;git+https://github.com/andrenth/ocaml-stdint.git
gluten;0.4.1;git+https://github.com/anmonteiro/gluten.git
piaf;0.1.0;git+https://github.com/anmonteiro/piaf.git
routes;2.0.0;git+https://github.com/anuragsoni/routes.git
yaml;3.1.0;git+https://github.com/avsm/ocaml-yaml.git
bheap;2.0.0;git+https://github.com/backtracking/bheap.git
ocamlgraph;2.0.0;git+https://github.com/backtracking/ocamlgraph.git
ppx_catch;0.1.0;git+https://github.com/bensmrs/ppx_catch
ppx_map;0.1.0;git+https://github.com/bensmrs/ppx_map.git
ppx_string_interpolation;1.0.1;git+https://github.com/bloomberg/ppx_string_interpolation.git
ppx_make;0.3.2;git+https://github.com/bn-d/ppx_make.git
ppx_pyformat;0.1.2;git+https://github.com/bn-d/ppx_pyformat.git
ppx_subliner;0.2.0;git+https://github.com/bn-d/ppx_subliner.git
ppx_monoid;0.3.3;git+https://github.com/bobatkey/ppx-monoid.git
capnp;3.5.0;git+https://github.com/capnproto/capnp-ocaml.git
conf-capnproto;2;git+https://github.com/capnproto/capnproto.git
gen;1.1;git+https://github.com/c-cube/gen.git
containers;3.12;git+https://github.com/c-cube/ocaml-containers.git
qcheck;0.21.1;git+https://github.com/c-cube/qcheck.git
ANSITerminal;0.8.5;git+https://github.com/Chris00/ANSITerminal.git
csv;2.4;git+https://github.com/Chris00/ocaml-csv.git
ppx_factory;0.2.0;git+https://github.com/cryptosense/ppx_factory.git
syndic;1.6.1;git+https://github.com/Cumulus/Syndic.git
pgocaml;4.3.0;git+https://github.com/darioteixeira/pgocaml.git
ppx_interact;0.1.0;git+https://github.com/dariusf/ppx_interact.git
timedesc;1.2.0;git+https://github.com/daypack-dev/timere.git
emile;1.1;git+https://github.com/dinosaure/emile.git
multipart_form;0.5.0;git+https://github.com/dinosaure/multipart_form.git
bigarray-overlap;0.2.1;git+https://github.com/dinosaure/overlap.git
prettym;0.0.3;git+https://github.com/dinosaure/prettym.git
unstrctrd;0.3;git+https://github.com/dinosaure/unstrctrd.git
node_of_ocaml;1.0.0;git+https://github.com/emilienlemaire/node_of_ocaml.git
ppx_cstubs;0.7.0;git+https://github.com/fdopen/ppx_cstubs.git
stdint-literals;1.0;git+https://github.com/Firobe/ocaml-stdint-literals.git
ppx_gen_rec;2.0.0;git+https://github.com/flowtype/ocaml-ppx_gen_rec.git
ppx_deriving_scad;1.0.0;git+https://github.com/geoffder/ppx_deriving_scad.git
ounit2;2.2.7;git+https://github.com/gildor478/ounit.git
ppx_ts;0.1.6;git+https://github.com/green-labs/ppx_ts.git
domain-name;0.4.0;git+https://github.com/hannesm/domain-name.git
duration;0.2.1;git+https://github.com/hannesm/duration.git
gmap;0.3.0;git+https://github.com/hannesm/gmap.git
hkdf;1.0.4;git+https://github.com/hannesm/ocaml-hkdf.git
ppx_defer;0.5.0;git+https://github.com/hcarty/ppx_defer.git
angstrom;0.15.0;git+https://github.com/inhabitedtype/angstrom.git
bigstringaf;0.9.1;git+https://github.com/inhabitedtype/bigstringaf.git
faraday;0.8.2;git+https://github.com/inhabitedtype/faraday.git
session;0.5.0;git+https://github.com/inhabitedtype/ocaml-session.git
ppx_mysql;1.1.3;git+https://github.com/issuu/ppx_mysql.git
user-agent-parser;0.2.0;git+https://github.com/issuu/uap-ocaml.git
accessor;v0.16.0;git+https://github.com/janestreet/accessor.git
async;v0.16.0;git+https://github.com/janestreet/async.git
async_kernel;v0.16.0;git+https://github.com/janestreet/async_kernel.git
async_rpc_kernel;v0.16.0;git+https://github.com/janestreet/async_rpc_kernel.git
async_unix;v0.16.0;git+https://github.com/janestreet/async_unix.git
base_bigstring;v0.16.0;git+https://github.com/janestreet/base_bigstring.git
base;v0.16.1;git+https://github.com/janestreet/base.git
base_quickcheck;v0.16.0;git+https://github.com/janestreet/base_quickcheck.git
bin_prot;v0.16.0;git+https://github.com/janestreet/bin_prot.git
core;v0.16.0;git+https://github.com/janestreet/core.git
core_kernel;v0.16.0;git+https://github.com/janestreet/core_kernel.git
core_unix;v0.16.0;git+https://github.com/janestreet/core_unix.git
csvfields;v0.16.0;git+https://github.com/janestreet/csvfields.git
dedent;v0.16.0;git+https://github.com/janestreet/dedent.git
expect_test_helpers_core;v0.16.0;git+https://github.com/janestreet/expect_test_helpers_core.git
fieldslib;v0.16.0;git+https://github.com/janestreet/fieldslib.git
higher_kinded;v0.16.0;git+https://github.com/janestreet/higher_kinded.git
int_repr;v0.16.0;git+https://github.com/janestreet/int_repr.git
jane-street-headers;v0.16.0;git+https://github.com/janestreet/jane-street-headers.git
js_of_ocaml_patches;v0.16.0;git+https://github.com/janestreet/js_of_ocaml_patches.git
jsonaf;v0.16.0;git+https://github.com/janestreet/jsonaf.git
jst-config;v0.16.0;git+https://github.com/janestreet/jst-config.git
ocaml-compiler-libs;v0.12.4;git+https://github.com/janestreet/ocaml-compiler-libs.git
ocaml_intrinsics;v0.16.0;git+https://github.com/janestreet/ocaml_intrinsics.git
parsexp;v0.16.0;git+https://github.com/janestreet/parsexp.git
ppx_accessor;v0.16.0;git+https://github.com/janestreet/ppx_accessor.git
ppx_assert;v0.16.0;git+https://github.com/janestreet/ppx_assert.git
ppx_base;v0.16.0;git+https://github.com/janestreet/ppx_base.git
ppx_bench;v0.16.0;git+https://github.com/janestreet/ppx_bench.git
ppx_bin_prot;v0.16.0;git+https://github.com/janestreet/ppx_bin_prot.git
ppx_cold;v0.16.0;git+https://github.com/janestreet/ppx_cold.git
ppx_compare;v0.16.0;git+https://github.com/janestreet/ppx_compare.git
ppx_conv_func;v0.16.0;git+https://github.com/janestreet/ppx_conv_func.git
ppx_css;v0.16.0;git+https://github.com/janestreet/ppx_css.git
ppx_csv_conv;v0.16.0;git+https://github.com/janestreet/ppx_csv_conv.git
ppx_custom_printf;v0.16.0;git+https://github.com/janestreet/ppx_custom_printf.git
ppx_demo;v0.16.0;git+https://github.com/janestreet/ppx_demo.git
ppx_derive_at_runtime;v0.16.0;git+https://github.com/janestreet/ppx_derive_at_runtime.git
ppx_disable_unused_warnings;v0.16.0;git+https://github.com/janestreet/ppx_disable_unused_warnings.
ppx_enumerate;v0.16.0;git+https://github.com/janestreet/ppx_enumerate.git
ppx_expect;v0.16.0;git+https://github.com/janestreet/ppx_expect.git
ppx_fields_conv;v0.16.0;git+https://github.com/janestreet/ppx_fields_conv.git
ppx_fixed_literal;v0.16.0;git+https://github.com/janestreet/ppx_fixed_literal.git
ppx_globalize;v0.16.0;git+https://github.com/janestreet/ppx_globalize.git
ppx_hash;v0.16.0;git+https://github.com/janestreet/ppx_hash.git
ppx_here;v0.16.0;git+https://github.com/janestreet/ppx_here.git
ppx_ignore_instrumentation;v0.16.0;git+https://github.com/janestreet/ppx_ignore_instrumentation.g
ppx_inline_test;v0.16.0;git+https://github.com/janestreet/ppx_inline_test.git
ppx_jane;v0.16.0;git+https://github.com/janestreet/ppx_jane.git
ppx_jsonaf_conv;v0.16.0;git+https://github.com/janestreet/ppx_jsonaf_conv.git
ppx_js_style;v0.16.0;git+https://github.com/janestreet/ppx_js_style.git
ppx_let;v0.16.0;git+https://github.com/janestreet/ppx_let.git
ppx_log;v0.16.0;git+https://github.com/janestreet/ppx_log.git
ppx_module_timer;v0.16.0;git+https://github.com/janestreet/ppx_module_timer.git
ppx_optcomp;v0.16.0;git+https://github.com/janestreet/ppx_optcomp.git
ppx_optional;v0.16.0;git+https://github.com/janestreet/ppx_optional.git
ppx_pattern_bind;v0.16.0;git+https://github.com/janestreet/ppx_pattern_bind.git
ppx_pipebang;v0.16.0;git+https://github.com/janestreet/ppx_pipebang.git
ppx_python;v0.16.0;git+https://github.com/janestreet/ppx_python.git
ppx_sexp_conv;v0.16.0;git+https://github.com/janestreet/ppx_sexp_conv.git
ppx_sexp_message;v0.16.0;git+https://github.com/janestreet/ppx_sexp_message.git
ppx_sexp_value;v0.16.0;git+https://github.com/janestreet/ppx_sexp_value.git
ppx_stable;v0.16.0;git+https://github.com/janestreet/ppx_stable.git
ppx_stable_witness;v0.16.0;git+https://github.com/janestreet/ppx_stable_witness.git
ppx_string;v0.16.0;git+https://github.com/janestreet/ppx_string.git
ppx_traverse_builtins;v0.10.0;git+https://github.com/janestreet/ppx_traverse_builtins.git
ppx_tydi;v0.16.0;git+https://github.com/janestreet/ppx_tydi.git
ppx_typed_fields;v0.16.0;git+https://github.com/janestreet/ppx_typed_fields.git
ppx_typerep_conv;v0.16.0;git+https://github.com/janestreet/ppx_typerep_conv.git
ppx_variants_conv;v0.16.0;git+https://github.com/janestreet/ppx_variants_conv.git
ppx_xml_conv;v0.16.0;git+https://github.com/janestreet/ppx_xml_conv.git
ppx_yojson_conv;v0.16.0;git+https://github.com/janestreet/ppx_yojson_conv.git
ppx_yojson_conv_lib;v0.16.0;git+https://github.com/janestreet/ppx_yojson_conv_lib.git
protocol_version_header;v0.16.0;git+https://github.com/janestreet/protocol_version_header.git
result;1.5;git+https://github.com/janestreet/result.git
sexplib0;v0.16.0;git+https://github.com/janestreet/sexplib0.git
sexplib;v0.16.0;git+https://github.com/janestreet/sexplib.git
sexp_pretty;v0.16.0;git+https://github.com/janestreet/sexp_pretty.git
spawn;v0.15.1;git+https://github.com/janestreet/spawn.git
splittable_random;v0.16.0;git+https://github.com/janestreet/splittable_random.git
stdio;v0.16.0;git+https://github.com/janestreet/stdio.git
textutils;v0.16.0;git+https://github.com/janestreet/textutils.git
textutils_kernel;v0.16.0;git+https://github.com/janestreet/textutils_kernel.git
time_now;v0.16.0;git+https://github.com/janestreet/time_now.git
timezone;v0.16.0;git+https://github.com/janestreet/timezone.git
typerep;v0.16.0;git+https://github.com/janestreet/typerep.git
variantslib;v0.16.0;git+https://github.com/janestreet/variantslib.git
virtual_dom;v0.16.0;git+https://github.com/janestreet/virtual_dom.git
popper;0.1.1;git+https://github.com/jobjo/popper.git
ppx_blob;0.7.2;git+https://github.com/johnwhitington/ppx_blob.git
ppx_deriving_madcast;0.2;git+https://github.com/LesBoloss-es/ppx_deriving_madcast.git
merlin-extend;0.6.1;git+https://github.com/let-def/merlin-extend.git
gen_js_api;1.1.2;git+https://github.com/LexiFi/gen_js_api.git
ppx_jsobject_conv;0.10.0;git+https://github.com/little-arhat/ppx_jsobject_conv.git
ppx_const;2.0.1;git+https://github.com/mcclure/ppx_const.git
melange;1.0.0;git+https://github.com/melange-re/melange.git
alcotest;1.7.0;git+https://github.com/mirage/alcotest.git
bigarray-compat;1.1.0;git+https://github.com/mirage/bigarray-compat.git
ca-certs;0.2.3;git+https://github.com/mirage/ca-certs.git
capnp-rpc;1.2.3;git+https://github.com/mirage/capnp-rpc.git
checkseum;0.5.1;git+https://github.com/mirage/checkseum.git
coin;0.1.4;git+https://github.com/mirage/coin.git
colombe;0.8.0;git+https://github.com/mirage/colombe.git
decompress;1.5.2;git+https://github.com/mirage/decompress.git
digestif;1.1.4;git+https://github.com/mirage/digestif.git
either;1.0.0;git+https://github.com/mirage/either.git
eqaf;0.9;git+https://github.com/mirage/eqaf.git
ezjsonm;1.3.0;git+https://github.com/mirage/ezjsonm.git
ezxmlm;1.1.0;git+https://github.com/mirage/ezxmlm.git
ppx_irmin;3.7.2;git+https://github.com/mirage/irmin.git
irmin-watcher;0.5.0;git+https://github.com/mirage/irmin-watcher.git
ke;0.6;git+https://github.com/mirage/ke.git
lwt-dllist;1.0.1;git+https://github.com/mirage/lwt-dllist.git
metrics;0.4.1;git+https://github.com/mirage/metrics.git
mirage-clock;4.2.0;git+https://github.com/mirage/mirage-clock.git
mirage-crypto;0.10.7;git+https://github.com/mirage/mirage-crypto.git
mirage-flow;3.0.0;git+https://github.com/mirage/mirage-flow.git
mirage-kv;6.1.1;git+https://github.com/mirage/mirage-kv.git
mirage-kv-mem;3.2.1;git+https://github.com/mirage/mirage-kv-mem.git
mrmime;0.3.2;git+https://github.com/mirage/mrmime.git
base64;3.5.1;git+https://github.com/mirage/ocaml-base64.git
cf;0.5.0;git+https://github.com/mirage/ocaml-cf.git
cohttp;4.0.0;git+https://github.com/mirage/ocaml-cohttp.git
conduit;4.0.2;git+https://github.com/mirage/ocaml-conduit.git
crunch;3.3.1;git+https://github.com/mirage/ocaml-crunch.git
cstruct;6.2.0;git+https://github.com/mirage/ocaml-cstruct.git
fsevents;0.3.0;git+https://github.com/mirage/ocaml-fsevents.git
github;4.4.1;git+https://github.com/mirage/ocaml-github.git
hex;1.5.0;git+https://github.com/mirage/ocaml-hex.git
ipaddr;5.5.0;git+https://github.com/mirage/ocaml-ipaddr.git
magic-mime;1.3.0;git+https://github.com/mirage/ocaml-magic-mime.git
uri;4.2.0;git+https://github.com/mirage/ocaml-uri.git
optint;0.3.0;git+https://github.com/mirage/optint.git
pecu;0.6;git+https://github.com/mirage/pecu.git
prometheus;1.2;git+https://github.com/mirage/prometheus.git
ppx_repr;0.6.0;git+https://github.com/mirage/repr.git
rosetta;0.3.0;git+https://github.com/mirage/rosetta.git
uuuu;0.3.0;git+https://github.com/mirage/uuuu.git
yuscii;0.3.0;git+https://github.com/mirage/yuscii.git
asn1-combinators;0.2.6;git+https://github.com/mirleft/ocaml-asn1-combinators.git
tls;0.15.4;git+https://github.com/mirleft/ocaml-tls.git
x509;0.16.4;git+https://github.com/mirleft/ocaml-x509.git
biniou;1.2.2;git+https://github.com/mjambon/biniou.git
conf-libpcre;1;git+https://github.com/mmottl/pcre-ocaml.git
res;5.0.1;git+https://github.com/mmottl/res.git
md2mld;0.7.0;git+https://github.com/mseri/md2mld.git
ppx_yojson;1.2.0;git+https://github.com/NathanReb/ppx_yojson.git
xml-light;2.5;git+https://github.com/ncannasse/xml-light
ppx_parser;0.1.1;git+https://github.com/NielsMommen/ppx_parser.git
ppx_monad;0.2.0;git+https://github.com/Niols/ppx_monad.git
ppx_deriving_cad;0.2.0;git+https://github.com/OCADml/ppx_deriving_cad.git
camlp-streams;5.0.1;git+https://github.com/ocaml/camlp-streams.git
calendar;3.0.0;git+https://github.com/ocaml-community/calendar
cppo;1.6.9;git+https://github.com/ocaml-community/cppo.git
easy-format;1.3.4;git+https://github.com/ocaml-community/easy-format.git
ISO8601;0.2.6;git+https://github.com/ocaml-community/ISO8601.ml.git
linenoise;1.4.0;git+https://github.com/ocaml-community/ocaml-linenoise.git
sedlex;3.1;git+https://github.com/ocaml-community/sedlex.git
yojson;2.1.0;git+https://github.com/ocaml-community/yojson.git
octavius;1.2.2;git+https://github.com/ocaml-doc/octavius.git
odoc-parser;2.0.0;git+https://github.com/ocaml-doc/odoc-parser.git
csexp;1.5.2;git+https://github.com/ocaml-dune/csexp.git
dune;3.8.2;git+https://github.com/ocaml/dune.git
dot-merlin-reader;4.9;git+https://github.com/ocaml/merlin.git
num;1.4;git+https://github.com/ocaml/num.git
ocaml-system;4.14.1;git+https://github.com/ocaml/ocaml
ocamlbuild;0.14.2;git+https://github.com/ocaml/ocamlbuild.git
ocamlfind;1.9.6;git+https://github.com/ocaml/ocamlfind.git
seq;base;git+https://github.com/ocaml/ocaml.git
re;1.10.4;git+https://github.com/ocaml/ocaml-re.git
odoc;2.2.0;git+https://github.com/ocaml/odoc.git
omd;2.0.0~alpha3;git+https://github.com/ocaml/omd.git
opam-file-format;2.1.6;git+https://github.com/ocaml/opam-file-format
opam-core;2.1.5;git+https://github.com/ocaml/opam.git
ocamlformat-lib;0.25.1;git+https://github.com/ocaml-ppx/ocamlformat.git
ocaml-syntax-shims;1.0.0;git+https://github.com/ocaml-ppx/ocaml-syntax-shims.git
ppx_derivers;1.2.1;git+https://github.com/ocaml-ppx/ppx_derivers.git
ppx_deriving;5.2.1;git+https://github.com/ocaml-ppx/ppx_deriving.git
ppx_deriving_protobuf;3.0.0;git+https://github.com/ocaml-ppx/ppx_deriving_protobuf.git
ppx_deriving_yojson;3.7.0;git+https://github.com/ocaml-ppx/ppx_deriving_yojson.git
ppx_getenv;2.1;git+https://github.com/ocaml-ppx/ppx_getenv.git
ppx_import;1.10.0;git+https://github.com/ocaml-ppx/ppx_import.git
ppxlib;0.30.0;git+https://github.com/ocaml-ppx/ppxlib.git
directories;0.5;git+https://github.com/ocamlpro/directories.git
drom;0.8.0;git+https://github.com/ocamlpro/drom.git
ez_cmdliner;0.4.3;git+https://github.com/ocamlpro/ez_cmdliner.git
ez_config;0.2.0;git+https://github.com/ocamlpro/ez_config.git
ez_file;0.3.0;git+https://github.com/ocamlpro/ez_file.git
ez_opam_file;0.1.0;git+https://github.com/ocamlpro/ez_opam_file.git
ez_subst;0.2.1;git+https://github.com/ocamlpro/ez_subst.git
ocp-indent;1.8.1;git+https://github.com/OCamlPro/ocp-indent.git
ocplib-endian;1.2;git+https://github.com/OCamlPro/ocplib-endian.git
ocplib_stuff;0.4.0;git+https://github.com/ocamlpro/ocplib_stuff.git
stdlib-shims;0.3.0;git+https://github.com/ocaml/stdlib-shims.git
uchar;0.0.2;git+https://github.com/ocaml/uchar.git
zarith;1.12;git+https://github.com/ocaml/Zarith.git
eliom;10.0.0;git+https://github.com/ocsigen/eliom.git
js_of_ocaml;5.3.0;git+https://github.com/ocsigen/js_of_ocaml.git
js_of_ocaml-ocamlbuild;5.0;git+https://github.com/ocsigen/js_of_ocaml-ocamlbuild.git
lwt;5.6.1;git+https://github.com/ocsigen/lwt.git
lwt_log;1.1.2;git+https://github.com/ocsigen/lwt_log.git
lwt_ssl;1.2.0;git+https://github.com/ocsigen/lwt_ssl.git
ocsigenserver;5.0.1;git+https://github.com/ocsigen/ocsigenserver.git
ocsipersist;1.1.0;git+https://github.com/ocsigen/ocsipersist.git
reactiveData;0.3.0;git+https://github.com/ocsigen/reactiveData.git
tyxml;4.5.0;git+https://github.com/ocsigen/tyxml.git
ansi;0.6.0;git+https://github.com/ocurrent/ansi.git
current_incr;0.6.1;git+https://github.com/ocurrent/current_incr.git
dockerfile;8.2.1;git+https://github.com/ocurrent/ocaml-dockerfile.git
ocaml-version;3.6.1;git+https://github.com/ocurrent/ocaml-version.git
current_rpc;0.6.4;git+https://github.com/ocurrent/ocurrent.git
hilite;0.2.0;git+https://github.com/patricoferris/hilite.git
ppx_deriving_yaml;0.2.1;git+https://github.com/patricoferris/ppx_deriving_yaml.git
caqti;1.9.0;git+https://github.com/paurkedal/ocaml-caqti.git
ppx_compose;0.2.1;git+https://github.com/paurkedal/ppx_compose.git
ppx_regexp;0.5.1;git+https://github.com/paurkedal/ppx_regexp.git
camlrack;0.10.1;git+https://github.com/pdarragh/camlrack.git
psq;0.2.1;git+https://github.com/pqwy/psq.git
ppx_system;1.0;git+https://github.com/Psi-Prod/ppx_system.git
mdx;2.3.0;git+https://github.com/realworldocaml/mdx.git
reason;3.8.2;git+https://github.com/reasonml/reason.git
let-if;0.3.0;git+https://github.com/reynir/let-if.git
ppx_optint;0.1.0;git+https://github.com/reynir/ppx_optint.git
curly;0.3.0;git+https://github.com/rgrinberg/curly.git
stringext;1.6.0;git+https://github.com/rgrinberg/stringext.git
lun;0.0.1;git+https://github.com/roburio/lun.git
pg_query;0.9.7;git+https://github.com/roddyyaga/pg_query-ocaml.git
ppx_rapper;3.1.0;git+https://github.com/roddyyaga/ppx_rapper.git
dtools;0.4.4;git+https://github.com/savonet/ocaml-dtools.git
duppy;0.9.2;git+https://github.com/savonet/ocaml-duppy.git
mm;0.8.3;git+https://github.com/savonet/ocaml-mm.git
ssl;0.6.0;git+https://github.com/savonet/ocaml-ssl.git
ppx_deriving_hash;0.1.1;git+https://github.com/sim642/ppx_deriving_hash.git
ppx_viewpattern;0.1.0;git+https://github.com/sim642/ppx_viewpattern.git
ppx_show;0.2.1;git+https://github.com/thierry-martinez/ppx_show.git
pyml;20220905;git+https://github.com/thierry-martinez/pyml.git
stdcompat;19;git+https://github.com/thierry-martinez/stdcompat.git
dream-accept;0.1.0;git+https://github.com/tmattio/dream-accept.git
dream-cli;0.2.0;git+https://github.com/tmattio/dream-cli.git
dream-encoding;0.2.0;git+https://github.com/tmattio/dream-encoding.git
gitlab;0.1.7;git+https://github.com/tmcgilchrist/ocaml-gitlab.git
logs-ppx;0.2.0;git+https://github.com/ulrikstrid/logs-ppx.git
msgpck;1.7;git+https://github.com/vbmithr/ocaml-msgpck.git
ppx_deriving_qcheck;0.4.0;git+https://github.com/vch9/ppx_deriving_qcheck.git
ppx_distr_guards;0.3;git+https://github.com/vogler/ppx_distr_guards.git
inotify;2.4.1;git+https://github.com/whitequark/ocaml-inotify.git
ppx_matches;0.1;git+https://github.com/wrbs/ppx_matches
camlzip;1.11;git+https://github.com/xavierleroy/camlzip.git
cryptokit;1.18;git+https://github.com/xavierleroy/cryptokit.git
bitstring;4.1.0;git+https://github.com/xguerin/bitstring.git
integers;0.7.0;git+https://github.com/yallop/ocaml-integers.git
extunix;0.4.1;git+https://github.com/ygrek/extunix.git
camomile;1.0.2;git+https://github.com/yoriyuki/Camomile.git
ocaml-monadic;0.5;git+https://github.com/zepalmer/ocaml-monadic.git
ppx_meta_conv;4.1.0;git+https://gitlab.com/camlspotter/ppx_meta_conv
ppx_test;1.8.0;git+https://gitlab.com/camlspotter/ppx_test
ppxx;2.5.0;git+https://gitlab.com/camlspotter/ppxx
spotlib;4.3.0;git+https://gitlab.com/camlspotter/spotlib
ocamlnet;4.1.9-2;git+https://gitlab.com/gerdstolpmann/lib-ocamlnet3.git
ppx_inline_alcotest;1.0.0;git+https://gitlab.com/gopiandcode/ppx-inline-alcotest.git
json-data-encoding;1.0.0;git+https://gitlab.com/nomadic-labs/json-data-encoding
fix;20230505;git+https://gitlab.inria.fr/fpottier/fix.git
menhir;20230608;git+https://gitlab.inria.fr/fpottier/menhir.git
visitors;20210608;git+https://gitlab.inria.fr/fpottier/visitors.git
ppx_seq;0.3.2;git+https://git.sr.ht/~hyphen/ppx_seq
pringo;1.3;git+https://https://github.com/xavierleroy/pringo
#!/usr/bin/env bash
mkdir -p pkgs
while IFS=';' read name v url; do
pkg="$name.$v"
dst="pkgs/$pkg"
if ! [[ -e $dst ]]; then
opam source --dir="$dst" "$pkg"
fi
done < projects
ocaml ocamlformat_usage.ml > output
#!/usr/bin/env bash
# Update the list of projects from the packages installed on a switch
while read pkg v repo; do
repo=${repo#\"}
repo=${repo%\"}
if [[ $repo = "" ]]; then continue; fi
echo "$pkg;$v;$repo"
done < <(opam list --short --columns=name,version,dev-repo:) |
sort -t ';' -k 3 -u
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment