diff --git a/src/dune_engine/dune_project.ml b/src/dune_engine/dune_project.ml index ffa7c0a00f2..f2a87929e34 100644 --- a/src/dune_engine/dune_project.ml +++ b/src/dune_engine/dune_project.ml @@ -345,12 +345,6 @@ end module Melange_syntax = struct let name = "melange" - - let t = - Dune_lang.Syntax.create ~name ~desc:"support for Melange compiler" - [ ((0, 1), `Since (3, 6)) ] - - let () = Extension.register_simple t (return []) end let explicit_extensions_map explicit_extensions = diff --git a/src/dune_engine/dune_project.mli b/src/dune_engine/dune_project.mli index f4198e25972..aaed8dffe05 100644 --- a/src/dune_engine/dune_project.mli +++ b/src/dune_engine/dune_project.mli @@ -202,5 +202,5 @@ val encode : t -> Dune_lang.t list val dune_site_extension : unit Extension.t module Melange_syntax : sig - val t : Dune_lang.Syntax.t + val name : string end diff --git a/src/dune_rules/dir_status.ml b/src/dune_rules/dir_status.ml index e18ff78355e..9653a4c7af3 100644 --- a/src/dune_rules/dir_status.ml +++ b/src/dune_rules/dir_status.ml @@ -50,7 +50,7 @@ let get_include_subdirs stanzas = let find_module_stanza stanzas = List.find_map stanzas ~f:(fun stanza -> match stanza with - | Melange_emit { loc; _ } + | Melange_stanzas.Emit.T { loc; _ } | Library { buildable = { loc; _ }; _ } | Executables { buildable = { loc; _ }; _ } | Tests { exes = { buildable = { loc; _ }; _ }; _ } -> Some loc diff --git a/src/dune_rules/dune_file.ml b/src/dune_rules/dune_file.ml index 18647389d2a..5d06876424d 100644 --- a/src/dune_rules/dune_file.ml +++ b/src/dune_rules/dune_file.ml @@ -455,7 +455,7 @@ module Mode_conf = struct ; ("native", return @@ Ocaml Native) ; ("best", return @@ Ocaml Best) ; ( "melange" - , Dune_lang.Syntax.since Dune_project.Melange_syntax.t (0, 1) + , Dune_lang.Syntax.since Melange_stanzas.syntax (0, 1) >>> return Melange ) ] @@ -2274,7 +2274,6 @@ type Stanza.t += | Cram of Cram_stanza.t | Generate_sites_module of Generate_sites_module.t | Plugin of Plugin.t - | Melange_emit of Melange_stanzas.Emit.t module Stanzas = struct type t = Stanza.t list @@ -2391,10 +2390,6 @@ module Stanzas = struct , let+ () = Dune_lang.Syntax.since Section.dune_site_syntax (0, 1) and+ t = Plugin.decode in [ Plugin t ] ) - ; ( "melange.emit" - , let+ () = Dune_lang.Syntax.since Dune_project.Melange_syntax.t (0, 1) - and+ t = Melange_stanzas.Emit.decode in - [ Melange_emit t ] ) ] let () = Dune_project.Lang.register Stanza.syntax stanzas diff --git a/src/dune_rules/dune_file.mli b/src/dune_rules/dune_file.mli index b8b63958a94..9ed679282f1 100644 --- a/src/dune_rules/dune_file.mli +++ b/src/dune_rules/dune_file.mli @@ -482,7 +482,6 @@ type Stanza.t += | Cram of Cram_stanza.t | Generate_sites_module of Generate_sites_module.t | Plugin of Plugin.t - | Melange_emit of Melange_stanzas.Emit.t val stanza_package : Stanza.t -> Package.t option diff --git a/src/dune_rules/gen_rules.ml b/src/dune_rules/gen_rules.ml index ed079fa5f74..2e16af66545 100644 --- a/src/dune_rules/gen_rules.ml +++ b/src/dune_rules/gen_rules.ml @@ -144,7 +144,7 @@ end = struct | true -> let+ () = Mdx.gen_rules ~sctx ~dir ~scope ~expander mdx in empty_none) - | Melange_emit mel -> + | Melange_stanzas.Emit.T mel -> let+ cctx, merlin = Melange_rules.setup_emit_cmj_rules ~dir_contents ~dir ~scope ~sctx ~expander mel @@ -380,7 +380,7 @@ let under_melange_emit_target ~dir = | None -> None | Some stanzas -> List.find_map stanzas.stanzas ~f:(function - | Melange_emit mel -> + | Melange_stanzas.Emit.T mel -> let target_dir = Path.Build.relative parent mel.target in Option.some_if (Path.Build.equal target_dir dir) mel | _ -> None) @@ -506,7 +506,7 @@ let gen_rules ~sctx ~dir components : Build_config.gen_rules_result Memo.t = | None -> subdirs | Some stanzas -> List.filter_map stanzas.stanzas ~f:(function - | Melange_emit mel -> Some mel.target + | Melange_stanzas.Emit.T mel -> Some mel.target | _ -> None) |> String.Set.of_list |> String.Set.union subdirs in diff --git a/src/dune_rules/melange_stanzas.ml b/src/dune_rules/melange_stanzas.ml index 07e4ff53b9f..50c0a305a0e 100644 --- a/src/dune_rules/melange_stanzas.ml +++ b/src/dune_rules/melange_stanzas.ml @@ -20,6 +20,8 @@ module Emit = struct ; javascript_extension : string } + type Stanza.t += T of t + let decode_lib = let+ loc = loc and+ t = @@ -125,3 +127,12 @@ module Emit = struct ; modules_without_implementation }) end + +let syntax = + Dune_lang.Syntax.create ~name:Dune_project.Melange_syntax.name + ~desc:"support for Melange compiler" + [ ((0, 1), `Since (3, 6)) ] + +let () = + Dune_project.Extension.register_simple syntax + (return [ ("melange.emit", Emit.decode >>| fun x -> [ Emit.T x ]) ]) diff --git a/src/dune_rules/melange_stanzas.mli b/src/dune_rules/melange_stanzas.mli index 0413bfadf69..b92ecc83438 100644 --- a/src/dune_rules/melange_stanzas.mli +++ b/src/dune_rules/melange_stanzas.mli @@ -20,5 +20,9 @@ module Emit : sig ; javascript_extension : string } + type Stanza.t += T of t + val decode : t Dune_lang.Decoder.t end + +val syntax : Syntax.t diff --git a/src/dune_rules/ml_sources.ml b/src/dune_rules/ml_sources.ml index 2010d0d7ea4..4e3afa11bc4 100644 --- a/src/dune_rules/ml_sources.ml +++ b/src/dune_rules/ml_sources.ml @@ -378,7 +378,7 @@ let modules_of_stanzas dune_file ~dir ~scope ~lookup_vlib ~modules = Modules_group.relocate_alias_module modules ~src_dir in Memo.return (`Executables (exes, modules, obj_dir)) - | Melange_emit mel -> + | Melange_stanzas.Emit.T mel -> let modules = let modules = Modules_field_evaluator.eval ~modules ~stanza_loc:mel.loc diff --git a/src/dune_rules/ocaml_flags.ml b/src/dune_rules/ocaml_flags.ml index 118d2c35bf7..7e55f79ec4d 100644 --- a/src/dune_rules/ocaml_flags.ml +++ b/src/dune_rules/ocaml_flags.ml @@ -95,7 +95,7 @@ module Spec = struct and+ native = field_oslu "ocamlopt_flags" and+ melange = field_oslu - ~check:(Dune_lang.Syntax.since Dune_project.Melange_syntax.t (0, 1)) + ~check:(Dune_lang.Syntax.since Melange_stanzas.syntax (0, 1)) "melange.compile_flags" in let specific = Lib_mode.Map.make ~byte ~native ~melange in