suggest

A minimal library & CLI tool to provide similar name suggestions like "Did you mean?"
This library provides suggestion traits for all collection types in the standard library.
A WebAssembly package is also supported.
This library is intended to suggest a candidate from a list of unknown suggestions until runtime, in addition to the suggestion feature already available in clap.
This crate was previously called suggestion but renamed, and it'll be yanked.
Examples
Simple case
This example can be executed by the cargo run --example simple command.
use suggest::Suggest;
fn main() {
let input = "instakk";
let list_commands = vec!["update", "install"];
if list_commands.contains(&input) {
return;
}
if let Some(sugg) = list_commands.suggest(input) {
println!("No command named `{}` found.", input);
println!("Did you mean `{}`?", sugg);
}
}
$ cargo run
No command named `instakk` found.
Did you mean `install`?
Specifying distance
use suggest::Suggest;
fn main() {
let input = "paoc";
let list_commands = vec!["poac", "poacpp"];
if list_commands.contains(&input) {
return;
}
if let Some(sugg) = list_commands.suggest_with_dist(input, Some(2)) {
println!("No command named `{}` found.", input);
println!("Did you mean `{}`?", sugg);
}
}
$ cargo run
No command named `paoc` found.
Did you mean `poac`?
Supported types
Please let me know if anything is left out through issues or pull requests.
Sequences
Maps
To suggest keys, use suggest::SuggestKey trait.
Sets
Misc
BinaryHeap
[T; N]: primitive array
[T]: slices
CLI
Installation
cargo install suggest
WebAssembly
This application also provides a wasm package.
You can install it using wapm by the following command:
$ wapm install ken-matsui/suggest
Usage
$ suggest --help
suggest 0.3.1
A minimal library & CLI tool to provide similar name suggestions like "Did you mean?"
USAGE:
suggest [OPTIONS] <INPUT> [VALUES]...
ARGS:
<INPUT> Input to check if similar name exists
<VALUES>... Values of similar names
OPTIONS:
-d, --distance <DISTANCE> Levenshtein Distance
-h, --help Print help information
-q, --quiet Disable console outputs
-V, --version Print version information
WebAssembly
$ wapm run suggest --help
...
Examples
$ suggest instakk update install
The `instakk` input is similar to `install`.
$ suggest hoge update install
No similar name for the `hoge` input was found.
$ suggest install update install
The same value with the `install` input exists.
$ suggest paoc poac poacpp
No similar name for the `paoc` input was found.
$ suggest paoc poac poacpp --distance 2
The `paoc` input is similar to `poac`.
WebAssembly
$ wapm run suggest instakk update install
The `instakk` input is similar to `install`.
$ wapm run suggest hoge update install
No similar name for the `hoge` input was found.
$ wapm run suggest install update install
The same value with the `install` input exists.
$ wapm run suggest paoc poac poacpp
No similar name for the `paoc` input was found.
$ wapm run suggest paoc poac poacpp --distance 2
The `paoc` input is similar to `poac`.
Contribution
Contributions, including issues and pull requests, are very welcome.
Build
$ cargo build
Or you can directly execute the binary:
$ cargo run
WebAssembly
$ rustup target add wasm32-wasi
$ cargo build --target wasm32-wasi
$ wasmer run target/wasm32-wasi/debug/suggest.wasm encode hello
Test
This command can also test C API.
$ cargo build
$ cargo test
Publish
$ git tag v0.1.0
$ git push origin v0.1.0
$ cargo publish
$ cargo build --release --target wasm32-wasi
$ wapm publish