Simplify resolution with Result combinators
Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
This commit is contained in:
parent
6a08e36f4b
commit
dc681a5961
24
src/lib.ml
24
src/lib.ml
|
@ -575,7 +575,7 @@ module Dep_stack = struct
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
let check_private_deps ~(lib : lib) ~loc ~allow_private_deps =
|
let check_private_deps lib ~loc ~allow_private_deps =
|
||||||
if (not allow_private_deps) && Status.is_private lib.info.status then
|
if (not allow_private_deps) && Status.is_private lib.info.status then
|
||||||
Result.Error (Error (
|
Result.Error (Error (
|
||||||
Private_deps_not_allowed { private_dep = lib ; pd_loc = loc }))
|
Private_deps_not_allowed { private_dep = lib ; pd_loc = loc }))
|
||||||
|
@ -689,7 +689,7 @@ and resolve_dep db name ~allow_private_deps ~loc ~stack : t Or_exn.t =
|
||||||
match find_internal db name ~stack with
|
match find_internal db name ~stack with
|
||||||
| St_initializing id ->
|
| St_initializing id ->
|
||||||
Error (Dep_stack.dependency_cycle stack id)
|
Error (Dep_stack.dependency_cycle stack id)
|
||||||
| St_found lib -> check_private_deps ~lib ~loc ~allow_private_deps
|
| St_found lib -> check_private_deps lib ~loc ~allow_private_deps
|
||||||
| St_not_found ->
|
| St_not_found ->
|
||||||
Error (Error (Library_not_available { loc; name; reason = Not_found }))
|
Error (Error (Library_not_available { loc; name; reason = Not_found }))
|
||||||
| St_hidden (_, hidden) ->
|
| St_hidden (_, hidden) ->
|
||||||
|
@ -819,20 +819,12 @@ and resolve_user_deps db deps ~allow_private_deps ~pps ~stack =
|
||||||
closure_with_overlap_checks None pps ~stack
|
closure_with_overlap_checks None pps ~stack
|
||||||
in
|
in
|
||||||
let deps =
|
let deps =
|
||||||
let rec check_runtime_deps acc pps = function
|
(deps >>= fun deps ->
|
||||||
| [] -> loop acc pps
|
pps >>= Result.concat_map ~f:(fun pp -> pp.ppx_runtime_deps)
|
||||||
| lib :: ppx_rts ->
|
>>| fun pp_deps -> List.rev_append deps pp_deps)
|
||||||
check_private_deps ~lib ~loc ~allow_private_deps >>= fun rt ->
|
>>= fun deps ->
|
||||||
check_runtime_deps (rt :: acc) pps ppx_rts
|
List.map deps ~f:(check_private_deps ~loc ~allow_private_deps)
|
||||||
and loop acc = function
|
|> Result.all
|
||||||
| [] -> Ok acc
|
|
||||||
| pp :: pps ->
|
|
||||||
pp.ppx_runtime_deps >>= fun rt_deps ->
|
|
||||||
check_runtime_deps acc pps rt_deps
|
|
||||||
in
|
|
||||||
deps >>= fun deps ->
|
|
||||||
pps >>= fun pps ->
|
|
||||||
loop deps pps
|
|
||||||
in
|
in
|
||||||
(deps, pps)
|
(deps, pps)
|
||||||
in
|
in
|
||||||
|
|
Loading…
Reference in New Issue