惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
B
Blog RSS Feed
美团技术团队
博客园 - 【当耐特】
C
Check Point Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
M
MIT News - Artificial intelligence
aimingoo的专栏
aimingoo的专栏
J
Java Code Geeks
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 司徒正美
T
Tailwind CSS Blog
Last Week in AI
Last Week in AI
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
人人都是产品经理
人人都是产品经理
N
Netflix TechBlog - Medium
Vercel News
Vercel News
P
Proofpoint News Feed
IT之家
IT之家
I
InfoQ
腾讯CDC
H
Hackread – Cybersecurity News, Data Breaches, AI and More

The Rust Programming Language Forum - Latest topics

Beginner building a Rust backend framework (AI-assisted) — feedback appreciated C++ to Rust -- Exceptions Re-exporting a trait with a custom derive_macro Gold linker is deprecated Why is using PhantomData valid in this case? Code review for Static Pool Allocator Looking for a pool based allocator Why is this legal? What does it mean for Rustc to run "out of TLS keys"? Using async/await internally with no internal runtime, but exposing a nonblocking poll API — is this a reasonable design? Testing functions that use randomness `cargo-path`: improve coding agents&#39; ability to find Rust documentation Rust task runners Lifetime weird case Windows - USB device not detected A random rustc-ice-[...].txt file appeared Develop rust where the environment is setup in a docker Undefined Behavior: in-bounds pointer arithmetic failed: attempting to offset pointer by 20 bytes, but got alloc238 which is only 1 byte from the end of the allocation Unbug 0.5 - Runtime debug assertions Is there a tiny error in section 6.2 Reference types? Lifetime woes implementing ratatui::Widget for a reference Rusqlite + Chrono: How do I simplify code to obtain chrono datetime value From OOP to Rust – struggling with code organization and data structure design Way to avoid a self-referential struct Rust RF and audio resources/communities Whyhttp - HTTP mocks that fail where the bug actually is Using tokio channel permits in a tower service Arc::increment_strong_count design question (cross-post) `&T`, `&mut T`, `Pin<&mut T>` and `&Cell<T>`: Ways of Borrowing a `T` Ratatui detect arrow key press and release
Clap completion question
manfredlotz · 2026-04-17 · via The Rust Programming Language Forum - Latest topics

Let's say I have a program claptest like this:

Test program for clap --ignore flag and shell completion

Usage: claptest [OPTIONS]

Options:
      --ignore <IGNORE>...
          Comma-separated list of things to ignore: blabla, something, other
          
          [possible values: blabla, something, other]

      --completion <SHELL>
          Generate shell completion script and print to stdout.
          
          Examples: claptest --completion fish > ~/.config/fish/completions/claptest.fish claptest --completion bash > ~/.bash_completion.d/claptest claptest --completion zsh  > ~/.zsh/completions/_claptest
          
          [possible values: bash, elvish, fish, powershell, zsh]

  -h, --help
          Print help (see a summary with '-h')

I like to have completion for a call to claptest like this claptest --ignore blabla,something
I get completion only for one of blabla, something or `other'

Here my source

use std::io;

use clap::{CommandFactory, Parser, ValueEnum};
use clap_complete::{Shell, generate};

// ── Ignore values ─────────────────────────────────────────────────────────────

#[derive(Debug, Clone, ValueEnum, PartialEq)]
enum Ignore {
    Blabla,
    Something,
    Other,
}

// ── CLI definition ────────────────────────────────────────────────────────────

#[derive(Parser, Debug)]
#[command(
    name = "claptest",
    about = "Test program for clap --ignore flag and shell completion"
)]
struct Args {
    /// Comma-separated list of things to ignore: blabla, something, other
    #[arg(long, value_delimiter = ',', num_args = 1..)]
    ignore: Vec<Ignore>,

    /// Generate shell completion script and print to stdout.
    ///
    /// Examples:
    ///   claptest --completion fish > ~/.config/fish/completions/claptest.fish
    ///   claptest --completion bash > ~/.bash_completion.d/claptest
    ///   claptest --completion zsh  > ~/.zsh/completions/_claptest
    #[arg(long, value_name = "SHELL")]
    completion: Option<Shell>,
}

// ── Main ──────────────────────────────────────────────────────────────────────

fn main() {
    let args = Args::parse();

    if let Some(shell) = args.completion {
        let mut cmd = Args::command();
        generate(shell, &mut cmd, "claptest", &mut io::stdout());
        return;
    }

    println!(
        "ignore_dupes:      {}",
        args.ignore.contains(&Ignore::Blabla)
    );
    println!(
        "ignore_same_named: {}",
        args.ignore.contains(&Ignore::Something)
    );
    println!(
        "ignore_tmpfiles:   {}",
        args.ignore.contains(&Ignore::Other)
    );
}

Any help appreciated.