diff options
author | David Arnold <dgx.arnold@gmail.com> | 2021-07-23 14:10:31 -0500 |
---|---|---|
committer | David Arnold <dgx.arnold@gmail.com> | 2021-08-03 16:40:58 -0500 |
commit | cf8e219b7e3c8933d6301175f2611990c5281ae9 (patch) | |
tree | b0b4c0f097cd345dd452a1fbc8ed8b08f4f8dda4 /lib | |
parent | d905ae22c60cafa7f94938c639d4518e1ddddcfa (diff) |
lib: fix functionArgs for functors
`functionArgs` should give valid results on functions that have been identified with `lib.isFunction` instead of erroring out.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/tests/misc.nix | 10 | ||||
-rw-r--r-- | lib/trivial.nix | 5 |
2 files changed, 14 insertions, 1 deletions
diff --git a/lib/tests/misc.nix b/lib/tests/misc.nix index 0d249968402d9..4b2e5afc1d609 100644 --- a/lib/tests/misc.nix +++ b/lib/tests/misc.nix @@ -132,6 +132,16 @@ runTests { expected = [ 1 1 0 ]; }; + testFunctionArgsFunctor = { + expr = functionArgs { __functor = self: { a, b }: null; }; + expected = { a = false; b = false; }; + }; + + testFunctionArgsSetFunctionArgs = { + expr = functionArgs (setFunctionArgs (args: args.x) { x = false; }); + expected = { x = false; }; + }; + # STRINGS testConcatMapStrings = { diff --git a/lib/trivial.nix b/lib/trivial.nix index c8ef5599ccde9..7956ba4bde6f8 100644 --- a/lib/trivial.nix +++ b/lib/trivial.nix @@ -334,7 +334,10 @@ rec { has the same return type and semantics as builtins.functionArgs. setFunctionArgs : (a → b) → Map String Bool. */ - functionArgs = f: f.__functionArgs or (builtins.functionArgs f); + functionArgs = f: + if f ? __functor + then f.__functionArgs or (lib.functionArgs (f.__functor f)) + else builtins.functionArgs f; /* Check whether something is a function or something annotated with function args. |