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::tvix_store_io::TvixStoreIO;
|
||||||
use tvix_glue::{builtins::add_derivation_builtins, configure_nix_path};
|
use tvix_glue::{builtins::add_derivation_builtins, configure_nix_path};
|
||||||
|
|
||||||
#[derive(Parser)]
|
#[derive(Parser, Clone)]
|
||||||
struct Args {
|
struct Args {
|
||||||
#[arg(long)]
|
#[arg(long)]
|
||||||
log_level: Option<Level>,
|
log_level: Option<Level>,
|
||||||
|
|
|
@ -18,6 +18,7 @@ fn state_dir() -> Option<PathBuf> {
|
||||||
pub enum ReplCommand<'a> {
|
pub enum ReplCommand<'a> {
|
||||||
Expr(&'a str),
|
Expr(&'a str),
|
||||||
Explain(&'a str),
|
Explain(&'a str),
|
||||||
|
Print(&'a str),
|
||||||
Quit,
|
Quit,
|
||||||
Help,
|
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
|
<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
|
: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
|
:q Exit the REPL
|
||||||
:?, :h Display this help text
|
:?, :h Display this help text
|
||||||
";
|
";
|
||||||
|
@ -38,6 +40,8 @@ The following commands are supported:
|
||||||
if input.starts_with(':') {
|
if input.starts_with(':') {
|
||||||
if let Some(without_prefix) = input.strip_prefix(":d ") {
|
if let Some(without_prefix) = input.strip_prefix(":d ") {
|
||||||
return Self::Explain(without_prefix);
|
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();
|
let input = input.trim_end();
|
||||||
|
@ -130,6 +134,17 @@ impl Repl {
|
||||||
true,
|
true,
|
||||||
AllowIncomplete::Allow,
|
AllowIncomplete::Allow,
|
||||||
),
|
),
|
||||||
|
ReplCommand::Print(input) => interpret(
|
||||||
|
Rc::clone(&io_handle),
|
||||||
|
input,
|
||||||
|
None,
|
||||||
|
&Args {
|
||||||
|
strict: true,
|
||||||
|
..(args.clone())
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
AllowIncomplete::Allow,
|
||||||
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
match res {
|
match res {
|
||||||
|
|
Loading…
Add table
Reference in a new issue