Skip to content

[@@deriving_inline] requires deriver to be present during non-lint build #342

@sim642

Description

@sim642

The documentation states the following about [@@deriving_inline]:

You might notice that the resulting file when using
``[@@deriving_inline]`` needs no special treatment to be compiled. In
particular, you can build it without the ppx rewriter or even
ppxlib. You only need them while developing the project, in order to
automatically produce the generated code but that's it. End users of
your project do not need to install ppxlib and other ppx rewriters
themselves.

However, this appears not to be true, as I observed by doing the following:

  1. Added [@@deriving_inline yaml][@@@end] after a type declaration.
  2. Added (lint (pps ppx_deriving_yaml)) into the dune file.
  3. Ran dune build @lint --auto-promote, which did promote the inline implementations.
  4. Ran dune build, which fails with the following:
    10 |   [@@deriving_inline yaml]
                              ^^^^
    Error: Ppxlib.Deriving: 'yaml' is not a supported type deriving generator
    

It appears to me that ppxlib is still trying to run the deriver for [@@deriving_inline] when there's already an implementation present (which I guess makes sense for round-trip checking, #338), but does so even when that deriver was only active for linting and not the normal build.
This defeats the claim of being able to drop dependencies for ppx-s, since for the normal build to succeed, I still need that deriver also in dune's (preprocess (pps ...)).

Or maybe I'm trying to use [@@deriving_inline] in an unusual way: to drop some deriver dependencies, but not all (so still have others present). The motivation for doing that is to use an unreleased version of the deriver (using opam pin) in a package that is to be released on opam (where it cannot have pins) without being forced to wait for the ppx's release.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions