Skip to content

Commit

Permalink
pass compiler flags to ppx directive
Browse files Browse the repository at this point in the history
Signed-off-by: Javier Chavarri <[email protected]>
  • Loading branch information
jchavarri committed Nov 16, 2022
1 parent c866b7e commit 5de0797
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 21 deletions.
5 changes: 4 additions & 1 deletion src/dune_rules/merlin.ml
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ module Processed = struct
Path.Set.to_list_map src_dirs ~f:(make_directive_of_path "S")
in
let flags =
let compiler_flags = flags in
let flags =
match flags with
| [] -> []
Expand All @@ -108,7 +109,9 @@ module Processed = struct
| `Melange ->
make_directive "FLG"
(Sexp.List
[ Atom (Pp_kind.to_flag Ppx); Atom "melc -as-ppx -bs-jsx 3" ])
(Atom (Pp_kind.to_flag Ppx)
:: Atom "melc" :: Atom "-as-ppx"
:: List.map ~f:(fun s -> Sexp.Atom s) compiler_flags))
:: flags
in
let suffixes =
Expand Down
65 changes: 45 additions & 20 deletions test/blackbox-tests/test-cases/melange/merlin.t
Original file line number Diff line number Diff line change
Expand Up @@ -6,38 +6,55 @@
> EOF

$ lib=foo
$ cat >dune <<EOF
$ mkdir $lib
$ cat >$lib/dune <<EOF
> (library
> (name $lib)
> (private_modules bar)
> (flags :standard -bs-jsx 3)
> (flags -bs-jsx 3)
> (modes melange))
> EOF

$ touch bar.ml $lib.ml
$ touch $lib/bar.ml $lib/$lib.ml
$ dune build @check
$ dune ocaml-merlin --dump-config="$(pwd)" | grep -i "$lib"
Foo
$TESTCASE_ROOT/_build/default/.foo.objs/melange)
Foo__
$TESTCASE_ROOT/_build/default/.foo.objs/melange)
Foo__
Foo__
$TESTCASE_ROOT/_build/default/.foo.objs/melange)
Foo__

All 3 entries (Foo, Foo__ and Bar) contain a ppx directive
All library entries contain a ppx directive

$ dune ocaml-merlin --dump-config="$(pwd)" | grep -i "ppx"
(FLG (-ppx "melc -as-ppx -bs-jsx 3"))
(FLG (-ppx "melc -as-ppx -bs-jsx 3"))
(FLG (-ppx "melc -as-ppx -bs-jsx 3"))
$ dune ocaml-merlin --dump-config="$(pwd)/$lib"
Foo
((STDLIB /home/me/code/dune/_opam/lib/melange)
(EXCLUDE_QUERY_DIR)
(B
$TESTCASE_ROOT/_build/default/foo/.foo.objs/melange)
(S
$TESTCASE_ROOT/foo)
(FLG (-ppx melc -as-ppx -open Foo__ -bs-jsx 3))
(FLG (-open Foo__ -bs-jsx 3)))
Bar
((STDLIB /home/me/code/dune/_opam/lib/melange)
(EXCLUDE_QUERY_DIR)
(B
$TESTCASE_ROOT/_build/default/foo/.foo.objs/melange)
(S
$TESTCASE_ROOT/foo)
(FLG (-ppx melc -as-ppx -open Foo__ -bs-jsx 3))
(FLG (-open Foo__ -bs-jsx 3)))
Foo__
((STDLIB /home/me/code/dune/_opam/lib/melange)
(EXCLUDE_QUERY_DIR)
(B
$TESTCASE_ROOT/_build/default/foo/.foo.objs/melange)
(S
$TESTCASE_ROOT/foo)
(FLG (-ppx melc -as-ppx -open Foo__ -bs-jsx 3))
(FLG (-open Foo__ -bs-jsx 3)))

$ target=output
$ cat >dune <<EOF
> (melange.emit
> (target "$target")
> (entries main)
> (flags -foo bar)
> (module_system commonjs))
> EOF

Expand All @@ -46,7 +63,15 @@ All 3 entries (Foo, Foo__ and Bar) contain a ppx directive
$ dune ocaml-merlin --dump-config="$(pwd)" | grep -i "$target"
$TESTCASE_ROOT/_build/default/.output.mobjs/melange)

The melange.emit entry contains a ppx directive
The melange.emit entry contains a ppx directive, but no -bs-jsx flag

$ dune ocaml-merlin --dump-config="$(pwd)" | grep -i "ppx"
(FLG (-ppx "melc -as-ppx -bs-jsx 3"))
$ dune ocaml-merlin --dump-config="$(pwd)"
Main
((STDLIB /home/me/code/dune/_opam/lib/melange)
(EXCLUDE_QUERY_DIR)
(B
$TESTCASE_ROOT/_build/default/.output.mobjs/melange)
(S
$TESTCASE_ROOT)
(FLG (-ppx melc -as-ppx -foo bar))
(FLG (-foo bar)))

0 comments on commit 5de0797

Please sign in to comment.