query
On this page

mergeAttrDefinitionsWithPrio

lib.modules.mergeAttrDefinitionsWithPrio

Docs pulled from | This Revision | 14 minutes ago


Merge an option's definitions in a way that preserves the priority of the individual attributes in the option value.

This does not account for all option semantics, such as readOnly.

Inputs

opt

1. Function argument

Type

option -> attrsOf { highestPrio, value }

Noogle detected

Implementation

The following is the current implementation of this function.

mergeAttrDefinitionsWithPrio = opt:
        let
            defsByAttr =
              zipAttrs (
                concatLists (
                  concatMap
                    ({ value, ... }@def:
                      map
                        (mapAttrsToList (k: value: { ${k} = def // { inherit value; }; }))
                        (pushDownProperties value)
                    )
                    opt.definitionsWithLocations
                )
              );
        in
          assert opt.type.name == "attrsOf" || opt.type.name == "lazyAttrsOf";
          mapAttrs
                (k: v:
                  let merging = mergeDefinitions (opt.loc ++ [k]) opt.type.nestedTypes.elemType v;
                  in {
                    value = merging.mergedValue;
                    inherit (merging.defsFinal') highestPrio;
                  })
                defsByAttr;