about summary refs log tree commit diff
path: root/lib/trivial.nix
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2021-04-27 10:56:51 +0000
committerAlyssa Ross <hi@alyssa.is>2021-04-28 21:44:21 +0000
commit81e1e68eaf6c765147da964d356f704030734dd2 (patch)
tree122c02c4d7e0b8e927cf82049481d35ea0137196 /lib/trivial.nix
parente57815f09595689b9d09c1ba4585ec4c8b8e5e5a (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.nix3
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 "warning: ${msg}";
+  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;