|
1 | | -use clap::{Args, CommandFactory}; |
2 | | -use clap_complete::Shell; |
| 1 | +use clap::{Args, Command, CommandFactory, ValueEnum}; |
| 2 | +use clap_complete::{ |
| 3 | + Generator, |
| 4 | + Shell::{Bash, Elvish, Fish, Zsh}, |
| 5 | +}; |
| 6 | +use clap_complete_nushell::Nushell; |
3 | 7 |
|
4 | 8 | use crate::cli::Cli; |
5 | 9 |
|
6 | 10 | #[derive(Debug, Args)] |
7 | 11 | pub struct CompletionsArguments { |
8 | 12 | /// Shell to generate completions for. |
| 13 | + #[arg(value_enum)] |
9 | 14 | pub shell: Shell, |
10 | 15 | } |
11 | 16 |
|
| 17 | +#[derive(Clone, Debug, ValueEnum)] |
| 18 | +pub enum Shell { |
| 19 | + /// Bourne Again SHell |
| 20 | + Bash, |
| 21 | + |
| 22 | + /// Elvish shell |
| 23 | + Elvish, |
| 24 | + |
| 25 | + /// Friendly Interactive SHell |
| 26 | + Fish, |
| 27 | + |
| 28 | + /// Z SHell |
| 29 | + Zsh, |
| 30 | + |
| 31 | + /// Nushell |
| 32 | + Nushell, |
| 33 | +} |
| 34 | + |
12 | 35 | /// This is the `boil completions` command handler function. |
13 | 36 | pub fn run_command(arguments: CompletionsArguments) { |
14 | 37 | let mut cli = Cli::command(); |
15 | 38 | let bin_name = cli.get_bin_name().unwrap_or("boil").to_owned(); |
16 | 39 |
|
17 | | - clap_complete::generate(arguments.shell, &mut cli, bin_name, &mut std::io::stdout()); |
| 40 | + match arguments.shell { |
| 41 | + Shell::Bash => generate(Bash, &mut cli, bin_name), |
| 42 | + Shell::Elvish => generate(Elvish, &mut cli, bin_name), |
| 43 | + Shell::Fish => generate(Fish, &mut cli, bin_name), |
| 44 | + Shell::Zsh => generate(Zsh, &mut cli, bin_name), |
| 45 | + Shell::Nushell => generate(Nushell, &mut cli, bin_name), |
| 46 | + } |
| 47 | +} |
| 48 | + |
| 49 | +fn generate(generator: impl Generator, cli: &mut Command, bin_name: String) { |
| 50 | + clap_complete::generate(generator, cli, bin_name, &mut std::io::stdout()); |
18 | 51 | } |
0 commit comments