From 44628890b64befde0a1bb147d82d9bfe48b7e1af Mon Sep 17 00:00:00 2001 From: Jonas Maier <> Date: Fri, 6 Mar 2026 17:38:32 +0100 Subject: shell expansion --- src/parse.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'src/parse.rs') diff --git a/src/parse.rs b/src/parse.rs index c30206a..2ed0dbf 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -19,10 +19,10 @@ impl Stage for PostExpansion { type Res = std::result::Result; -trait Expander { +pub trait Expander { type Error; - fn expand_var(&mut self, v: VarName) -> Res; - fn expand_cmd(&mut self, c: Ast) -> Res; + fn expand_var(&mut self, v: BString) -> Res; + fn expand_cmd(&mut self, c: Ast) -> Res; } #[derive(Debug, Clone)] @@ -80,7 +80,7 @@ impl StringPart { } } -#[derive(Debug)] +#[derive(Debug, Clone)] /// `"hi ${var} $(cmd) "` gets mapped to `[Boring("hi "), Var("var"), String(" "), Cmd(...), Boring(" ")]` pub struct ExpString { parts: Vec, @@ -92,8 +92,11 @@ impl ExpString { for part in self.parts.into_iter() { let mut x = match part { StringPart::Boring(items) => items, - StringPart::Var(v) => e.expand_var(v)?, - StringPart::Cmd(ast) => e.expand_cmd(ast)?, + StringPart::Var(v) => e.expand_var(v.name)?, + StringPart::Cmd(ast) => { + let exp = ast.expand(e)?; + e.expand_cmd(exp)? + } }; out.append(&mut x); } -- cgit v1.2.3