about summary refs log tree commit diff
path: root/tvix/eval
diff options
context:
space:
mode:
authorVincent Ambo <mail@tazj.in>2023-01-05T13·02+0300
committertazjin <tazjin@tvl.su>2023-01-06T12·23+0000
commitaadf71a6ed18855a1fa8b4d5a76508300f463966 (patch)
treeb034bd24e0779221cbb7fb3b7a2d5b444f121474 /tvix/eval
parent61b8a9b2ba278f697735a2c3ff77fff091c8f464 (diff)
feat(tvix/eval): warn on empty let-bindings r/5606
Change-Id: Ib6ef7ce514abbd3e372dfe9df7137aa36dbda9d4
Reviewed-on: https://cl.tvl.fyi/c/depot/+/7770
Reviewed-by: raitobezarius <tvl@lahfa.xyz>
Reviewed-by: flokli <flokli@flokli.de>
Tested-by: BuildkiteCI
Diffstat (limited to 'tvix/eval')
-rw-r--r--tvix/eval/src/compiler/bindings.rs3
-rw-r--r--tvix/eval/src/warnings.rs8
2 files changed, 10 insertions, 1 deletions
diff --git a/tvix/eval/src/compiler/bindings.rs b/tvix/eval/src/compiler/bindings.rs
index 83667c129be0..682cf134ce1a 100644
--- a/tvix/eval/src/compiler/bindings.rs
+++ b/tvix/eval/src/compiler/bindings.rs
@@ -647,6 +647,9 @@ impl Compiler<'_> {
                 self.emit_constant(Value::Attrs(Box::new(NixAttrs::empty())), node);
                 return;
             }
+
+            self.emit_warning(node, WarningKind::EmptyLet);
+            return;
         }
 
         // Actually bind values and ensure they are on the stack.
diff --git a/tvix/eval/src/warnings.rs b/tvix/eval/src/warnings.rs
index 9ebf182f975d..cfe5044a8cbe 100644
--- a/tvix/eval/src/warnings.rs
+++ b/tvix/eval/src/warnings.rs
@@ -16,6 +16,7 @@ pub enum WarningKind {
     UselessBoolOperation(&'static str),
     DeadCode,
     EmptyInherit,
+    EmptyLet,
 
     /// Tvix internal warning for features triggered by users that are
     /// not actually implemented yet, but do not cause runtime failures.
@@ -66,7 +67,7 @@ impl EvalWarning {
             }
 
             WarningKind::UselessInherit => {
-                "inherited variable already exists with the same value".to_string()
+                format!("inherit does nothing (this variable already exists with the same value)")
             }
 
             WarningKind::UnusedBinding => {
@@ -100,6 +101,10 @@ impl EvalWarning {
                 format!("this `inherit` statement is empty")
             }
 
+            WarningKind::EmptyLet => {
+                format!("this `let`-expression contains no bindings")
+            }
+
             WarningKind::NotImplemented(what) => {
                 format!("feature not yet implemented in tvix: {}", what)
             }
@@ -119,6 +124,7 @@ impl EvalWarning {
             WarningKind::UselessBoolOperation(_) => "W007",
             WarningKind::DeadCode => "W008",
             WarningKind::EmptyInherit => "W009",
+            WarningKind::EmptyLet => "W010",
 
             WarningKind::NotImplemented(_) => "W999",
         }