diff options
| author | Jonas Maier <> | 2026-05-22 17:44:24 +0200 |
|---|---|---|
| committer | Jonas Maier <> | 2026-05-22 17:44:24 +0200 |
| commit | 07daff9331dbdc607584edbf1a8fb3e415c338ea (patch) | |
| tree | 4742c87aba7748652bd8ea9da7be01607d4d1555 /src/run/builtin.rs | |
| parent | 9a727206f1c94f7580e79a5355adc4b932ae6345 (diff) | |
| download | pish-07daff9331dbdc607584edbf1a8fb3e415c338ea.tar.gz | |
lenient block parsing for completion
Diffstat (limited to 'src/run/builtin.rs')
| -rw-r--r-- | src/run/builtin.rs | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/src/run/builtin.rs b/src/run/builtin.rs index 488ee04..638cfcd 100644 --- a/src/run/builtin.rs +++ b/src/run/builtin.rs @@ -6,7 +6,6 @@ use std::{env::*, fs::OpenOptions, path::PathBuf}; use pish_derive::FromArgs; use super::{Builtin, BuiltinError as Error, BuiltinResult as Result}; -use crate::parse::CmdDisplay; use crate::run::{AliasAge, AliasBody}; use crate::*; @@ -354,16 +353,39 @@ impl Builtin for parse { _stdin: &mut dyn Read, stdout: &mut dyn Write, ) -> Result { + use crate::parse::*; + + let mut parse_mode = ParseMode::Command; + let mut backtrace = false; + for arg in args { - match crate::parse::do_parse(arg) { + match &arg[..] { + b"-c" | b"--completion" => { + parse_mode = ParseMode::Completion; + continue; + } + b"-e" | b"--execution" => { + parse_mode = ParseMode::Command; + continue; + } + b"--bt" | b"--backtrace" => { + backtrace = !backtrace; + } + _ => {} + } + + let mut c = crate::parse::Cursor::new(arg, parse_mode); + c.backtrace = backtrace; + + match Ast::parse(&mut c) { Ok(parsed) => { write!(stdout, "ok ")?; parsed.cdisplay(stdout)?; - writeln!(stdout)?; + writeln!(stdout, "\n{parsed:?}")?; } - Err(err) => { - writeln!(stdout, "err {:?} ", err.0)?; - stdout.write_all(&err.1)?; + Err(e) => { + writeln!(stdout, "err {e:?} ")?; + stdout.write_all(&c.remaining())?; } } } |
