aboutsummaryrefslogtreecommitdiffstats
path: root/src/parse/mod.rs
diff options
context:
space:
mode:
authorJonas Maier <>2026-05-23 23:34:31 +0200
committerJonas Maier <>2026-05-23 23:34:31 +0200
commit7cd15fe67ca0118520dcc4e9e189d513b0375e10 (patch)
treeeed22bff9dc80eb298323c92acd3b915a803180d /src/parse/mod.rs
parenta9ea5669915f4ac6b0d9e7d826d1ee341a2e3c80 (diff)
downloadpish-7cd15fe67ca0118520dcc4e9e189d513b0375e10.tar.gz
prompt evaluation in own module
Diffstat (limited to 'src/parse/mod.rs')
-rw-r--r--src/parse/mod.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/parse/mod.rs b/src/parse/mod.rs
index 5059311..6ce3133 100644
--- a/src/parse/mod.rs
+++ b/src/parse/mod.rs
@@ -551,6 +551,11 @@ impl StringPart {
pub fn is_boring(&self) -> bool {
matches!(self, StringPart::Boring(..))
}
+
+ pub fn is_command(&self) -> bool {
+ matches!(self, StringPart::Cmd(..))
+ }
+
pub fn unwrap_boring(self) -> BString {
match self {
StringPart::Boring(items) => items,
@@ -588,6 +593,21 @@ impl ExpString {
}
Ok(out)
}
+
+ pub fn has_commands(&self) -> bool {
+ self.parts.iter().any(|part| part.is_command())
+ }
+
+ /// vars that are directly mentioned in this string interpolation, i.e. does not look into commands
+ pub fn vars(&self) -> Vec<BString> {
+ self.parts
+ .iter()
+ .filter_map(|part| match part {
+ StringPart::Var(var) => Some(var.name.name.clone()),
+ _ => None,
+ })
+ .collect()
+ }
}
fn is_symbol(x: u8) -> bool {