suggestion

Crates.iosuggestion
lib.rssuggestion
version0.3.4
sourcesrc
created_at2021-11-11 04:01:50.446791
updated_at2022-04-25 03:48:54.821766
descriptionA minimal library & CLI tool to provide similar name suggestions like "Did you mean?"
homepagehttps://github.com/ken-matsui/suggest#readme
repositoryhttps://github.com/ken-matsui/suggest/
max_upload_size
id479990
size25,153
Ken Matsui (ken-matsui)

documentation

https://docs.rs/suggestion

README

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
Commit count: 67

cargo fmt