mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-09 19:13:26 +03:00
lib.options.mkPackageOption: use lib.showAttrPath
Make use of `lib.showAttrPath` instead of manually doing `concatStringsSep "."`. This means edge-cases such as the attr-path including names that are not valid nix identifiers will be handled better. See: - https://nix.dev/manual/nix/2.26/language/identifiers - https://nixos.org/manual/nixpkgs/unstable/#function-library-lib.attrsets.showAttrPath
This commit is contained in:
parent
4c26f96059
commit
6107d48bcb
3 changed files with 23 additions and 4 deletions
|
@ -30,6 +30,7 @@ let
|
|||
inherit (lib.attrsets)
|
||||
attrByPath
|
||||
optionalAttrs
|
||||
showAttrPath
|
||||
;
|
||||
inherit (lib.strings)
|
||||
concatMapStrings
|
||||
|
@ -40,6 +41,7 @@ let
|
|||
;
|
||||
inherit (lib.lists)
|
||||
last
|
||||
toList
|
||||
;
|
||||
prioritySuggestion = ''
|
||||
Use `lib.mkForce value` or `lib.mkDefault value` to change the priority on any of these definitions.
|
||||
|
@ -310,14 +312,14 @@ rec {
|
|||
}:
|
||||
let
|
||||
name' = if isList name then last name else name;
|
||||
default' = if isList default then default else [ default ];
|
||||
defaultText = concatStringsSep "." default';
|
||||
default' = toList default;
|
||||
defaultText = showAttrPath default';
|
||||
defaultValue = attrByPath default' (throw "${defaultText} cannot be found in ${pkgsText}") pkgs;
|
||||
defaults =
|
||||
if default != null then
|
||||
{
|
||||
default = defaultValue;
|
||||
defaultText = literalExpression ("${pkgsText}." + defaultText);
|
||||
defaultText = literalExpression "${pkgsText}.${defaultText}";
|
||||
}
|
||||
else
|
||||
optionalAttrs nullable {
|
||||
|
@ -333,7 +335,7 @@ rec {
|
|||
}
|
||||
// optionalAttrs (example != null) {
|
||||
example = literalExpression (
|
||||
if isList example then "${pkgsText}." + concatStringsSep "." example else example
|
||||
if isList example then "${pkgsText}.${showAttrPath example}" else example
|
||||
);
|
||||
}
|
||||
);
|
||||
|
|
|
@ -332,6 +332,9 @@ checkConfigOutput '^"null or package"$' options.nullablePackage.type.description
|
|||
checkConfigOutput '^"hello"$' config.nullablePackageWithDefault.pname ./declare-mkPackageOption.nix
|
||||
checkConfigOutput '^"myPkgs\.hello"$' options.packageWithPkgsText.defaultText.text ./declare-mkPackageOption.nix
|
||||
checkConfigOutput '^"hello-other"$' options.packageFromOtherSet.default.pname ./declare-mkPackageOption.nix
|
||||
checkConfigOutput '^"hello"$' config.packageInvalidIdentifier.pname ./declare-mkPackageOption.nix
|
||||
checkConfigOutput '^"pkgs\.\\"123\\"\.\\"with\\\\\\"quote\\"\.hello"$' options.packageInvalidIdentifier.defaultText.text ./declare-mkPackageOption.nix
|
||||
checkConfigOutput '^"pkgs\.\\"123\\"\.\\"with\\\\\\"quote\\"\.hello"$' options.packageInvalidIdentifierExample.example.text ./declare-mkPackageOption.nix
|
||||
|
||||
# submoduleWith
|
||||
|
||||
|
|
|
@ -57,5 +57,19 @@ in
|
|||
};
|
||||
in
|
||||
lib.mkPackageOption myPkgs "hello" { };
|
||||
|
||||
packageInvalidIdentifier =
|
||||
let
|
||||
myPkgs."123"."with\"quote" = { inherit (pkgs) hello; };
|
||||
in
|
||||
lib.mkPackageOption myPkgs [ "123" "with\"quote" "hello" ] { };
|
||||
|
||||
packageInvalidIdentifierExample = lib.mkPackageOption pkgs "hello" {
|
||||
example = [
|
||||
"123"
|
||||
"with\"quote"
|
||||
"hello"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue