mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-25 16:33:15 +00:00
lib.types.attrTag: Provide declarations, definitions
This commit is contained in:
parent
e090bb55f0
commit
4c7d990bad
@ -107,6 +107,7 @@ in
|
||||
# assert lib.foldl' (a: b: builtins.trace b a) true (lib.attrNames config.docs);
|
||||
assert config.docs."submodules.<name>.foo.bar".type == "signed integer";
|
||||
assert config.docs."submodules.<name>.qux".type == "string";
|
||||
assert lib.length config.docs."merged.<name>.extensible".declarations == 2;
|
||||
true;
|
||||
};
|
||||
}
|
||||
|
@ -628,7 +628,16 @@ rec {
|
||||
(n: opt:
|
||||
builtins.addErrorContext "while checking that attrTag tag ${lib.strings.escapeNixIdentifier n} is an option with a type${inAttrPosSuffix args.tags n}" (
|
||||
assert opt._type == "option";
|
||||
opt
|
||||
opt // {
|
||||
declarations = opt.declarations or (
|
||||
let pos = builtins.unsafeGetAttrPos n args.tags;
|
||||
in if pos == null then [] else [ pos.file ]
|
||||
);
|
||||
declarationPositions = opt.declarationPositions or (
|
||||
let pos = builtins.unsafeGetAttrPos n args.tags;
|
||||
in if pos == null then [] else [ pos ]
|
||||
);
|
||||
}
|
||||
))
|
||||
args.tags;
|
||||
choicesStr = concatMapStringsSep ", " lib.strings.escapeNixIdentifier (attrNames tags);
|
||||
@ -640,7 +649,10 @@ rec {
|
||||
mapAttrs
|
||||
(tagName: tagOption: {
|
||||
"${lib.showOption prefix}" =
|
||||
tagOption // { loc = prefix ++ [ tagName ]; };
|
||||
tagOption // {
|
||||
loc = prefix ++ [ tagName ];
|
||||
definitions = [];
|
||||
};
|
||||
})
|
||||
tags;
|
||||
substSubModules = m: attrTagWith { tags = mapAttrs (n: opt: opt // { type = (opt.type or types.unspecified).substSubModules m; }) tags; };
|
||||
@ -685,6 +697,11 @@ rec {
|
||||
# It is also returned though, but use of the attribute seems rare?
|
||||
[tagName]
|
||||
[ (wrapOptionDecl a.tags.${tagName}) (wrapOptionDecl bOpt) ]
|
||||
// {
|
||||
# mergeOptionDecls is not idempotent in these attrs:
|
||||
declarations = a.tags.${tagName}.declarations ++ bOpt.declarations;
|
||||
declarationPositions = a.tags.${tagName}.declarations ++ bOpt.declarations;
|
||||
}
|
||||
)
|
||||
(builtins.intersectAttrs a.tags b.tags);
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user