chore(tvix/cli): re-add --raw argument

Change-Id: I82f469f7f186c754c40bd941587b30aa3fc48045
Reviewed-on: https://cl.tvl.fyi/c/depot/+/7548
Reviewed-by: grfn <grfn@gws.fyi>
Tested-by: BuildkiteCI
This commit is contained in:
Vincent Ambo 2022-12-09 13:29:08 +03:00 committed by tazjin
parent 32dba980eb
commit 36eaa9b3b3

View file

@ -11,15 +11,16 @@ struct Args {
#[clap(long, short = 'E')] #[clap(long, short = 'E')]
expr: Option<String>, expr: Option<String>,
// TODO: port these options here directly
// #[clap(flatten)] /// Print "raw" (unquoted) output.
// eval_options: tvix_eval::Options, #[clap(long)]
raw: bool,
} }
/// Interprets the given code snippet, printing out warnings, errors /// Interprets the given code snippet, printing out warnings, errors
/// and the result itself. The return value indicates whether /// and the result itself. The return value indicates whether
/// evaluation succeeded. /// evaluation succeeded.
fn interpret(code: &str, path: Option<PathBuf>) -> bool { fn interpret(code: &str, path: Option<PathBuf>, args: &Args) -> bool {
let eval = tvix_eval::Evaluation::new(code, path); let eval = tvix_eval::Evaluation::new(code, path);
let source_map = eval.source_map(); let source_map = eval.source_map();
let result = eval.evaluate(); let result = eval.evaluate();
@ -33,7 +34,7 @@ fn interpret(code: &str, path: Option<PathBuf>) -> bool {
} }
if let Some(value) = result.value.as_ref() { if let Some(value) = result.value.as_ref() {
println_result(value, /* TODO raw = */ false); println_result(value, args.raw);
} }
// inform the caller about any errors // inform the caller about any errors
@ -43,24 +44,24 @@ fn interpret(code: &str, path: Option<PathBuf>) -> bool {
fn main() { fn main() {
let args = Args::parse(); let args = Args::parse();
if let Some(file) = args.script { if let Some(file) = &args.script {
run_file(file /* TODO, args.eval_options*/) run_file(file.clone(), &args)
} else if let Some(expr) = args.expr { } else if let Some(expr) = &args.expr {
if !interpret(&expr, None) { if !interpret(expr, None, &args) {
std::process::exit(1); std::process::exit(1);
} }
} else { } else {
run_prompt(/* TODO args.eval_options */) run_prompt(&args)
} }
} }
fn run_file(mut path: PathBuf /* TODO: , eval_options: tvix_eval::Options */) { fn run_file(mut path: PathBuf, args: &Args) {
if path.is_dir() { if path.is_dir() {
path.push("default.nix"); path.push("default.nix");
} }
let contents = fs::read_to_string(&path).expect("failed to read the input file"); let contents = fs::read_to_string(&path).expect("failed to read the input file");
if !interpret(&contents, Some(path)) { if !interpret(&contents, Some(path), args) {
std::process::exit(1); std::process::exit(1);
} }
} }
@ -81,7 +82,7 @@ fn state_dir() -> Option<PathBuf> {
path path
} }
fn run_prompt(/* TODO eval_options: tvix_eval::Options */) { fn run_prompt(args: &Args) {
let mut rl = Editor::<()>::new().expect("should be able to launch rustyline"); let mut rl = Editor::<()>::new().expect("should be able to launch rustyline");
let history_path = match state_dir() { let history_path = match state_dir() {
@ -106,7 +107,7 @@ fn run_prompt(/* TODO eval_options: tvix_eval::Options */) {
} }
rl.add_history_entry(&line); rl.add_history_entry(&line);
interpret(&line, None); interpret(&line, None, args);
} }
Err(ReadlineError::Interrupted) | Err(ReadlineError::Eof) => break, Err(ReadlineError::Interrupted) | Err(ReadlineError::Eof) => break,