• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pkgxdev / pkgx / 14842101506

05 May 2025 05:13PM UTC coverage: 91.182% (-0.03%) from 91.212%
14842101506

push

github

web-flow
Merge pull request #1175 from pkgxdev/chdir

--chdir/-C

22 of 24 new or added lines in 3 files covered. (91.67%)

1 existing line in 1 file now uncovered.

1520 of 1667 relevant lines covered (91.18%)

16748654.94 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

93.94
/crates/cli/src/args.rs
1
use console::style;
2

3
pub enum Mode {
4
    X,
5
    Help,
6
    Version,
7
    Query,
8
}
9

10
pub struct Flags {
11
    pub quiet: bool,
12
    pub silent: bool,
13
    pub json: Option<isize>,
14
    pub version_n_continue: bool,
15
    pub shebang: bool,
16
    pub sync: bool,
17
    pub chdir: Option<String>,
18
}
19

20
pub struct Args {
21
    pub plus: Vec<String>,
22
    pub args: Vec<String>,
23
    pub find_program: bool,
24
    pub mode: Mode,
25
    pub flags: Flags,
26
}
27

28
pub fn parse() -> Args {
46✔
29
    let mut mode = Mode::X;
46✔
30
    let mut plus = Vec::new();
46✔
31
    let mut args = Vec::new();
46✔
32
    let mut silent: bool = false;
46✔
33
    let mut quiet: bool = false;
46✔
34
    let mut json = None;
46✔
35
    let mut find_program = false;
46✔
36
    let mut collecting_args = false;
46✔
37
    let mut version_n_continue = false;
46✔
38
    let mut shebang = false;
46✔
39
    let mut sync = false;
46✔
40
    let mut chdir = None;
46✔
41
    let json_latest_v: isize = 2;
46✔
42

46✔
43
    let mut args_iter = std::env::args().skip(1);
46✔
44
    while let Some(arg) = args_iter.next() {
118✔
45
        if collecting_args {
74✔
46
            args.push(arg);
6✔
47
        } else if arg.starts_with('+') {
68✔
48
            plus.push(arg.trim_start_matches('+').to_string());
24✔
49
        } else if arg == "--" {
44✔
50
            find_program = false;
2✔
51
            collecting_args = true;
2✔
52
        } else if arg.starts_with("--") {
42✔
53
            match arg.as_str() {
18✔
54
                "--shebang" => shebang = true,
18✔
55
                "--json" => {
18✔
56
                    if !silent {
2✔
57
                        eprintln!(
2✔
58
                            "{} use --json=v{}",
2✔
59
                            style("warning: --json is not stable").yellow(),
2✔
60
                            json_latest_v
2✔
61
                        );
2✔
62
                    }
2✔
63
                    json = Some(2);
2✔
64
                }
65
                "--chdir" | "--cd" => chdir = args_iter.next(),
16✔
66
                "--json=v1" => json = Some(1),
16✔
67
                "--json=v2" => json = Some(2),
14✔
68
                "--silent" => silent = true,
12✔
69
                "--help" => mode = Mode::Help,
10✔
70
                "--version" => mode = Mode::Version,
8✔
71
                "--quiet" => quiet = true,
6✔
72
                "--query" => mode = Mode::Query,
4✔
73
                "--sync" => sync = true,
4✔
74
                "--shellcode" => {
2✔
75
                    if !silent {
2✔
76
                        eprintln!("{}", style("⨯ migration required").red());
2✔
77
                        eprintln!(
2✔
78
                            "{} pkgx^2 is now exclusively focused on executing packages",
2✔
79
                            style("│").red()
2✔
80
                        );
2✔
81
                        eprintln!(
2✔
82
                            "{} you need to migrate to the new, independent `dev` command",
2✔
83
                            style("│").red()
2✔
84
                        );
2✔
85
                        eprintln!("{} run the following:", style("│").red());
2✔
86
                        eprintln!(
2✔
87
                            "{} pkgx pkgx^1 deintegrate && pkgx dev integrate",
2✔
88
                            style("╰─➤").red()
2✔
89
                        );
2✔
90
                    }
2✔
91
                    std::process::exit(1);
2✔
92
                }
93
                _ => panic!("unknown argument {}", arg),
×
94
            }
95
        } else if arg.starts_with('-') {
24✔
96
            // spit arg into characters
97
            for c in arg.chars().skip(1) {
16✔
98
                match c {
16✔
99
                    'q' => {
100
                        if quiet {
4✔
101
                            silent = true
2✔
102
                        } else {
103
                            quiet = true
2✔
104
                        }
105
                    }
106
                    'h' => mode = Mode::Help,
×
107
                    's' => silent = true,
×
108
                    'j' => json = Some(json_latest_v),
2✔
109
                    'v' => version_n_continue = true,
2✔
110
                    '!' => shebang = true,
×
111
                    'Q' => mode = Mode::Query,
8✔
NEW
112
                    'C' => chdir = args_iter.next(),
×
UNCOV
113
                    _ => panic!("unknown argument: -{}", c),
×
114
                }
115
            }
116
        } else {
12✔
117
            find_program = !arg.contains('/');
12✔
118
            collecting_args = true;
12✔
119
            args.push(arg);
12✔
120
        }
12✔
121
    }
122

123
    Args {
44✔
124
        plus,
44✔
125
        args,
44✔
126
        find_program,
44✔
127
        mode,
44✔
128
        flags: Flags {
44✔
129
            shebang,
44✔
130
            silent,
44✔
131
            json,
44✔
132
            quiet,
44✔
133
            version_n_continue,
44✔
134
            sync,
44✔
135
            chdir,
44✔
136
        },
44✔
137
    }
44✔
138
}
44✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc