чтобы наш код работал с несколькими версиями ocamlgraph, мы используем этот фрагмент в один из наших файлов
#if OCAMLGRAPH_VERSION >= (2,0,0)
let module Dom = Dominator.Make_graph(struct
include G
let empty () = create ()
let add_edge g v1 v2 = add_edge g v1 v2; g
end) in
#elif OCAMLGRAPH_VERSION >= (1,8,6)
let module Dom = Dominator.Make_graph(G) in
#else
let module Dom = Dominator.Make(G) in
#endif
И в нашем dune
файле мы предварительно обрабатываем это с помощью cppo следующим образом:
(library
[...]
(preprocess (action (run %{bin:cppo} -V OCAMLGRAPH:%{read:ocamlgraph.version} %{input-file})))
(rule
(target ocamlgraph.version)
(action (with-stdout-to %{target} (run ocamlfind query -format %v ocamlgraph))))
Теперь мы хотим использовать dune build @fmt
. Проблема в том, что ocamlformat не понимает файлы, которые еще не были обработаны. Одним из обходных путей было бы добавить затронутый файл в .ocamlformat-ignore
, но файл довольно большой, поэтому было бы жаль, если бы он не был автоматически отформатирован.
Есть ли простое решение этой проблемы? Может быть, есть общая закономерность, как это можно решить с помощью дюны?