A specialized data structure that supports efficient merge operations and has a defined traversal order. Commonly used for accumulating data from transitive dependencies in rules and aspects. For more information see here.
Depsets are not implemented as hash sets and do not support fast membership tests. If you need a general set datatype, you can simulate one using a dictionary where all keys map to
Depsets are immutable. They can be created using their constructor function and merged or augmented using the
order parameter determines the kind of traversal that is done to convert the depset to an iterable. There are four possible values:
"stable"): Order is unspecified (but deterministic).
"compile"): A left-to-right post-ordering. Precisely, this recursively traverses all children leftmost-first, then the direct elements leftmost-first.
"naive_link"): A left-to-right pre-ordering. Precisely, this traverses the direct elements leftmost-first, then recursively traverses the children leftmost-first.
"link"): A topological ordering from the root down to the leaves. There is no left-to-right guarantee.
Two depsets may only be merged (via
+ or the
union() method) if either both depsets have the same order, or one of them has
"default" order. In the latter case the resulting depset's order will be the same as the left operand's.
Depsets may contain duplicate values but these will be suppressed when iterating (using
to_list()). Duplicates may interfere with the ordering semantics.
set() is a deprecated alias for
depset(). Please update legacy code and use only
list depset.to_list()Returns a frozen list of the elements, without duplicates, in the depset's traversal order.
depset depset.union(new_elements)(Deprecated) Returns a new depset that is the merge of the given depset and
new_elements. This is the same as the
The elements to be added.