summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/poem/elements/verse.rs25
-rw-r--r--src/poem/recite.rs4
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 {