about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--tvix/eval/src/eval.rs30
-rw-r--r--tvix/eval/src/tests/mod.rs5
2 files changed, 28 insertions, 7 deletions
diff --git a/tvix/eval/src/eval.rs b/tvix/eval/src/eval.rs
index 8973c1a95c19..4787b55fe475 100644
--- a/tvix/eval/src/eval.rs
+++ b/tvix/eval/src/eval.rs
@@ -25,11 +25,28 @@ pub struct Options {
     #[cfg_attr(feature = "repl", clap(long, env = "TVIX_TRACE_RUNTIME"))]
     trace_runtime: bool,
 
+    /// Print warnings
+    #[cfg_attr(
+        feature = "repl",
+        clap(long, env = "TVIX_WARNINGS", default_value = "true")
+    )]
+    warnings: bool,
+
     /// A colon-separated list of directories to use to resolve `<...>`-style paths
     #[cfg_attr(feature = "repl", clap(long, short = 'I', env = "NIX_PATH"))]
     nix_search_path: Option<NixSearchPath>,
 }
 
+impl Options {
+    #[cfg(test)]
+    pub(crate) fn test_options() -> Options {
+        Options {
+            warnings: false,
+            ..Options::default()
+        }
+    }
+}
+
 pub fn interpret(code: &str, location: Option<PathBuf>, options: Options) -> EvalResult<Value> {
     let source = SourceCode::new();
     let file = source.add_file(
@@ -97,8 +114,10 @@ pub fn interpret(code: &str, location: Option<PathBuf>, options: Options) -> Eva
         )
     }?;
 
-    for warning in result.warnings {
-        warning.fancy_format_stderr(&source);
+    if options.warnings {
+        for warning in result.warnings {
+            warning.fancy_format_stderr(&source);
+        }
     }
 
     for error in &result.errors {
@@ -128,10 +147,11 @@ pub fn interpret(code: &str, location: Option<PathBuf>, options: Options) -> Eva
     }
 
     result.map(|r| {
-        for warning in r.warnings {
-            warning.fancy_format_stderr(&source);
+        if options.warnings {
+            for warning in r.warnings {
+                warning.fancy_format_stderr(&source);
+            }
         }
-
         r.value
     })
 }
diff --git a/tvix/eval/src/tests/mod.rs b/tvix/eval/src/tests/mod.rs
index 8540a5641bcf..03e6f9f0220d 100644
--- a/tvix/eval/src/tests/mod.rs
+++ b/tvix/eval/src/tests/mod.rs
@@ -1,4 +1,5 @@
 use crate::eval::interpret;
+use crate::eval::Options;
 use pretty_assertions::assert_eq;
 
 use test_generator::test_resources;
@@ -12,7 +13,7 @@ fn eval_okay_test(code_path: &str) {
     let code = std::fs::read_to_string(code_path).expect("should be able to read test code");
     let exp = std::fs::read_to_string(exp_path).expect("should be able to read test expectation");
 
-    let result = interpret(&code, Some(code_path.into()), Default::default())
+    let result = interpret(&code, Some(code_path.into()), Options::test_options())
         .expect("evaluation of eval-okay test should succeed");
     let result_str = format!("{}", result);
 
@@ -29,7 +30,7 @@ fn eval_okay_test(code_path: &str) {
 fn identity(code_path: &str) {
     let code = std::fs::read_to_string(code_path).expect("should be able to read test code");
 
-    let result = interpret(&code, None, Default::default())
+    let result = interpret(&code, None, Options::test_options())
         .expect("evaluation of identity test should succeed");
     let result_str = format!("{}", result);