From 07daff9331dbdc607584edbf1a8fb3e415c338ea Mon Sep 17 00:00:00 2001 From: Jonas Maier <> Date: Fri, 22 May 2026 17:44:24 +0200 Subject: lenient block parsing for completion --- src/run/builtin.rs | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) (limited to 'src/run/builtin.rs') 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())?; } } } -- cgit v1.2.3