Crate suggestions
source · [−]Expand description
Minimal library to provide clap-style “Did you mean?” suggestions.
The implementation is copied directly from clap.
Examples
let possible_vals = vec!["test", "possible", "values"];
let input = "tst";
let suggestions = suggestions::provide_suggestions(input, &possible_vals);
assert_eq!(suggestions, vec!["test"]);
// We have a convenience function to only pick only a single suggestion, giving `Some` or `None`
let single_suggestion = suggestions::provide_a_suggestion(input, &possible_vals);
assert_eq!(single_suggestion.unwrap(), "test");
Multiple matches
Sometimes, there may be multiple (good) suggestions.
Consider the following example:
let possible_vals = vec!["testing", "tempo"];
let input = "teso"; // Sems ambiguous. Maybe multiple suggestions?
let suggestions = suggestions::provide_suggestions(input, &possible_vals);
// The implementation trys to order matches from "best" to "wort"
assert_eq!(suggestions, vec!["testing", "tempo"]);
Asking for a single suggestion here (provide_a_suggestion
) would attempt to return the “best” one.
As you can immagine, that may not be what the user expects.
Therefore, it is best to stick with provide_suggesetions
.
No matches
If nothing is reasonably similar, asking for suggestions
will return vec![]
or None
.
let possible_vals = vec!["testing", "things", "here"];
let input = "--something-completely_different";
assert_eq!(suggestions::provide_a_suggestion(&input, &possible_vals), None)
Binary
This crate also comes usable as an (optional) zero-dependency binary.
See documentation at the readme.
At the time of this writing it is 276k ;)
Functions
Suggest a string that most is similar to target
,
but is actually present in the possible_values
.
Suggest strings that are similar to target
,
but are actually present in the possible_values
.