Expand description

Minimal library to provide clap-style “Did you mean?” suggestions.

The implementation is copied directly from clap.


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)


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 ;)


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.