2017-05-03 3 views
2

J'essaie d'utiliser jbuilder en même temps que ppx_deriving (ppx_deriving_yojson spécifiquement) mais je suis resté bloqué pendant plus d'une heure maintenant. Mon approche actuelle est un fichier jbuild, contenant les éléments suivants:Comment utiliser jbuild et ppx_driver avec ppx_deriving

(jbuild_version 1) 
(executables 
((names (my-binary)) 
(libraries 
(ppx_deriving 
    ppx_deriving_yojson 
    cohttp 
    yojson)) 
(preprocess (pps (ppx_deriving_yojson ppx_driver.runner))))) 

Mais cela se traduit par

Command [5] exited with code 1: 
$ (cd _build/default && ../.ppx/default/ppx_deriving_yojson+ppx_driver.runner/ppx.exe --dump-ast -o src/my_file.pp.ml --impl src/my_file.ml) 
File "src/my_file.ml", line 16, characters 5-13: 
Error: Attribute `deriving' was not used 

Exécution du produit ppx_driver en _build/.ppx/default/ppx_deriving_yojson+ppx_driver.runner/ppx.exe manuellement avec -print-transformations donne une sortie vide, donc je manque évidemment quelque chose.

Le code se construit correctement avec topkg en incluant simplement ppx_deriving et ppx_deriving_yojson comme dépendances.

+0

Quelle version de ppx_deriving + ppx_deriving_yojson utilisez-vous? jbuilder ne fonctionnera qu'avec ppxs basé sur ocaml-migrate-parsetree et il n'y a pas encore eu de version d'opam de ppx_deriving basée sur ocaml-migrate-parsetree. – hcarty

Répondre

1

Cela devrait être possible à partir des versions plus récentes de ppx_deriving_yojson.

code:

type t = {x: int; y: int} [@@deriving to_yojson] 

let() = print_endline (Yojson.Safe.to_string (to_yojson {x= 1; y= 2})) 

Et un exemple de fichier jbuild:

(jbuild_version 1) 

(executables 
((names (main)) 
    (preprocess (pps (ppx_deriving_yojson))) 
    (libraries (ppx_deriving_yojson.runtime)))) 

(install 
((section bin) 
    (files ((main.exe as main)))))