feat(tvix/repl): Add a command to recursively print
Add a command, :p, to evaluate an expression and recursively print the result, as if `--strict` had been passed on the command line. Demonstration of this working: ❯ cargo r --bin tvix Finished dev [unoptimized + debuginfo] target(s) in 0.27s Running `target/debug/tvix` tvix-repl> { x = (x: x) 1; } => { x = <CODE>; } :: set tvix-repl> :p { x = (x: x) 1; } => { x = 1; } :: set Change-Id: I1a81d7481160c30d2a4483c6308e25fa45f2dfdf Reviewed-on: https://cl.tvl.fyi/c/depot/+/11738 Autosubmit: aspen <root@gws.fyi> Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
This commit is contained in:
parent
4a489d930c
commit
c2f649f62e
2 changed files with 16 additions and 1 deletions
|
@ -18,7 +18,7 @@ use tvix_glue::tvix_io::TvixIO;
|
|||
use tvix_glue::tvix_store_io::TvixStoreIO;
|
||||
use tvix_glue::{builtins::add_derivation_builtins, configure_nix_path};
|
||||
|
||||
#[derive(Parser)]
|
||||
#[derive(Parser, Clone)]
|
||||
struct Args {
|
||||
#[arg(long)]
|
||||
log_level: Option<Level>,
|
||||
|
|
|
@ -18,6 +18,7 @@ fn state_dir() -> Option<PathBuf> {
|
|||
pub enum ReplCommand<'a> {
|
||||
Expr(&'a str),
|
||||
Explain(&'a str),
|
||||
Print(&'a str),
|
||||
Quit,
|
||||
Help,
|
||||
}
|
||||
|
@ -30,6 +31,7 @@ The following commands are supported:
|
|||
|
||||
<expr> Evaluate a Nix language expression and print the result, along with its inferred type
|
||||
:d <expr> Evaluate a Nix language expression and print a detailed description of the result
|
||||
:p <expr> Evaluate a Nix language expression and print the result recursively
|
||||
:q Exit the REPL
|
||||
:?, :h Display this help text
|
||||
";
|
||||
|
@ -38,6 +40,8 @@ The following commands are supported:
|
|||
if input.starts_with(':') {
|
||||
if let Some(without_prefix) = input.strip_prefix(":d ") {
|
||||
return Self::Explain(without_prefix);
|
||||
} else if let Some(without_prefix) = input.strip_prefix(":p ") {
|
||||
return Self::Print(without_prefix);
|
||||
}
|
||||
|
||||
let input = input.trim_end();
|
||||
|
@ -130,6 +134,17 @@ impl Repl {
|
|||
true,
|
||||
AllowIncomplete::Allow,
|
||||
),
|
||||
ReplCommand::Print(input) => interpret(
|
||||
Rc::clone(&io_handle),
|
||||
input,
|
||||
None,
|
||||
&Args {
|
||||
strict: true,
|
||||
..(args.clone())
|
||||
},
|
||||
false,
|
||||
AllowIncomplete::Allow,
|
||||
),
|
||||
};
|
||||
|
||||
match res {
|
||||
|
|
Loading…
Reference in a new issue