-
Notifications
You must be signed in to change notification settings - Fork 1
/
build.rs
56 lines (48 loc) · 1.45 KB
/
build.rs
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
#[path = "src/cli.rs"]
mod cli;
use clap::CommandFactory;
use clap_complete::Shell;
use cli::Cli;
use std::ffi::OsStr;
use std::{env, path::PathBuf};
fn main() {
if env::var("PROFILE") != Ok("release".to_string()) {
// only generate completions on release builds
return;
}
let target_dir = match env::var_os("CARGO_MANIFEST_DIR") {
// if no CARGO_MANIFEST_DIR, don't completions
None => return,
Some(outdir) => PathBuf::from(outdir).join("completions"),
};
if !target_dir.exists() {
std::fs::create_dir_all(&target_dir).expect("should find or create completions directory");
}
generate_completions(target_dir.as_os_str());
}
fn generate_completions(target_dir: &OsStr) {
let bin_name = env!("CARGO_PKG_NAME");
let mut cmd = Cli::command();
for shell in &[
Shell::Bash,
Shell::Elvish,
Shell::Fish,
Shell::PowerShell,
Shell::Zsh,
] {
if let Err(err) = clap_complete::generate_to(*shell, &mut cmd, bin_name, target_dir) {
panic!(
"failed to generate completions for {:?} in {:?}: {:?}",
shell, target_dir, err
);
}
}
if let Err(err) =
clap_complete::generate_to(clap_complete_fig::Fig, &mut cmd, bin_name, target_dir)
{
panic!(
"failed to generate completions for fig in {:?}: {:?}",
target_dir, err
);
}
}