@@ -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;;
0 commit comments