From 00b47b3058b6adc6f4e17651ea6b73f81435b8b6 Mon Sep 17 00:00:00 2001 From: Ken Matsui <26405363+ken-matsui@users.noreply.github.com> Date: Mon, 8 Nov 2021 09:12:31 +0900 Subject: [PATCH] feat(sessions): Suggestion for a similar session name Remove unnecessary to_string Replace `garando_syntax` crate with `lev_distance` which is much smaller Replace `lev_distance` crate with `suggestion` to simplify the code --- Cargo.lock | 16 ++++++++++++++++ Cargo.toml | 1 + src/sessions.rs | 4 ++++ 3 files changed, 21 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index 859c316e..72c766b0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1174,6 +1174,12 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" +[[package]] +name = "lev_distance" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d234d89ecf5621c935b69a4c7266c9a634a95e465081682be47358617ce825b" + [[package]] name = "libc" version = "0.2.106" @@ -2152,6 +2158,15 @@ dependencies = [ "syn", ] +[[package]] +name = "suggestion" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "015336207b7660be204f5012fcdb84b3ff35442b26cea77ebe6103929a56e54b" +dependencies = [ + "lev_distance", +] + [[package]] name = "syn" version = "1.0.81" @@ -2868,6 +2883,7 @@ dependencies = [ "names", "rand 0.8.4", "ssh2", + "suggestion", "zellij-client", "zellij-server", "zellij-utils", diff --git a/Cargo.toml b/Cargo.toml index c964af41..0830ddd7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,6 +21,7 @@ zellij-server = { path = "zellij-server/", version = "0.20.0" } zellij-utils = { path = "zellij-utils/", version = "0.20.0" } log = "0.4.14" dialoguer = "0.9.0" +suggestion = "0.1.0" [dev-dependencies] insta = { version = "1.6.0", features = ["backtrace"] } diff --git a/src/sessions.rs b/src/sessions.rs index bf44d088..4d2fe5fb 100644 --- a/src/sessions.rs +++ b/src/sessions.rs @@ -1,6 +1,7 @@ use std::os::unix::fs::FileTypeExt; use std::time::SystemTime; use std::{fs, io, process}; +use suggestion::Suggest; use zellij_utils::{ consts::ZELLIJ_SOCK_DIR, interprocess::local_socket::LocalSocketStream, @@ -177,6 +178,9 @@ pub(crate) fn assert_session(name: &str) { return; } else { println!("No session named {:?} found.", name); + if let Some(sugg) = get_sessions().unwrap().suggest(name) { + println!(" help: Did you mean `{}`?", sugg); + } } } Err(e) => {