-
Notifications
You must be signed in to change notification settings - Fork 100
Open
Description
I have defined a deriver named "leq" with ppxlib, but I guess any ppxlib-based deriver would have the same issue.
First, I use it in a test file as follows:
type t = L1.t [@@deriving_inline leq][@@@end]
Second, running dune's build and promote changes it to the following:
type t = L1.t [@@deriving_inline leq]
let _ = fun (_ : t) -> ()
let rec (leq : t -> t -> bool) =
let __0 () = L1.leq in
((let open! ((Ppx_deriving_runtime)[@ocaml.warning "-A"]) in __0 ())
[@ocaml.warning "-A"])[@@ocaml.warning "-39"]
let _ = leq
[@@@end]
This promoted file now refuses to build by giving the following error:
Error: ppxlib: the corrected code doesn't round-trip.
This is probably a bug in the OCaml printer:
<no differences produced by diff>
diff: /tmp/build_f87c44_dune/ppxlibb4e945: No such file or directory
diff: /tmp/build_f87c44_dune/ppxlib38b9eb: No such file or directory
Third, I discovered that removing the let _
definitions and manually changed the file to the following:
type t = L1.t [@@deriving_inline leq]
let rec (leq : t -> t -> bool) =
let __0 () = L1.leq in
((let open! ((Ppx_deriving_runtime)[@ocaml.warning "-A"]) in __0 ())
[@ocaml.warning "-A"])[@@ocaml.warning "-39"]
[@@@end]
Then the round-tripping error disappears, but dune build again suggests a promotion to add the two definitions back, leading back to the second code snippet above.
Therefore I cannot get deriving_inline to a stable state, where it builds without round-trip errors and doesn't keep suggesting additional promotions.
Metadata
Metadata
Assignees
Labels
No labels