# suggest [![crates.io version](https://img.shields.io/crates/v/suggestion.svg)](https://crates.io/crates/suggestion) [![crates.io downloads](https://img.shields.io/crates/d/suggestion.svg)](https://crates.io/crates/suggestion)
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`](https://github.com/clap-rs/clap#default-features).
## Examples
### Simple case
This example can be executed by the `cargo run --example simple` command.
```rust
use suggestion::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);
}
}
```
```shell
$ cargo run
No command named `instakk` found.
Did you mean `install`?
```
### Specifying distance
```rust
use suggestion::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);
}
}
```
```shell
$ 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
* `LinkedList`
* `VecDeque`
* `Vec`
### Maps
* `HashMap`
* `BTreeMap`
To suggest keys, use `suggestion::SuggestKey` trait.
### Sets
* `BTreeSet`
* `HashSet`
### Misc
* `BinaryHeap`
* `[T; N]`: primitive array
* `[T]`: slices
## CLI
### Installation
```bash
cargo install suggestion
```
#### WebAssembly
This application also provides a wasm package.
You can install it using [`wapm`](https://wapm.io/help/install) by the following command:
```bash
$ wapm install ken-matsui/suggest
```
### Usage
```bash
$ suggest --help
suggestion 0.3.1
A minimal library & CLI tool to provide similar name suggestions like "Did you mean?"
USAGE:
suggest [OPTIONS] [VALUES]...
ARGS:
Input to check if similar name exists
... Values of similar names
OPTIONS:
-d, --distance Levenshtein Distance
-h, --help Print help information
-q, --quiet Disable console outputs
-V, --version Print version information
```
#### WebAssembly
```bash
$ wapm run suggest --help
...
```
### Examples
```bash
$ 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
```bash
$ 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
```bash
$ cargo build
```
Or you can directly execute the binary:
```bash
$ cargo run
```
#### WebAssembly
```bash
$ 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.
```bash
$ cargo build
$ cargo test
```
### Publish
#### [GitHub Releases](https://github.com/ken-matsui/base64-cli/tags)
```bash
$ git tag v0.1.0
$ git push origin v0.1.0
```
#### [crates.io](https://crates.io/)
```bash
$ cargo publish
```
#### [wapm.io](https://wapm.io/)
```bash
$ cargo build --release --target wasm32-wasi
$ wapm publish
```