41 lines
733 B
OCaml
41 lines
733 B
OCaml
open Stdune
|
|
|
|
type t = ..
|
|
|
|
module Parser = struct
|
|
type nonrec t = string * t list Sexp.Of_sexp.t
|
|
end
|
|
|
|
let syntax =
|
|
Syntax.create ~name:"dune" ~desc:"the dune language"
|
|
[ (0, 0) (* Jbuild syntax *)
|
|
; (1, 0)
|
|
]
|
|
|
|
module File_kind = struct
|
|
type t = Jbuild | Dune
|
|
end
|
|
|
|
let file_kind () =
|
|
let open Sexp.Of_sexp in
|
|
Syntax.get_exn syntax >>| fun ver ->
|
|
if ver < (1, 0) then File_kind.Jbuild else Dune
|
|
|
|
module Of_sexp = struct
|
|
include Sexp.Of_sexp
|
|
|
|
let record parse =
|
|
Syntax.get_exn syntax >>= fun ver ->
|
|
if ver < (1, 0) then
|
|
record parse
|
|
else
|
|
fields parse
|
|
|
|
let list parse =
|
|
Syntax.get_exn syntax >>= fun ver ->
|
|
if ver < (1, 0) then
|
|
list parse
|
|
else
|
|
repeat parse
|
|
end
|