From 5aa9a07f1a7dfa33432cbf40c42ce68fae36b5c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Dimino?= Date: Thu, 2 Aug 2018 09:27:55 +0100 Subject: [PATCH] Fix merlin generation in presence of include_subdirs (#1083) Signed-off-by: Jeremie Dimino --- src/gen_rules.ml | 6 +++++- src/merlin.ml | 10 +++++++--- src/merlin.mli | 1 + .../test-cases/merlin-tests/dune-project | 2 +- test/blackbox-tests/test-cases/merlin-tests/lib/dune | 4 +++- .../test-cases/merlin-tests/lib/subdir/file.ml | 1 + test/blackbox-tests/test-cases/merlin-tests/run.t | 1 + 7 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 test/blackbox-tests/test-cases/merlin-tests/lib/subdir/file.ml diff --git a/src/gen_rules.ml b/src/gen_rules.ml index cd5198f3..fb0bfa51 100644 --- a/src/gen_rules.ml +++ b/src/gen_rules.ml @@ -671,7 +671,11 @@ module Gen(P : Install_rules.Params) = struct loop stanzas [] [] in Option.iter (Merlin.merge_all merlins) ~f:(fun m -> - Merlin.add_rules sctx ~dir:ctx_dir ~scope ~dir_kind:kind + let more_src_dirs = + List.map (Dir_contents.dirs dir_contents) ~f:(fun dc -> + Path.drop_optional_build_context (Dir_contents.dir dc)) + in + Merlin.add_rules sctx ~dir:ctx_dir ~more_src_dirs ~scope ~dir_kind:kind (Merlin.add_source_dir m src_dir)); Utop.setup sctx ~dir:ctx_dir ~scope ~libs:( List.filter_map stanzas ~f:(function diff --git a/src/merlin.ml b/src/merlin.ml index 9aa03dcd..64d02987 100644 --- a/src/merlin.ml +++ b/src/merlin.ml @@ -109,7 +109,8 @@ let ppx_flags sctx ~dir:_ ~scope ~dir_kind { preprocess; libname; _ } = end | Other -> [] -let dot_merlin sctx ~dir ~scope ~dir_kind ({ requires; flags; _ } as t) = +let dot_merlin sctx ~dir ~more_src_dirs ~scope ~dir_kind + ({ requires; flags; _ } as t) = match Path.drop_build_context dir with | None -> () | Some remaindir -> @@ -137,6 +138,9 @@ let dot_merlin sctx ~dir ~scope ~dir_kind ({ requires; flags; _ } as t) = |> Path.drop_optional_build_context) , Path.Set.add obj_dirs (Lib.obj_dir lib))) in + let src_dirs = + Path.Set.union src_dirs (Path.Set.of_list more_src_dirs) + in Dot_file.to_string ~remaindir ~ppx:(ppx_flags sctx ~dir ~scope ~dir_kind t) @@ -162,6 +166,6 @@ let merge_all = function | [] -> None | init::ts -> Some (List.fold_left ~init ~f:merge_two ts) -let add_rules sctx ~dir ~scope ~dir_kind merlin = +let add_rules sctx ~dir ~more_src_dirs ~scope ~dir_kind merlin = if (SC.context sctx).merlin then - dot_merlin sctx ~dir ~scope ~dir_kind merlin + dot_merlin sctx ~dir ~more_src_dirs ~scope ~dir_kind merlin diff --git a/src/merlin.mli b/src/merlin.mli index c45457a0..86f2bc2a 100644 --- a/src/merlin.mli +++ b/src/merlin.mli @@ -22,6 +22,7 @@ val merge_all : t list -> t option val add_rules : Super_context.t -> dir:Path.t + -> more_src_dirs:Path.t list -> scope:Scope.t -> dir_kind:File_tree.Dune_file.Kind.t -> t diff --git a/test/blackbox-tests/test-cases/merlin-tests/dune-project b/test/blackbox-tests/test-cases/merlin-tests/dune-project index de4fc209..7655de07 100644 --- a/test/blackbox-tests/test-cases/merlin-tests/dune-project +++ b/test/blackbox-tests/test-cases/merlin-tests/dune-project @@ -1 +1 @@ -(lang dune 1.0) +(lang dune 1.1) diff --git a/test/blackbox-tests/test-cases/merlin-tests/lib/dune b/test/blackbox-tests/test-cases/merlin-tests/lib/dune index 177e3674..a3f77a75 100644 --- a/test/blackbox-tests/test-cases/merlin-tests/lib/dune +++ b/test/blackbox-tests/test-cases/merlin-tests/lib/dune @@ -6,5 +6,7 @@ (library (name bar) - (modules ()) + (modules file) (preprocess (pps fooppx))) + +(include_subdirs unqualified) diff --git a/test/blackbox-tests/test-cases/merlin-tests/lib/subdir/file.ml b/test/blackbox-tests/test-cases/merlin-tests/lib/subdir/file.ml new file mode 100644 index 00000000..7fecab12 --- /dev/null +++ b/test/blackbox-tests/test-cases/merlin-tests/lib/subdir/file.ml @@ -0,0 +1 @@ +let x = 42 diff --git a/test/blackbox-tests/test-cases/merlin-tests/run.t b/test/blackbox-tests/test-cases/merlin-tests/run.t index 91b53db1..81835b70 100644 --- a/test/blackbox-tests/test-cases/merlin-tests/run.t +++ b/test/blackbox-tests/test-cases/merlin-tests/run.t @@ -26,6 +26,7 @@ S $LIB_PREFIX/lib/findlib S $LIB_PREFIX/lib/ocaml S . + S subdir FLG -ppx '$PPX/fooppx@./ppx.exe --as-ppx --cookie '\''library-name="foo"'\''' FLG -open Foo -w -40 -open Bar -w -40