From 81759dd51eb1f6f9a7dc8af9b2b8126ff7dfab24 Mon Sep 17 00:00:00 2001 From: Jonas Maier Date: Sun, 31 May 2026 19:21:44 +0200 Subject: regex based case statements --- src/parse/mod.rs | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) (limited to 'src/parse/mod.rs') diff --git a/src/parse/mod.rs b/src/parse/mod.rs index 68a5e56..5815730 100644 --- a/src/parse/mod.rs +++ b/src/parse/mod.rs @@ -7,6 +7,8 @@ mod test; mod span; +pub mod regex; + pub trait Stage: PartialEq { type Str: std::fmt::Debug + Clone + PartialEq; } @@ -1844,7 +1846,7 @@ impl Parse for Pipes { #[derive(Debug, Clone, PartialEq)] pub struct CaseBranch { - pub pattern: BString, + pub pattern: regex::Pattern, pub block: Block, } @@ -1855,10 +1857,8 @@ pub struct Case { } impl CmdDisplay for CaseBranch { - fn cdisplay(&self, w: &mut dyn std::io::Write) -> std::io::Result<()> { - write!(w, "cbranch(b\"{}\", ", self.pattern.escape_ascii())?; - self.block.cdisplay(w)?; - write!(w, ")") + fn cdisplay(&self, _w: &mut dyn std::io::Write) -> std::io::Result<()> { + todo!() } } @@ -1875,14 +1875,7 @@ impl Parse for CaseBranch { fn parse(b: &mut Cursor<'_>) -> Result { b.spaces(); - let mut pattern = Vec::new(); - while b.has() && b.peek() != b'{' { - pattern.push(b.adv()); - } - while let Some(b' ' | b'\n' | b'\t' | b'\r') = pattern.last() { - pattern.pop(); - } - + let pattern = regex::Pattern::parse(b)?; let block = Block::parse(b)?; Ok(Self { pattern, block }) -- cgit v1.2.3