From aa251efb87b561f62266628f06ad341253fbbdc5 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Mon, 17 Aug 2026 04:05:41 +0800 Subject: refactor!: remove legacy parser feature and migrate to picker The legacy `parser` feature and its module tree (`mingling::parser`, `Argument`, `Picker`, `Pickable`, etc.) have been fully removed and replaced by the `picker` feature powered by `arg-picker`. BREAKING CHANGE: Remove `parser` feature and use `picker` instead. Migration guide: Replace `features = ["parser"]` with `features = ["picker"]` and update API usage per the provided table. --- examples/example-completion/Cargo.lock | 25 ++++++++++++++++++------- examples/example-completion/Cargo.toml | 2 +- examples/example-completion/src/main.rs | 20 ++++++++++++-------- 3 files changed, 31 insertions(+), 16 deletions(-) (limited to 'examples/example-completion') diff --git a/examples/example-completion/Cargo.lock b/examples/example-completion/Cargo.lock index 97401e7..d4b2f33 100644 --- a/examples/example-completion/Cargo.lock +++ b/examples/example-completion/Cargo.lock @@ -2,6 +2,23 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "arg-picker" +version = "0.2.0" +dependencies = [ + "arg-picker-macros", + "just_fmt 0.2.0", +] + +[[package]] +name = "arg-picker-macros" +version = "0.2.0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] + [[package]] name = "equivalent" version = "1.0.2" @@ -86,9 +103,9 @@ dependencies = [ name = "mingling" version = "0.5.0" dependencies = [ + "arg-picker", "mingling_core", "mingling_macros", - "size", ] [[package]] @@ -166,12 +183,6 @@ dependencies = [ "serde", ] -[[package]] -name = "size" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b6709c7b6754dca1311b3c73e79fcce40dd414c782c66d88e8823030093b02b" - [[package]] name = "syn" version = "2.0.118" diff --git a/examples/example-completion/Cargo.toml b/examples/example-completion/Cargo.toml index 00c7f8c..9884f4e 100644 --- a/examples/example-completion/Cargo.toml +++ b/examples/example-completion/Cargo.toml @@ -9,7 +9,7 @@ path = "../../mingling" features = [ # Enable `comp` features "comp", - "parser", + "picker", ] [build-dependencies.mingling] diff --git a/examples/example-completion/src/main.rs b/examples/example-completion/src/main.rs index 7de41f6..d363697 100644 --- a/examples/example-completion/src/main.rs +++ b/examples/example-completion/src/main.rs @@ -74,18 +74,22 @@ fn complete_greet_entry(ctx: &ShellContext) -> Suggest { } // When the user is typing `--repeat` - if ctx.filling_argument(["-r", "--repeat"]) { + if ctx.previous_word == "-r" || ctx.previous_word == "--repeat" { return suggest! {}; // Don't suggest anything } // When the user is typing `-` - if ctx.typing_argument() { - return suggest! { + if ctx.current_word.starts_with('-') { + // Remove arguments that have already been typed by the user + let typed: Vec<&str> = ctx.all_words.iter().map(String::as_str).collect(); + let mut set = suggest! { "-r": "Number of repetitions", "--repeat": "Number of repetitions", + }; + if let Suggest::Suggest(items) = &mut set { + items.retain(|item| !typed.contains(&item.suggest().as_str())); } - // Remove arguments that have already been typed by the user - .strip_typed_argument(ctx); + return set; } // Otherwise, suggest nothing @@ -102,9 +106,9 @@ pack!(ResultName = (u8, String)); #[chain] fn handle_greet(args: EntryGreet) -> Next { let result: ResultName = args - .pick_or(["-r", "--repeat"], 1) - .pick_or((), "World") - .unpack() + .pick_or(&arg![repeat: u8, 'r'], || 1) + .pick_or(&arg![String], || "World".to_string()) + .unwrap() .into(); result.into() } -- cgit