diff options
-rw-r--r-- | src/poem/elements/verse.rs | 25 | ||||
-rw-r--r-- | src/poem/recite.rs | 4 |
2 files changed, 15 insertions, 14 deletions
diff --git a/src/poem/elements/verse.rs b/src/poem/elements/verse.rs index 5694b55..a1ae65f 100644 --- a/src/poem/elements/verse.rs +++ b/src/poem/elements/verse.rs @@ -192,16 +192,16 @@ impl Verse { /// let stanza_success = Stanza::new(command_success); /// let stanza_fail = Stanza::new(command_fail); /// - /// stanza_success.spellcheck(bins) // -> true - /// stanza_fail.spellcheck(bins) // -> false + /// stanza_success.spellcheck(bins) // -> Some(i) + /// stanza_fail.spellcheck(bins) // -> None /// ``` - pub fn spellcheck(&self, bins: &Vec<String>) -> bool { + pub fn spellcheck(&self, bins: &Vec<String>) -> Option<usize> { // An empty verb (i.e. the empty string) cannot be a program, so // return false // Thanks to the parsing in Poem::read, however, it's // unlikely for this to happen if self.verb().is_empty() { - return false; + return None; } // Only search the $PATH if a full or relative path was not given, or @@ -209,17 +209,18 @@ impl Verse { if !Path::new(self.verb().as_str()).exists() { // Try to find a binary in our path with the same name as the verb // Searches in $PATH order - match bins - .iter() - .find(|bin| bin.split('/').last().unwrap() == self.verb()) - { - Some(_) => return true, - None => return false, + for (i, path) in bins.iter().enumerate() { + if path.split('/').last().unwrap() == self.verb() { + return Some(i); + } } + + // If it was not found, return None + return None; } - // Return true if the full path or relative path exists - true + // Return the length of bins if the full path or relative path exists + Some(bins.len()) } /// Run a command diff --git a/src/poem/recite.rs b/src/poem/recite.rs index ffa97bf..037906b 100644 --- a/src/poem/recite.rs +++ b/src/poem/recite.rs @@ -155,9 +155,9 @@ impl Reciteable for Poem { // If it doesn't exist, try refreshing the binary cache, and check // again // If it still doesn't exist, print an error - if !verse.spellcheck(&env.bins) { + if !verse.spellcheck(&env.bins).is_some() { env.bins = path::refresh(); - if !verse.spellcheck(&env.bins) { + if !verse.spellcheck(&env.bins).is_some() { eprintln!("dwvsh: {}: command not found", verse.verb()); if verse.meter != Rune::And { |