diff options
| author | Jonas Maier <> | 2026-05-23 23:34:31 +0200 |
|---|---|---|
| committer | Jonas Maier <> | 2026-05-23 23:34:31 +0200 |
| commit | 7cd15fe67ca0118520dcc4e9e189d513b0375e10 (patch) | |
| tree | eed22bff9dc80eb298323c92acd3b915a803180d /src/parse/mod.rs | |
| parent | a9ea5669915f4ac6b0d9e7d826d1ee341a2e3c80 (diff) | |
| download | pish-7cd15fe67ca0118520dcc4e9e189d513b0375e10.tar.gz | |
prompt evaluation in own module
Diffstat (limited to 'src/parse/mod.rs')
| -rw-r--r-- | src/parse/mod.rs | 20 |
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 { |
