Skip to content

Commit 6938f76

Browse files
authored
Decode package fields consistently (#12625)
* refactor: Use [Stanza_pkg].field_opt consistently Signed-off-by: Rudi Grinberg <[email protected]>
1 parent e97c079 commit 6938f76

File tree

14 files changed

+40
-53
lines changed

14 files changed

+40
-53
lines changed

src/dune_lang/stanza_pkg.ml

Lines changed: 19 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -89,30 +89,7 @@ let resolve (project : Dune_project.t) mask (loc, name) =
8989
(Package.Name.Map.keys packages |> List.map ~f:Package.Name.to_string)))
9090
;;
9191

92-
let decode =
93-
let open Decoder in
94-
let+ p = Dune_project.get_exn ()
95-
and+ mask = Package_mask.decode ()
96-
and+ loc, name = located Package.Name.decode in
97-
match resolve p mask (loc, name) with
98-
| Ok x -> x
99-
| Error e -> raise (User_error.E e)
100-
;;
101-
102-
let field ~stanza =
103-
let open Decoder in
104-
let* mask = Package_mask.decode () in
105-
map_validate
106-
(let+ p = Dune_project.get_exn ()
107-
and+ pkg = field_o "package" (located Package.Name.decode) in
108-
p, pkg)
109-
~f:(fun (p, pkg) ->
110-
match pkg with
111-
| None -> default p stanza
112-
| Some name -> resolve p mask name)
113-
;;
114-
115-
let field_opt ?check () =
92+
let field_opt ?check project =
11693
let open Decoder in
11794
let decode =
11895
let decode = Package.Name.decode in
@@ -122,11 +99,24 @@ let field_opt ?check () =
12299
in
123100
let* mask = Package_mask.decode () in
124101
map_validate
125-
(let+ p = Dune_project.get_exn ()
126-
and+ pkg = field_o "package" (located decode) in
127-
p, pkg)
128-
~f:(fun (p, pkg) ->
102+
(field_o "package" (located decode))
103+
~f:(fun pkg ->
129104
match pkg with
130105
| None -> Ok None
131-
| Some name -> resolve p mask name |> Result.map ~f:Option.some)
106+
| Some ((loc, _name) as name) ->
107+
resolve project mask name |> Result.map ~f:(fun p -> Some (loc, p)))
108+
;;
109+
110+
let field ~stanza =
111+
let open Decoder in
112+
let* project = Dune_project.get_exn () in
113+
map_validate (field_opt project) ~f:(function
114+
| None -> default project stanza
115+
| Some (_, p) -> Ok p)
116+
;;
117+
118+
let field_opt ?check () =
119+
let open Decoder in
120+
let* project = Dune_project.get_exn () in
121+
field_opt ?check project
132122
;;

src/dune_lang/stanza_pkg.mli

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
open Import
22

3-
val decode : Package.t Decoder.t
4-
53
val resolve
64
: Dune_project.t
75
-> Package_mask.t
86
-> Loc.t * Package.Name.t
97
-> (Package.t, User_message.t) Result.t
108

119
val field : stanza:string -> Package.t Decoder.fields_parser
12-
val field_opt : ?check:unit Decoder.t -> unit -> Package.t option Decoder.fields_parser
10+
11+
val field_opt
12+
: ?check:unit Decoder.t
13+
-> unit
14+
-> (Loc.t * Package.t) option Decoder.fields_parser
15+
1316
val default_exn : loc:Loc.t -> Dune_project.t -> string -> Package.t

src/dune_lang/stanzas/alias_conf.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ let decode =
2323
String_with_vars.add_user_vars_to_decoding_env
2424
(Bindings.var_names deps)
2525
(let+ name = field "name" Alias.decode
26-
and+ package = field_o "package" Stanza_pkg.decode
26+
and+ package = Stanza_pkg.field_opt () >>| Option.map ~f:snd
2727
and+ action =
2828
field_o
2929
"action"

src/dune_rules/coq/coq_stanza.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ module Theory = struct
240240
let decode =
241241
fields
242242
(let+ name = field "name" Coq_lib_name.decode
243-
and+ package = field_o "package" Stanza_pkg.decode
243+
and+ package = Stanza_pkg.field_opt () >>| Option.map ~f:snd
244244
and+ project = Dune_project.get_exn ()
245245
and+ public = coq_public_decode
246246
and+ synopsis = field_o "synopsis" string

src/dune_rules/cram/cram_stanza.ml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ let decode =
7979
and+ locks = Locks.field ~check:(Dune_lang.Syntax.since Stanza.syntax (2, 9)) ()
8080
and+ package =
8181
Stanza_pkg.field_opt ~check:(Dune_lang.Syntax.since Stanza.syntax (2, 8)) ()
82+
>>| Option.map ~f:snd
8283
and+ runtest_alias =
8384
field_o
8485
"runtest_alias"

src/dune_rules/mdx.ml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@ let decode =
237237
and+ enabled_if = Enabled_if.decode ~allowed_vars:Any ~since:(Some (2, 9)) ()
238238
and+ package =
239239
Stanza_pkg.field_opt () ~check:(Dune_lang.Syntax.since Stanza.syntax (2, 9))
240+
>>| Option.map ~f:snd
240241
and+ packages =
241242
field
242243
~default:[]

src/dune_rules/melange/melange_stanzas.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ module Emit = struct
112112
field "module_systems" module_systems ~default:[ Melange.Module_system.default ]
113113
and+ libraries =
114114
field "libraries" (Lib_dep.L.decode ~allow_re_export:false) ~default:[]
115-
and+ package = field_o "package" Stanza_pkg.decode
115+
and+ package = Stanza_pkg.field_opt () >>| Option.map ~f:snd
116116
and+ runtime_deps =
117117
field
118118
"runtime_deps"

src/dune_rules/stanzas/executables.ml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,7 @@ end = struct
8181
let+ names = if multi then multi_fields else single_fields
8282
and+ loc = loc
8383
and+ dune_syntax = Dune_lang.Syntax.get_exn Stanza.syntax
84-
and+ package =
85-
field_o
86-
"package"
87-
(let+ loc = loc
88-
and+ pkg = Stanza_pkg.decode in
89-
loc, pkg)
84+
and+ package = Stanza_pkg.field_opt ()
9085
and+ project = Dune_project.get_exn () in
9186
let names, public_names = names in
9287
let names =

src/dune_rules/stanzas/library.ml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -213,9 +213,7 @@ let decode =
213213
(Dune_lang.Syntax.since Stanza.syntax (2, 7)
214214
>>> fields (field "ppx" (located Lib_name.decode)))
215215
and+ package =
216-
field_o
217-
"package"
218-
(Dune_lang.Syntax.since Stanza.syntax (2, 8) >>> located Stanza_pkg.decode)
216+
Stanza_pkg.field_opt ~check:(Dune_lang.Syntax.since Stanza.syntax (2, 8)) ()
219217
and+ melange_runtime_deps =
220218
field
221219
"melange.runtime_deps"

src/dune_rules/stanzas/parameter.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ let decode =
8383
}
8484
and+ name = field_o "name" Lib_name.Local.decode_loc
8585
and+ public = field_o "public_name" (Public_lib.decode ~allow_deprecated_names:false)
86-
and+ package = field_o "package" (located Stanza_pkg.decode)
86+
and+ package = Stanza_pkg.field_opt ()
8787
and+ enabled_if = Enabled_if.decode ~allowed_vars:Any ~since:None ()
8888
and+ synopsis = field_o "synopsis" string
8989
and+ optional = field_b "optional" in

0 commit comments

Comments
 (0)