#nushell #completion #clap

clap_complete_nushell

A generator library used with clap for Nushell completion scripts

23 releases (11 stable)

4.5.4 Oct 8, 2024
4.5.3 Jul 25, 2024
4.5.2 Jun 6, 2024
4.5.1 Feb 16, 2024
0.1.8 Nov 5, 2022

#355 in Command-line interface

Download history 31540/week @ 2024-08-22 30871/week @ 2024-08-29 37195/week @ 2024-09-05 31943/week @ 2024-09-12 30748/week @ 2024-09-19 29102/week @ 2024-09-26 30087/week @ 2024-10-03 38404/week @ 2024-10-10 32664/week @ 2024-10-17 29911/week @ 2024-10-24 28859/week @ 2024-10-31 34438/week @ 2024-11-07 35923/week @ 2024-11-14 35106/week @ 2024-11-21 37683/week @ 2024-11-28 29391/week @ 2024-12-05

143,716 downloads per month
Used in 46 crates (40 directly)

MIT/Apache and maybe CC-PDDC

270KB
3.5K SLoC

clap_complete_nushell

Generates Nushell completions for clap based CLIs

Crates.io Crates.io License License docs.rs

Examples

myapp.rs

use clap::{builder::PossibleValue, Arg, ArgAction, Command, ValueHint};
use clap_complete::generate;
use clap_complete_nushell::Nushell;
use std::io;

fn main() {
    let mut cmd = Command::new("myapp")
        .version("3.0")
        .propagate_version(true)
        .about("Tests completions")
        .arg(
            Arg::new("file")
                .value_hint(ValueHint::FilePath)
                .help("some input file"),
        )
        .arg(
            Arg::new("config")
                .action(ArgAction::Count)
                .help("some config file")
                .short('c')
                .visible_short_alias('C')
                .long("config")
                .visible_alias("conf"),
        )
        .arg(Arg::new("choice").value_parser(["first", "second"]))
        .subcommand(
            Command::new("test").about("tests things").arg(
                Arg::new("case")
                    .long("case")
                    .action(ArgAction::Set)
                    .help("the case to test"),
            ),
        )
        .subcommand(
            Command::new("some_cmd")
                .about("top level subcommand")
                .subcommand(
                    Command::new("sub_cmd").about("sub-subcommand").arg(
                        Arg::new("config")
                            .long("config")
                            .action(ArgAction::Set)
                            .value_parser([PossibleValue::new("Lest quotes aren't escaped.")])
                            .help("the other case to test"),
                    ),
                ),
        );

    generate(Nushell, &mut cmd, "myapp", &mut io::stdout());
}

myapp.nu

module completions {

  def "nu-complete myapp choice" [] {
    [ "first" "second" ]
  }

  # Tests completions
  export extern myapp [
    file?: string             # some input file
    --config(-c)              # some config file
    --conf                    # some config file
    -C                        # some config file
    choice?: string@"nu-complete myapp choice"
    --version(-V)             # Print version
  ]

  # tests things
  export extern "myapp test" [
    --case: string            # the case to test
    --version(-V)             # Print version
  ]

  # top level subcommand
  export extern "myapp some_cmd" [
    --version(-V)             # Print version
  ]

  def "nu-complete myapp some_cmd sub_cmd config" [] {
    [ "\"Lest quotes aren't escaped.\"" ]
  }

  # sub-subcommand
  export extern "myapp some_cmd sub_cmd" [
    --config: string@"nu-complete myapp some_cmd sub_cmd config" # the other case to test
    --version(-V)             # Print version
  ]

}

use completions *

Dependencies

~0.8–39MB
~633K SLoC