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§
- provide_
a_ suggestion - Suggest a string that most is similar to
target, but is actually present in thepossible_values. - provide_
suggestions - Suggest strings that are similar to
target, but are actually present in thepossible_values.