Skip to content

Commit 32fa14b

Browse files
committed
Add shell completion generator
1 parent 42cf3b1 commit 32fa14b

File tree

3 files changed

+27
-2
lines changed

3 files changed

+27
-2
lines changed

Cargo.lock

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ edition = "2018"
1010

1111
[dependencies]
1212
clap = { version = "3.1.8", features = ["derive"] }
13+
clap_complete = "3.1.1"
1314
serde_json = "1.0"
1415
serde_yaml = "0.8"
1516
termcolor = "1.1"

src/main.rs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
use std::ffi::OsStr;
22
use std::fs::File;
3-
use std::io::{stdin, BufReader, Read, Write};
3+
use std::io::{self, stdin, BufReader, Read, Write};
44
use std::path::Path;
55

6-
use clap::{ArgEnum, Parser};
6+
use clap::{ArgEnum, CommandFactory, Parser};
7+
use clap_complete::{generate, Shell};
78
use serde_json::{Number, Value};
89
use termcolor::{BufferWriter, Color, ColorChoice, ColorSpec, WriteColor};
910

@@ -244,11 +245,24 @@ struct Args {
244245
default_value = "auto"
245246
)]
246247
color: CmdColor,
248+
249+
#[clap(long, arg_enum, help = "Generate completion for a shell")]
250+
completion: Option<Shell>,
247251
}
248252

249253
fn main() -> Result<()> {
250254
let args = Args::parse();
251255

256+
if let Some(shell) = args.completion {
257+
generate(
258+
shell,
259+
&mut Args::command(),
260+
"json-struct",
261+
&mut io::stdout(),
262+
);
263+
return Ok(());
264+
}
265+
252266
let data_type = detect_data_type(&args.file, args.data_type);
253267
let data = parse_input_data(&args.file, data_type)?;
254268
let writer = get_writer(args.color);

0 commit comments

Comments
 (0)