From aadf71a6ed18855a1fa8b4d5a76508300f463966 Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Thu, 5 Jan 2023 16:02:46 +0300 Subject: [PATCH] feat(tvix/eval): warn on empty let-bindings Change-Id: Ib6ef7ce514abbd3e372dfe9df7137aa36dbda9d4 Reviewed-on: https://cl.tvl.fyi/c/depot/+/7770 Reviewed-by: raitobezarius Reviewed-by: flokli Tested-by: BuildkiteCI --- tvix/eval/src/compiler/bindings.rs | 3 +++ tvix/eval/src/warnings.rs | 8 +++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/tvix/eval/src/compiler/bindings.rs b/tvix/eval/src/compiler/bindings.rs index 83667c129..682cf134c 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 9ebf182f9..cfe5044a8 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", }