Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 25 additions & 6 deletions bin/describe/describe_external_lib_deps.ml
Original file line number Diff line number Diff line change
Expand Up @@ -185,25 +185,44 @@ let libs db (context : Context.t) =
>>| List.concat
;;

let external_resolved_libs (context : Context.t) =
let filter_empty ~include_empty items =
if include_empty
then items
else
List.filter
~f:(fun (x : Item.t) ->
not (List.is_empty x.external_deps && List.is_empty x.internal_deps))
items
;;

let external_resolved_libs ~include_empty (context : Context.t) =
let open Memo.O in
let* scope = Dune_rules.Scope.DB.find_by_dir (Context.build_dir context) in
let db = Dune_rules.Scope.libs scope in
libs db context
>>| List.filter ~f:(fun (x : Item.t) ->
not (List.is_empty x.external_deps && List.is_empty x.internal_deps))
libs db context >>| filter_empty ~include_empty
;;

let to_dyn context_name external_resolved_libs =
let open Dyn in
Tuple [ String context_name; list Item.to_dyn external_resolved_libs ]
;;

let arg_include_empty =
let open Arg in
value
& flag
& info
[ "include-empty" ]
~doc:
(Some "Whether to include items that have no internal or external dependencies")
;;

let term =
let+ builder = Common.Builder.term
and+ context_name = Common.context_arg ~doc:(Some "Build context to use.")
and+ _ = Describe_lang_compat.arg
and+ format = Describe_format.arg in
and+ format = Describe_format.arg
and+ include_empty = arg_include_empty in
let common, config = Common.init builder in
Scheduler_setup.go_with_rpc_server ~common ~config
@@ fun () ->
Expand All @@ -217,7 +236,7 @@ let term =
|> Context.name
|> Dune_engine.Context_name.to_string
in
external_resolved_libs (Super_context.context super_context)
external_resolved_libs ~include_empty (Super_context.context super_context)
>>| to_dyn context_name
>>| Describe_format.print_dyn format
;;
Expand Down
3 changes: 3 additions & 0 deletions doc/changes/added/15585.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
- Add a `--include-empty` flag to `dune describe external-lib-deps` to also
print libraries that have no internal or external dependencies (#15585,
@NatKarmios)
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
By default, `dune describe external-lib-deps` omits libraries that have no
internal or external dependencies.

$ cat >dune-project <<EOF
> (lang dune 3.0)
> EOF

$ cat >dune <<EOF
> (library
> (name empty_lib))
> (library
> (name has_deps)
> (libraries a))
> EOF

$ dune describe external-lib-deps
(default
((library
((names (has_deps))
(extensions ())
(package ())
(source_dir .)
(external_deps ((a required)))
(internal_deps ())))))

With `--include-empty`, libraries that have no dependencies are printed too.

$ dune describe external-lib-deps --include-empty
(default
((library
((names (empty_lib))
(extensions ())
(package ())
(source_dir .)
(external_deps ())
(internal_deps ())))
(library
((names (has_deps))
(extensions ())
(package ())
(source_dir .)
(external_deps ((a required)))
(internal_deps ())))))
Loading