package ocamlmig
OCaml source code rewriting tool
Install
Dune Dependency
Authors
Maintainers
Sources
ocamlmig-5.2-20250129.tbz
sha256=0deeac498ab94fdb7f7f6879c8b7c5554534f80fd78bdc3ac3091d31abd7fe45
sha512=ab36efb8d9ac3bca98ce964f6524feb87ec1cd106012a88e28d6002e9b6aab38f4454fd7b3fc667a104abdabcc58045139259ceb4cc3137c4d835e516010bfaf
Description
Ocamlmig is a command line tool to rewrite ocaml source code, especially to make updating to newer interfaces easier
Published: 02 Feb 2025
README
ocamlmig is a command line tool for rewriting ocaml source code with access to scope and type information.
As a simple example of what it can do, let's say an opam-installed library A provides this interface:
val new_name : int -> int
val old_name : int -> int
[@@migrate { repl = Rel.new_name }]
and your repository contains a file b.ml:
let _ = A.old_name 1
then you could do:
$ git diff b.ml
$ ocamlmig migrate -w
$ git diff b.ml
-let _ = A.old_name 1
+let _ = A.new_name 1
Examples of real rewrites:
- Renaming operators (not trivial because the operators change precedence)
- Switching code using both Stdlib and Core to mostly Core
If that piqued your interest, you can find more information about what ocamlmig does, and using it.
This is work in progress, so many things are only partially implemented, but the existing functionality as is should still be interesting.
Dependencies (29)
-
re
>= "1.10.3"
- camlp-streams
- astring
-
csexp
>= "1.4.0"
-
uutf
>= "1.0.1"
-
uuseg
>= "10.0.0"
- stdio
-
ocp-indent
"false" = "false" & >= "1.8.0" | "1" = "0" & >= "1.8.1"
-
ocamlformat-rpc-lib
"1" = "0" & = version
-
ocaml-version
>= "3.5.0"
-
menhirSdk
>= "20201216"
-
menhirLib
>= "20201216"
-
menhir
>= "20201216"
-
fpath
>= "0.7.3"
- fix
- either
- dune-build-info
- dune
-
cmdliner
>= "1.1.0"
-
base
>= "v0.12.0"
-
alcotest
"1" = "0" & >= "1.3.0"
-
ocaml
>= "4.08"
- ppx_partial
- csexp
- core_unix
- core
- base
-
dune
>= "3.15"
-
ocaml
>= "5.2" & < "5.3"
Dev Dependencies (1)
-
odoc
with-doc
Used by
None
Conflicts
None
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
On This Page