about summary refs log tree commit diff stats
path: root/pkgs/sources/lf-make-map/src/cli.rs
blob: a398e451b819a5fbb9bd3872f93740d4296a4b46 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
use std::path::PathBuf;

use clap::{ArgAction, Parser, Subcommand};

/// An automatic lf cd mapping generator
#[derive(Parser, Debug)]
#[clap(author, version, about, long_about = None)]
#[command(next_line_help = true)]
pub struct Args {
    /// The directory to treat as home
    #[arg(long, short = 'n', env = "HOME")]
    pub home_name: PathBuf,

    /// The number of directories to generate mappings for, starting from each `relevant_directory`
    #[arg(long, short, default_value = "2")]
    pub depth: usize,

    /// Increase message verbosity
    #[arg(long="verbose", short = 'v', action = ArgAction::Count)]
    pub verbosity: u8,

    /// Silence all output
    #[arg(long, short = 'q')]
    pub quiet: bool,

    #[command(subcommand)]
    pub command: Command,
}

#[derive(Subcommand, Debug)]
pub enum Command {
    /// Visualize the generated mappings in a tree
    Visualize {
        #[command(flatten)]
        options: CommandOptions,
    },

    /// Output the generated mappings in a format suitable for the lf config file
    Generate {
        #[command(flatten)]
        options: CommandOptions,
    },
}

#[derive(Debug, Parser)]
pub struct CommandOptions {
    /// The directories to generate mappings for
    pub relevant_directories: Vec<PathBuf>,
}