ppx_deriving
ppx_deriving copied to clipboard
PPX output flags warning 53 misplaced-attribute in OCaml 5.2
Given the following contents in test.ml:
type t = string
[@@deriving show]
let () =
print_endline (show "foo")
And a ppx binary to do the transforms:
$ ocamlfind opt -predicates ppx_driver -package ppx_deriving.show -package ppxlib.runner -linkpkg -linkall -o ppx_driver
We get the following output from ./ppx_driver test.ml
type t = string[@@deriving show]
let rec pp
: Ppx_deriving_runtime.Format.formatter -> t -> Ppx_deriving_runtime.unit =
((let open! ((Ppx_deriving_runtime)[@ocaml.warning "-A"]) in
fun fmt -> Ppx_deriving_runtime.Format.fprintf fmt "%S")
[@ocaml.warning "-A"])
and show : t -> Ppx_deriving_runtime.string =
fun x -> Ppx_deriving_runtime.Format.asprintf "%a" pp x[@@ocaml.warning
"-32"]
include struct let _ = fun (_ : t) -> () end[@@ocaml.doc "@inline"][@@merlin.hide
]
let () = print_endline (show "foo")
If we then try to compile that code:
$ ocamlopt test.pp.ml
File "test.pp.ml", line 3, characters 4-41:
3 | : Ppx_deriving_runtime.Format.formatter -> t -> Ppx_deriving_runtime.unit =
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error: Unbound module Ppx_deriving_runtime
[[email protected] ~/local/ocaml5]$ ocamlfind ocamlopt -package ppx_deriving.runtime test.pp.ml
File "test.pp.ml", line 4, characters 39-52:
4 | ((let open! ((Ppx_deriving_runtime)[@ocaml.warning "-A"]) in
^^^^^^^^^^^^^
Warning 53 [misplaced-attribute]: the "ocaml.warning" attribute cannot appear in this context
This is from a clean switch with ocaml.5.2~alpha1 and ppx_deriving
$ opam list
# Packages matching: installed
# Name # Installed # Synopsis
base-bigarray base
base-domains base
base-nnp base Naked pointers prohibited in the OCaml heap
base-threads base
base-unix base
cppo 1.6.9 Code preprocessor like cpp for OCaml
dune 3.14.2 Fast, portable, and opinionated build system
ocaml 5.2.0 The OCaml compiler (virtual package)
ocaml-compiler-libs v0.17.0 OCaml compiler libraries repackaged
ocaml-config 3 OCaml Switch Configuration
ocaml-option-flambda 1 Set OCaml to be compiled with flambda activated
ocaml-option-fp 1 Set OCaml to be compiled with frame-pointers enabled
ocaml-option-no-compression 1 Set OCaml to be compiled with --without-zstd
ocaml-variants 5.2.0~alpha1+options First alpha release of OCaml 5.2.0
ocamlfind 1.9.6 A library manager for OCaml
ppx_derivers 1.2.1 Shared [@@deriving] plugin registry
ppx_deriving 5.2.1 Type-driven code generation for OCaml
ppxlib 0.32.1~5.2preview Standard infrastructure for ppx rewriters
result 1.5 Compatibility Result module
sexplib0 v0.16.0 Library containing the definition of S-expressions and some base converters
stdlib-shims 0.3.0 Backport some of the new stdlib features to older compiler
You got this error when using one of the plugins right? Could you test if you still get this error when pinning ppx_deriving to the master branch?
We recently merged a port of all plugins to ppxlib and I believe this should fix the issue as they are not using the ppx_deriving API anymore and if I understand your fix in #283 correctly, this attribute was attached for all plugins by the ppx_deriving API.