diff options
Diffstat (limited to 'src/run')
| -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())?; } } } |
