diff options
author | Alyssa Ross <hi@alyssa.is> | 2021-04-27 10:56:51 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2021-04-28 21:44:21 +0000 |
commit | 81e1e68eaf6c765147da964d356f704030734dd2 (patch) | |
tree | 122c02c4d7e0b8e927cf82049481d35ea0137196 /lib/trivial.nix | |
parent | e57815f09595689b9d09c1ba4585ec4c8b8e5e5a (diff) |
lib.trivial.warnIf: init
It's a common pattern in Nixpkgs to want to emit a warning in certain cases, but not actually change behaviours. This is often expressed as either if cond then lib.warn "Don't do that thing" x else x Or (if cond then lib.warn "Don't do that thing" else lib.id) x Neither of which really expresses the intent here, because it looks like 'x' is being chosen conditionally. To make this clearer, I introduce a "warnIf" function, which makes it clear that the only thing being affected by the condition is whether the warning is generated, not the value being returned.
Diffstat (limited to 'lib/trivial.nix')
-rw-r--r-- | lib/trivial.nix | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/lib/trivial.nix b/lib/trivial.nix index be6d0115f5b86..f6f5da5998ffb 100644 --- a/lib/trivial.nix +++ b/lib/trivial.nix @@ -297,12 +297,15 @@ rec { # Usage: # { # foo = lib.warn "foo is deprecated" oldFoo; + # bar = lib.warnIf (bar == "") "Empty bar is deprecated" bar; # } # # TODO: figure out a clever way to integrate location information from # something like __unsafeGetAttrPos. warn = msg: builtins.trace "[1;31mwarning: ${msg}[0m"; + warnIf = cond: msg: if cond then warn msg else id; + info = msg: builtins.trace "INFO: ${msg}"; showWarnings = warnings: res: lib.fold (w: x: warn w x) res warnings; |