summaryrefslogtreecommitdiffstats
path: root/src/poem/anthology/which.rs
diff options
context:
space:
mode:
authorRory Dudley2024-06-14 20:29:32 -0400
committerRory Dudley2024-06-14 20:29:32 -0400
commitfedd4c31b0d1c6d036b1105a74b6e6a1f135f2b4 (patch)
tree3dc44055f9a452c8bbeb7e6ab1e45b65ebbb7417 /src/poem/anthology/which.rs
parentc4cd1e2c165c4f34ebf67fa9350f8732b2aeca13 (diff)
downloaddwarvish-fedd4c31b0d1c6d036b1105a74b6e6a1f135f2b4.tar.gz
Add back spellcheck
This commit reworks spellcheck() so it is more verbose about what it returns. It also re-introduces the use of spellcheck() in Poem::recite(). Spellcheck now returns a value in the enum, Spelling: FullPath -> Indicates a full path was specified as the verb OnPath -> Indicates the verb is on the $PATH BuiltIn -> Indicates the verb is a built-in command None (Option) -> The verb does not exist This commit also removes some defunct (commented-out) code.
Diffstat (limited to 'src/poem/anthology/which.rs')
-rw-r--r--src/poem/anthology/which.rs29
1 files changed, 16 insertions, 13 deletions
diff --git a/src/poem/anthology/which.rs b/src/poem/anthology/which.rs
index 6fe709c..0872dda 100644
--- a/src/poem/anthology/which.rs
+++ b/src/poem/anthology/which.rs
@@ -1,4 +1,5 @@
use crate::compose::Environment;
+use crate::poem::elements::verse::Spelling;
use crate::poem::Verse;
use std::os::unix::process::ExitStatusExt;
use std::process::{ExitStatus, Output};
@@ -22,26 +23,28 @@ pub fn incant(clause: &Option<Vec<String>>, uout: bool, uerr: bool, env: &Enviro
continue;
}
- // Check if it's a built-in
- match super::lookup(&word) {
- Some(_) => {
+ // Manually check the path
+ let mut verb = Verse::new();
+ verb.push(word.clone());
+ match verb.spellcheck(&env.bins) {
+ Some(Spelling::OnPath(i)) => {
+ output = format!("{}\n", env.bins[i]);
+ if uout {
+ out.append(&mut output.as_bytes().to_vec());
+ } else {
+ print!("{}", output);
+ }
+ }
+ Some(Spelling::BuiltIn(_)) => {
output = format!("{}: shell built-in command\n", word);
if uout {
out.append(&mut output.as_bytes().to_vec());
} else {
print!("{}", output);
}
- continue;
}
- None => {}
- }
-
- // Manually check the path
- let mut verb = Verse::new();
- verb.push(word.clone());
- match verb.spellcheck(&env.bins) {
- Some(i) => {
- output = format!("{}\n", env.bins[i]);
+ Some(Spelling::FullPath) => {
+ output = format!("{}\n", word);
if uout {
out.append(&mut output.as_bytes().to_vec());
} else {