diff options
-rw-r--r-- | tvix/eval/src/eval.rs | 30 | ||||
-rw-r--r-- | tvix/eval/src/tests/mod.rs | 5 |
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); |