aboutsummaryrefslogtreecommitdiffstats
path: root/src/run/builtin.rs
diff options
context:
space:
mode:
authorJonas Maier <jonas@x77.dev>2026-05-31 19:21:44 +0200
committerJonas Maier <jonas@x77.dev>2026-05-31 19:21:44 +0200
commit81759dd51eb1f6f9a7dc8af9b2b8126ff7dfab24 (patch)
treeaf451a170b30e05148088d477b725023d02c505d /src/run/builtin.rs
parent08f3af622cc3e7b3f85a60c6ffe83d9d70e9dc02 (diff)
downloadpish-81759dd51eb1f6f9a7dc8af9b2b8126ff7dfab24.tar.gz
regex based case statements
Diffstat (limited to 'src/run/builtin.rs')
-rw-r--r--src/run/builtin.rs31
1 files changed, 30 insertions, 1 deletions
diff --git a/src/run/builtin.rs b/src/run/builtin.rs
index fab7565..6f7cc5d 100644
--- a/src/run/builtin.rs
+++ b/src/run/builtin.rs
@@ -1098,7 +1098,36 @@ mod dbg {
Ok(())
}
}
+
+ #[derive(Copy, Clone)]
+ pub struct case_match;
+ impl Builtin for case_match {
+ fn name(&self) -> &str {
+ "case_match"
+ }
+
+ fn io(
+ &self,
+ _session: Arc<Mutex<Session>>,
+ args: &[BString],
+ _stdin: &mut dyn Read,
+ stdout: &mut dyn Write,
+ ) -> Result {
+ let regex = match crate::parse::regex::Pattern::parse_from_bytes(&args[0]) {
+ Ok(r) => r,
+ Err(e) => {
+ writeln!(stdout, "not a valid regex: {e:?}")?;
+ return Err(Error::Exit(1));
+ },
+ };
+
+ let compiled = regex.compile();
+ writeln!(stdout, "{compiled:?}")?;
+
+ Ok(())
+ }
+ }
}
#[cfg(debug_assertions)]
-pub use dbg::{debug, re};
+pub use dbg::{debug, re, case_match};