From bb2bf59ff1ef7a5438520aaec9c63c126ed20411 Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Sat, 18 Aug 2018 09:51:40 +0300 Subject: [PATCH 1/4] Add test case for ocamllex + jbuild bug report Signed-off-by: Rudi Grinberg --- test/blackbox-tests/dune.inc | 10 ++++++++++ test/blackbox-tests/test-cases/ocamllex-jbuild/foo.mll | 8 ++++++++ test/blackbox-tests/test-cases/ocamllex-jbuild/jbuild | 5 +++++ test/blackbox-tests/test-cases/ocamllex-jbuild/run.t | 6 ++++++ 4 files changed, 29 insertions(+) create mode 100644 test/blackbox-tests/test-cases/ocamllex-jbuild/foo.mll create mode 100644 test/blackbox-tests/test-cases/ocamllex-jbuild/jbuild create mode 100644 test/blackbox-tests/test-cases/ocamllex-jbuild/run.t diff --git a/test/blackbox-tests/dune.inc b/test/blackbox-tests/dune.inc index 6fefde28..58cfaa8a 100644 --- a/test/blackbox-tests/dune.inc +++ b/test/blackbox-tests/dune.inc @@ -570,6 +570,14 @@ test-cases/ocamldep-multi-stanzas (progn (run %{exe:cram.exe} -test run.t) (diff? run.t run.t.corrected))))) +(alias + (name ocamllex-jbuild) + (deps (package dune) (source_tree test-cases/ocamllex-jbuild)) + (action + (chdir + test-cases/ocamllex-jbuild + (progn (run %{exe:cram.exe} -test run.t) (diff? run.t run.t.corrected))))) + (alias (name odoc) (deps (package dune) (source_tree test-cases/odoc)) @@ -875,6 +883,7 @@ (alias ocaml-config-macro) (alias ocaml-syntax) (alias ocamldep-multi-stanzas) + (alias ocamllex-jbuild) (alias odoc) (alias odoc-unique-mlds) (alias output-obj) @@ -970,6 +979,7 @@ (alias ocaml-config-macro) (alias ocaml-syntax) (alias ocamldep-multi-stanzas) + (alias ocamllex-jbuild) (alias output-obj) (alias package-dep) (alias path-variables) diff --git a/test/blackbox-tests/test-cases/ocamllex-jbuild/foo.mll b/test/blackbox-tests/test-cases/ocamllex-jbuild/foo.mll new file mode 100644 index 00000000..61581ffb --- /dev/null +++ b/test/blackbox-tests/test-cases/ocamllex-jbuild/foo.mll @@ -0,0 +1,8 @@ +{} + +rule f = parse + | _ { () } + +{ + print_endline "foo" +} diff --git a/test/blackbox-tests/test-cases/ocamllex-jbuild/jbuild b/test/blackbox-tests/test-cases/ocamllex-jbuild/jbuild new file mode 100644 index 00000000..172cb590 --- /dev/null +++ b/test/blackbox-tests/test-cases/ocamllex-jbuild/jbuild @@ -0,0 +1,5 @@ +(ocamllex + ((modules (foo)))) + +(executable + ((name foo))) diff --git a/test/blackbox-tests/test-cases/ocamllex-jbuild/run.t b/test/blackbox-tests/test-cases/ocamllex-jbuild/run.t new file mode 100644 index 00000000..75eaa6b7 --- /dev/null +++ b/test/blackbox-tests/test-cases/ocamllex-jbuild/run.t @@ -0,0 +1,6 @@ + $ dune exec ./foo.exe + File "jbuild", line 2, characters 3-10: + ((modules (foo)))) + ^^^^^^^ + Error: S-expression of the form ( ...) expected + [1] From da3def9dc79874be6d443c0c6b81329d5f9604e0 Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Sat, 18 Aug 2018 10:00:40 +0300 Subject: [PATCH 2/4] Fix parsing of ocamllex in jbuild files The long form would be rejected Signed-off-by: Rudi Grinberg --- src/dune_file.ml | 25 ++++++++++--------- .../test-cases/ocamllex-jbuild/run.t | 6 +---- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/src/dune_file.ml b/src/dune_file.ml index 4c3b71e4..f202cf45 100644 --- a/src/dune_file.ml +++ b/src/dune_file.ml @@ -1485,18 +1485,19 @@ module Rule = struct } let ocamllex_jbuild = - enter - (if_list - ~then_:( - record - (let%map modules = field "modules" (list string) - and mode = Mode.field in - { modules; mode })) - ~else_:( - repeat string >>| fun modules -> - { modules - ; mode = Standard - })) + peek_exn >>= function + | List (_, Atom (_, _) :: _) -> + enter ( + repeat string >>| fun modules -> + { modules + ; mode = Standard + } + ) + | _ -> + record + (let%map modules = field "modules" (list string) + and mode = Mode.field in + { modules; mode }) let ocamllex_dune = if_eos diff --git a/test/blackbox-tests/test-cases/ocamllex-jbuild/run.t b/test/blackbox-tests/test-cases/ocamllex-jbuild/run.t index 75eaa6b7..5c26a28d 100644 --- a/test/blackbox-tests/test-cases/ocamllex-jbuild/run.t +++ b/test/blackbox-tests/test-cases/ocamllex-jbuild/run.t @@ -1,6 +1,2 @@ $ dune exec ./foo.exe - File "jbuild", line 2, characters 3-10: - ((modules (foo)))) - ^^^^^^^ - Error: S-expression of the form ( ...) expected - [1] + foo From 20f9b2cf0aa8a820c2c604f49655b55af2ba425d Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Sat, 18 Aug 2018 10:24:01 +0300 Subject: [PATCH 3/4] Add test for (ocamllex (..)) form in jbuild Signed-off-by: Rudi Grinberg --- test/blackbox-tests/test-cases/ocamllex-jbuild/bar.mll | 8 ++++++++ test/blackbox-tests/test-cases/ocamllex-jbuild/jbuild | 2 ++ 2 files changed, 10 insertions(+) create mode 100644 test/blackbox-tests/test-cases/ocamllex-jbuild/bar.mll diff --git a/test/blackbox-tests/test-cases/ocamllex-jbuild/bar.mll b/test/blackbox-tests/test-cases/ocamllex-jbuild/bar.mll new file mode 100644 index 00000000..97715204 --- /dev/null +++ b/test/blackbox-tests/test-cases/ocamllex-jbuild/bar.mll @@ -0,0 +1,8 @@ +{} + +rule f = parse + | _ { () } + +{ + print_endline "bar" +} diff --git a/test/blackbox-tests/test-cases/ocamllex-jbuild/jbuild b/test/blackbox-tests/test-cases/ocamllex-jbuild/jbuild index 172cb590..999f215c 100644 --- a/test/blackbox-tests/test-cases/ocamllex-jbuild/jbuild +++ b/test/blackbox-tests/test-cases/ocamllex-jbuild/jbuild @@ -1,5 +1,7 @@ (ocamllex ((modules (foo)))) +(ocamllex (bar)) + (executable ((name foo))) From 4c85d058c94ee6d832f3e6f73d956cb9e7743e49 Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Mon, 20 Aug 2018 20:05:45 +0300 Subject: [PATCH 4/4] Update CHANGES Signed-off-by: Rudi Grinberg --- CHANGES.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 36a6fd9a..aa6da4e4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -17,6 +17,9 @@ next - Improve error message for `dune utop` without a library name (#1154, fix #1149, @emillon) +- Fix parsing `ocamllex` stanza in jbuild files (#1150, @rgrinberg) + + 1.1.1 (08/08/2018) ------------------