#did #mean #multiple #json #target #clap-style

bin+lib suggestions

Minimal library to provide clap-style "Did you mean?" suggestions

1 unstable release

0.1.1 Jan 16, 2022
0.1.0 Jan 16, 2022

#17 in #mean

Download history 961/week @ 2024-07-22 714/week @ 2024-07-29 804/week @ 2024-08-05 727/week @ 2024-08-12 721/week @ 2024-08-19 673/week @ 2024-08-26 535/week @ 2024-09-02 1684/week @ 2024-09-09 789/week @ 2024-09-16 281/week @ 2024-09-23 179/week @ 2024-09-30 508/week @ 2024-10-07 981/week @ 2024-10-14 1183/week @ 2024-10-21 391/week @ 2024-10-28 471/week @ 2024-11-04

3,036 downloads per month

MIT license

12KB
154 lines

suggestions docs [crates.io]](https://lib.rs/crates/suggestions)

Minimal Rust library to provide clap-style "Did you mean?" suggestions

The only dependency is strsim.

The implementation is copied directly from clap (see here). It has just been extracted into a library.

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

A binary is available as an example of how to use the library.

It has no additional dependencies. Desired targets are provided as arguments, and "possible strings" are read from standard input

Examples

$ echo "baz\nbar\nfood\nfoz" | suggestions fod
foz food
# Supports multiple targets
$ echo "baz\nbar\nfood\nfoz" | suggestions fod ba
foz food
baz bar
# No matches -> corresponding empty line
$ echo "baz\nbar\nfood\nfoz" | suggestions fod ba
foz food
baz bar

```

```
# Supports outputing as josn (for whatever that's worth)
# echo "baz\nbar\nfood\nfoz" | suggestions --json fod ba nothing-similar
{
  "fod":["foz","food"],
  "ba":["baz","bar"],
  "nothing-similar":[]
}

Dependencies

~43KB