#suggestions #input #suggest #mean #did #name #command-line-tool

yanked suggestion

A minimal library & CLI tool to provide similar name suggestions like "Did you mean?"

0.3.4 Apr 25, 2022
0.3.3 Mar 2, 2022
0.3.0 Feb 1, 2022
0.2.0 Feb 1, 2022
0.1.0 Nov 11, 2021

#5 in #suggest

46 downloads per month
Used in 2 crates

MIT license

15KB
184 lines

suggest crates.io version crates.io downloads

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.

Examples

Simple case

This example can be executed by the cargo run --example simple command.

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);
    }
}
$ cargo run
No command named `instakk` found.
Did you mean `install`?

Specifying distance

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

cargo install suggestion

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
suggestion 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

GitHub Releases

$ git tag v0.1.0
$ git push origin v0.1.0

crates.io

$ cargo publish

wapm.io

$ cargo build --release --target wasm32-wasi
$ wapm publish

Dependencies

~3MB
~63K SLoC