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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
use nu_engine::WholeStreamCommand;
use nu_protocol::{Signature, SyntaxShape};

pub struct Command;

impl WholeStreamCommand for Command {
    fn name(&self) -> &str {
        "nu"
    }

    fn signature(&self) -> Signature {
        Signature::build("nu")
            .switch("version", "Display Nu version", Some('v'))
            .switch("stdin", "redirect stdin", None)
            .switch("skip-plugins", "do not load plugins", None)
            .switch("no-history", "don't save history", None)
            .switch("perf", "show startup performance metrics", None)
            .switch("login", "start Nu as if it was a login shell", Some('l'))
            .named(
                "commands",
                SyntaxShape::String,
                "commands to run",
                Some('c'),
            )
            .named(
                "testbin",
                SyntaxShape::String,
                "test bin: echo_env, cococo, iecho, fail, nonu, chop, repeater, meow",
                None,
            )
            .named("develop", SyntaxShape::String, "trace mode", None)
            .named("debug", SyntaxShape::String, "debug mode", None)
            .named(
                "loglevel",
                SyntaxShape::String,
                "LEVEL: error, warn, info, debug, trace",
                None,
            )
            .named(
                "config-file",
                SyntaxShape::FilePath,
                "custom configuration source file",
                None,
            )
            .rest("rest", SyntaxShape::String, "source file(s) to run")
    }

    fn usage(&self) -> &str {
        "Nu - A new type of shell."
    }
}

pub fn version() -> &'static str {
    env!("CARGO_PKG_VERSION")
}

pub fn testbins() -> Vec<String> {
    vec![
        "echo_env", "cococo", "iecho", "fail", "nonu", "chop", "repeater", "meow",
    ]
    .into_iter()
    .map(String::from)
    .collect()
}

pub fn loglevels() -> Vec<String> {
    vec!["error", "warn", "info", "debug", "trace"]
        .into_iter()
        .map(String::from)
        .collect()
}