ricecoder_cli/
completion.rs

1// Shell completion generation
2// Adapted from automation/src/cli/completion.rs
3
4use crate::router::Cli;
5use clap::CommandFactory;
6use clap_complete::{generate, Shell};
7use std::io;
8
9/// Generate shell completions
10pub fn generate_completions(shell: &str) -> Result<(), String> {
11    let shell = match shell.to_lowercase().as_str() {
12        "bash" => Shell::Bash,
13        "zsh" => Shell::Zsh,
14        "fish" => Shell::Fish,
15        "powershell" | "pwsh" => Shell::PowerShell,
16        "elvish" => Shell::Elvish,
17        _ => return Err(format!("Unknown shell: {}", shell)),
18    };
19
20    let mut cmd = Cli::command();
21    generate(shell, &mut cmd, "rice", &mut io::stdout());
22    Ok(())
23}
24
25#[cfg(test)]
26mod tests {
27    use super::*;
28
29    #[test]
30    fn test_valid_shells() {
31        let shells = vec!["bash", "zsh", "fish", "powershell"];
32        for shell in shells {
33            // Just verify the function doesn't panic
34            let _ = generate_completions(shell);
35        }
36    }
37
38    #[test]
39    fn test_invalid_shell() {
40        let result = generate_completions("invalid");
41        assert!(result.is_err());
42    }
43}