@@ -61,6 +61,7 @@ module Processed = struct
6161 ; flags : string list
6262 ; extensions : string option Ml_kind.Dict .t list
6363 ; indexes : Path .t list
64+ ; parameters : Module_name .t list
6465 }
6566
6667 let dyn_of_config
@@ -73,6 +74,7 @@ module Processed = struct
7374 ; flags
7475 ; extensions
7576 ; indexes
77+ ; parameters
7678 }
7779 =
7880 let open Dyn in
@@ -86,6 +88,7 @@ module Processed = struct
8688 ; " flags" , list string flags
8789 ; " extensions" , list (Ml_kind.Dict. to_dyn (Dyn. option string )) extensions
8890 ; " indexes" , list Path. to_dyn indexes
91+ ; " parameters" , list Module_name. to_dyn parameters
8992 ]
9093 ;;
9194
@@ -124,7 +127,7 @@ module Processed = struct
124127 type nonrec t = t
125128
126129 let name = " merlin-conf"
127- let version = 7
130+ let version = 8
128131 let to_dyn _ = Dyn. String " Use [dune ocaml dump-dot-merlin] instead"
129132
130133 let test_example () =
@@ -138,6 +141,7 @@ module Processed = struct
138141 ; flags = [ " -x" ]
139142 ; extensions = [ { Ml_kind.Dict. intf = None ; impl = Some " ext" } ]
140143 ; indexes = []
144+ ; parameters = []
141145 }
142146 ; per_file_config = Path.Build.Map. empty
143147 ; pp_config =
@@ -191,6 +195,7 @@ module Processed = struct
191195 ; flags
192196 ; extensions
193197 ; indexes
198+ ; parameters
194199 }
195200 =
196201 let make_directive tag value = Sexp. List [ Atom tag; value ] in
@@ -240,7 +245,20 @@ module Processed = struct
240245 in
241246 Some (make_directive " FLG" (Sexp. List open_flags))
242247 in
243- List. filter_opt [ base_flags; pp_flags; open_flags ]
248+ let parameter_flags =
249+ match parameters with
250+ | [] -> None
251+ | params ->
252+ Some
253+ (make_directive
254+ " FLG"
255+ (Sexp. List
256+ (List. concat_map
257+ ~f: (fun m ->
258+ [ Sexp. Atom " -parameter" ; Sexp. Atom (Module_name. to_string m) ])
259+ params)))
260+ in
261+ List. filter_opt [ base_flags; pp_flags; open_flags; parameter_flags ]
244262 in
245263 let unit_name = [ make_directive " UNIT_NAME" (Sexp. Atom unit_name) ] in
246264 let suffixes =
@@ -297,6 +315,7 @@ module Processed = struct
297315 hidden_src_dirs
298316 extensions
299317 indexes
318+ parameters
300319 =
301320 let b = Buffer. create 256 in
302321 let printf = Printf. bprintf b in
@@ -327,6 +346,14 @@ module Processed = struct
327346 print " # FLG" ;
328347 List. iter flags ~f: (fun f -> printf " %s" (quote_for_dot_merlin f));
329348 print " \n " );
349+ let () =
350+ match parameters with
351+ | [] -> ()
352+ | params ->
353+ print " # FLG" ;
354+ List. iter params ~f: (fun f -> printf " -parameter %s" (Module_name. to_string f));
355+ print " \n "
356+ in
330357 Buffer. contents b
331358 ;;
332359
@@ -428,6 +455,7 @@ module Processed = struct
428455 ; flags
429456 ; extensions
430457 ; indexes
458+ ; parameters = _
431459 }
432460 }
433461 ->
@@ -452,7 +480,8 @@ module Processed = struct
452480 hidden_obj_dirs
453481 hidden_src_dirs
454482 extensions
455- indexes)
483+ indexes
484+ init.config.parameters)
456485 ;;
457486end
458487
@@ -482,6 +511,7 @@ module Unprocessed = struct
482511 ; extensions : string option Ml_kind.Dict .t list
483512 ; readers : string list String.Map .t
484513 ; mode : Lib_mode .t
514+ ; parameters : Module_name .t list Resolve .t
485515 }
486516
487517 type t =
@@ -502,6 +532,7 @@ module Unprocessed = struct
502532 ~dialects
503533 ~ident
504534 ~modes
535+ ~parameters
505536 =
506537 (* Merlin shouldn't cause the build to fail, so we just ignore errors *)
507538 let mode =
@@ -526,6 +557,7 @@ module Unprocessed = struct
526557 ; objs_dirs
527558 ; extensions
528559 ; readers
560+ ; parameters
529561 }
530562 in
531563 { ident; config; modules }
@@ -654,6 +686,7 @@ module Unprocessed = struct
654686 ; preprocess = _
655687 ; libname = _
656688 ; mode
689+ ; parameters
657690 }
658691 } as t )
659692 sctx
@@ -713,6 +746,7 @@ module Unprocessed = struct
713746 let requires_hidden = Resolve. peek requires_hidden |> Result. value ~default: [] in
714747 add_lib_dirs sctx mode requires_hidden
715748 in
749+ let parameters = Resolve. peek parameters |> Result. value ~default: [] in
716750 let src_dirs =
717751 Path.Set. of_list_map ~f: Path. source more_src_dirs |> Path.Set. union deps_src_dirs
718752 in
@@ -727,6 +761,7 @@ module Unprocessed = struct
727761 ; flags
728762 ; extensions
729763 ; indexes
764+ ; parameters
730765 }
731766 and + pp_config = pp_config t (Super_context. context sctx) ~expander in
732767 let per_file_config =
0 commit comments