diff options
Diffstat (limited to 'src/run')
| -rw-r--r-- | src/run/builtin.rs | 34 | ||||
| -rw-r--r-- | src/run/mod.rs | 1 |
2 files changed, 34 insertions, 1 deletions
diff --git a/src/run/builtin.rs b/src/run/builtin.rs index c71f10f..0b2b3bc 100644 --- a/src/run/builtin.rs +++ b/src/run/builtin.rs @@ -3,7 +3,8 @@ use std::sync::{Arc, Mutex}; use std::{env::*, fs::OpenOptions, path::PathBuf}; -use super::{Builtin, BuiltinResult as Result}; +use super::{Builtin, BuiltinError as Error, BuiltinResult as Result}; +use crate::parse::CmdDisplay; use crate::*; pub struct cd; @@ -242,3 +243,34 @@ impl Builtin for escape { Ok(()) } } + +pub struct parse; +impl Builtin for parse { + fn name(&self) -> &str { + "parse" + } + + fn io( + &self, + _session: Arc<Mutex<Session>>, + args: &[BString], + _stdin: &mut dyn Read, + stdout: &mut dyn Write, + ) -> Result { + let mut is_ok = true; + for arg in args { + match crate::parse::do_parse(arg) { + Ok(parsed) => { + write!(stdout, "ok ")?; + parsed.cdisplay(stdout)?; + writeln!(stdout)?; + }, + Err(err) => { + is_ok = false; + writeln!(stdout, "err {err:?}")?; + } + } + } + if is_ok { Ok(()) } else { Err(Error::Exit(-1)) } + } +} diff --git a/src/run/mod.rs b/src/run/mod.rs index 2d137c6..c0a108a 100644 --- a/src/run/mod.rs +++ b/src/run/mod.rs @@ -305,6 +305,7 @@ const BUILTINS: &[&'static dyn Builtin] = &[ &builtin::_type, &builtin::history, &builtin::escape, + &builtin::parse, ]; pub struct CommandDispatch { |
