git.delta.rocks / jrsonnet / refs/commits / 8a2b9747ed0e

difftreelog

Merge pull request #18 from CertainLach/upgrade-clap

Yaroslav Bulyukin2020-10-19parents: #712f004 #88be4ee.patch.diff
in: master
Help headings and colors

9 files changed

modifiedCargo.lockdiffbeforeafterboth
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -62,8 +62,8 @@
 
 [[package]]
 name = "clap"
-version = "3.0.0-beta.1"
-source = "git+https://github.com/clap-rs/clap?rev=3e9ee86713b5c407b50ba76f30cffaed25952063#3e9ee86713b5c407b50ba76f30cffaed25952063"
+version = "3.0.0-beta.2"
+source = "git+https://github.com/clap-rs/clap?rev=1d0b21908f93478e75b4b1a21533d86325d39386#1d0b21908f93478e75b4b1a21533d86325d39386"
 dependencies = [
  "atty",
  "bitflags",
@@ -80,8 +80,8 @@
 
 [[package]]
 name = "clap_derive"
-version = "3.0.0-beta.1"
-source = "git+https://github.com/clap-rs/clap?rev=3e9ee86713b5c407b50ba76f30cffaed25952063#3e9ee86713b5c407b50ba76f30cffaed25952063"
+version = "3.0.0-beta.2"
+source = "git+https://github.com/clap-rs/clap?rev=1d0b21908f93478e75b4b1a21533d86325d39386#1d0b21908f93478e75b4b1a21533d86325d39386"
 dependencies = [
  "heck",
  "proc-macro-error",
modifiedcmds/jrsonnet/Cargo.tomldiffbeforeafterboth
--- a/cmds/jrsonnet/Cargo.toml
+++ b/cmds/jrsonnet/Cargo.toml
@@ -23,4 +23,4 @@
 
 [dependencies.clap]
 git = "https://github.com/clap-rs/clap"
-rev = "3e9ee86713b5c407b50ba76f30cffaed25952063"
+rev = "1d0b21908f93478e75b4b1a21533d86325d39386"
modifiedcmds/jrsonnet/src/main.rsdiffbeforeafterboth
before · cmds/jrsonnet/src/main.rs
1use clap::Clap;2use jrsonnet_cli::{ConfigureState, GeneralOpts, InputOpts, ManifestOpts, OutputOpts};3use jrsonnet_evaluator::{error::LocError, EvaluationState, ManifestFormat};4use std::{5	fs::{create_dir_all, File},6	io::Write,7	path::PathBuf,8	rc::Rc,9};1011#[cfg(feature = "mimalloc")]12#[global_allocator]13static GLOBAL: mimallocator::Mimalloc = mimallocator::Mimalloc;1415#[derive(Clap)]16// #[clap(help_heading = "DEBUG")]17struct DebugOpts {18	/// Required OS stack size.19	/// This shouldn't be changed unless jrsonnet is failing with stack overflow error.20	#[clap(long, name = "size")]21	pub os_stack: Option<usize>,22}2324#[derive(Clap)]25struct Opts {26	#[clap(flatten)]27	input: InputOpts,28	#[clap(flatten)]29	general: GeneralOpts,30	#[clap(flatten)]31	manifest: ManifestOpts,32	#[clap(flatten)]33	output: OutputOpts,34	#[clap(flatten)]35	debug: DebugOpts,36}3738fn main() {39	let opts: Opts = Opts::parse();40	if let Some(size) = opts.debug.os_stack {41		std::thread::Builder::new()42			.stack_size(size * 1024 * 1024)43			.spawn(|| main_catch(opts))44			.expect("new thread spawned")45			.join()46			.expect("thread finished successfully");47	} else {48		main_catch(opts)49	}50}5152#[derive(thiserror::Error, Debug)]53enum Error {54	// Handled differently55	#[error("evaluation error")]56	Evaluation(jrsonnet_evaluator::error::LocError),57	#[error("io error")]58	Io(#[from] std::io::Error),59}60impl From<LocError> for Error {61	fn from(e: LocError) -> Self {62		Self::Evaluation(e)63	}64}6566fn main_catch(opts: Opts) {67	let state = EvaluationState::default();68	if let Err(e) = main_real(&state, opts) {69		if let Error::Evaluation(e) = e {70			println!("{}", state.stringify_err(&e));71		} else {72			println!("{}", e);73		}74	}75}7677fn main_real(state: &EvaluationState, opts: Opts) -> Result<(), Error> {78	opts.general.configure(&state)?;79	opts.manifest.configure(&state)?;8081	let val = if opts.input.exec {82		state.set_manifest_format(ManifestFormat::ToString);83		state.evaluate_snippet_raw(84			Rc::new(PathBuf::from("args")),85			(&opts.input.input as &str).into(),86		)?87	} else {88		state.evaluate_file_raw(&PathBuf::from(opts.input.input))?89	};9091	let val = state.with_tla(val)?;9293	if let Some(multi) = opts.output.multi {94		if opts.output.create_output_dirs {95			let mut dir = multi.clone();96			dir.pop();97			create_dir_all(dir)?;98		}99		for (file, data) in state.manifest_multi(val)?.iter() {100			let mut path = multi.clone();101			path.push(&file as &str);102			if opts.output.create_output_dirs {103				let mut dir = path.clone();104				dir.pop();105				create_dir_all(dir)?;106			}107			println!("{}", path.to_str().expect("path"));108			let mut file = File::create(path)?;109			writeln!(file, "{}", data)?;110		}111	} else if let Some(path) = opts.output.output_file {112		if opts.output.create_output_dirs {113			let mut dir = path.clone();114			dir.pop();115			create_dir_all(dir)?;116		}117		let mut file = File::create(path)?;118		writeln!(file, "{}", state.manifest(val)?)?;119	} else {120		println!("{}", state.manifest(val)?);121	}122123	Ok(())124}
after · cmds/jrsonnet/src/main.rs
1use clap::AppSettings;2use clap::Clap;3use jrsonnet_cli::{ConfigureState, GeneralOpts, InputOpts, ManifestOpts, OutputOpts};4use jrsonnet_evaluator::{error::LocError, EvaluationState, ManifestFormat};5use std::{6	fs::{create_dir_all, File},7	io::Write,8	path::PathBuf,9	rc::Rc,10};1112#[cfg(feature = "mimalloc")]13#[global_allocator]14static GLOBAL: mimallocator::Mimalloc = mimallocator::Mimalloc;1516#[derive(Clap)]17#[clap(help_heading = "DEBUG")]18struct DebugOpts {19	/// Required OS stack size.20	/// This shouldn't be changed unless jrsonnet is failing with stack overflow error.21	#[clap(long, name = "size")]22	pub os_stack: Option<usize>,23}2425#[derive(Clap)]26#[clap(27	global_setting = AppSettings::ColoredHelp,28	global_setting = AppSettings::DeriveDisplayOrder,29)]30struct Opts {31	#[clap(flatten)]32	input: InputOpts,33	#[clap(flatten)]34	general: GeneralOpts,35	#[clap(flatten)]36	manifest: ManifestOpts,37	#[clap(flatten)]38	output: OutputOpts,39	#[clap(flatten)]40	debug: DebugOpts,41}4243fn main() {44	let opts: Opts = Opts::parse();45	if let Some(size) = opts.debug.os_stack {46		std::thread::Builder::new()47			.stack_size(size * 1024 * 1024)48			.spawn(|| main_catch(opts))49			.expect("new thread spawned")50			.join()51			.expect("thread finished successfully");52	} else {53		main_catch(opts)54	}55}5657#[derive(thiserror::Error, Debug)]58enum Error {59	// Handled differently60	#[error("evaluation error")]61	Evaluation(jrsonnet_evaluator::error::LocError),62	#[error("io error")]63	Io(#[from] std::io::Error),64}65impl From<LocError> for Error {66	fn from(e: LocError) -> Self {67		Self::Evaluation(e)68	}69}7071fn main_catch(opts: Opts) {72	let state = EvaluationState::default();73	if let Err(e) = main_real(&state, opts) {74		if let Error::Evaluation(e) = e {75			println!("{}", state.stringify_err(&e));76		} else {77			println!("{}", e);78		}79	}80}8182fn main_real(state: &EvaluationState, opts: Opts) -> Result<(), Error> {83	opts.general.configure(&state)?;84	opts.manifest.configure(&state)?;8586	let val = if opts.input.exec {87		state.set_manifest_format(ManifestFormat::ToString);88		state.evaluate_snippet_raw(89			Rc::new(PathBuf::from("args")),90			(&opts.input.input as &str).into(),91		)?92	} else {93		state.evaluate_file_raw(&PathBuf::from(opts.input.input))?94	};9596	let val = state.with_tla(val)?;9798	if let Some(multi) = opts.output.multi {99		if opts.output.create_output_dirs {100			let mut dir = multi.clone();101			dir.pop();102			create_dir_all(dir)?;103		}104		for (file, data) in state.manifest_multi(val)?.iter() {105			let mut path = multi.clone();106			path.push(&file as &str);107			if opts.output.create_output_dirs {108				let mut dir = path.clone();109				dir.pop();110				create_dir_all(dir)?;111			}112			println!("{}", path.to_str().expect("path"));113			let mut file = File::create(path)?;114			writeln!(file, "{}", data)?;115		}116	} else if let Some(path) = opts.output.output_file {117		if opts.output.create_output_dirs {118			let mut dir = path.clone();119			dir.pop();120			create_dir_all(dir)?;121		}122		let mut file = File::create(path)?;123		writeln!(file, "{}", state.manifest(val)?)?;124	} else {125		println!("{}", state.manifest(val)?);126	}127128	Ok(())129}
modifiedcrates/jrsonnet-cli/Cargo.tomldiffbeforeafterboth
--- a/crates/jrsonnet-cli/Cargo.toml
+++ b/crates/jrsonnet-cli/Cargo.toml
@@ -13,4 +13,4 @@
 
 [dependencies.clap]
 git = "https://github.com/clap-rs/clap"
-rev = "3e9ee86713b5c407b50ba76f30cffaed25952063"
+rev = "1d0b21908f93478e75b4b1a21533d86325d39386"
modifiedcrates/jrsonnet-cli/src/ext.rsdiffbeforeafterboth
--- a/crates/jrsonnet-cli/src/ext.rs
+++ b/crates/jrsonnet-cli/src/ext.rs
@@ -54,7 +54,7 @@
 }
 
 #[derive(Clap)]
-// #[clap(help_heading = "EXTERNAL VARIABLES")]
+#[clap(help_heading = "EXTERNAL VARIABLES")]
 pub struct ExtVarOpts {
 	/// Add string external variable.
 	/// External variables are globally available so it is preferred
modifiedcrates/jrsonnet-cli/src/lib.rsdiffbeforeafterboth
--- a/crates/jrsonnet-cli/src/lib.rs
+++ b/crates/jrsonnet-cli/src/lib.rs
@@ -17,7 +17,7 @@
 }
 
 #[derive(Clap)]
-// #[clap(help_heading = "INPUT")]
+#[clap(help_heading = "INPUT")]
 pub struct InputOpts {
 	#[clap(
 		long,
@@ -33,7 +33,7 @@
 }
 
 #[derive(Clap)]
-// #[clap(help_heading = "OPTIONS")]
+#[clap(help_heading = "OPTIONS")]
 pub struct MiscOpts {
 	/// Disable standard library.
 	/// By default standard library will be available via global `std` variable.
modifiedcrates/jrsonnet-cli/src/manifest.rsdiffbeforeafterboth
--- a/crates/jrsonnet-cli/src/manifest.rs
+++ b/crates/jrsonnet-cli/src/manifest.rs
@@ -23,8 +23,7 @@
 }
 
 #[derive(Clap)]
-// TODO: Restore arg group after issue fixed in clap
-// #[clap(group = clap::ArgGroup::new("output_format"), help_heading = "MANIFESTIFICATION OUTPUT")]
+#[clap(group = clap::ArgGroup::new("output_format"), help_heading = "MANIFESTIFICATION OUTPUT")]
 pub struct ManifestOpts {
 	/// Output format, wraps resulting value to corresponding std.manifest call.
 	/// If set to `string` then plain string value is expected to be returned,
@@ -33,7 +32,7 @@
 	format: ManifestFormatName,
 	/// Expect plain string as output.
 	/// Shortcut for `--format=string` thus this option is mutually exclusive with `format` option.
-	#[clap(long, short = 'S'/*, group = "output_format"*/)]
+	#[clap(long, short = 'S', group = "output_format")]
 	string: bool,
 	/// Write output as YAML stream, can be used with --format json/yaml
 	#[clap(long, short = 'y')]
modifiedcrates/jrsonnet-cli/src/tla.rsdiffbeforeafterboth
--- a/crates/jrsonnet-cli/src/tla.rs
+++ b/crates/jrsonnet-cli/src/tla.rs
@@ -3,7 +3,7 @@
 use jrsonnet_evaluator::{error::Result, EvaluationState};
 
 #[derive(Clap)]
-// #[clap(help_heading = "TOP LEVEL ARGUMENTS")]
+#[clap(help_heading = "TOP LEVEL ARGUMENTS")]
 pub struct TLAOpts {
 	/// Add top level string argument.
 	/// Top level arguments will be passed to function before manifestification stage.
modifiedcrates/jrsonnet-cli/src/trace.rsdiffbeforeafterboth
--- a/crates/jrsonnet-cli/src/trace.rs
+++ b/crates/jrsonnet-cli/src/trace.rs
@@ -25,7 +25,7 @@
 }
 
 #[derive(Clap)]
-// #[clap(help_heading = "STACK TRACE VISUAL")]
+#[clap(help_heading = "STACK TRACE VISUAL")]
 pub struct TraceOpts {
 	/// Format of stack traces' display in console.
 	/// `compact` format only shows `filename:line:column`s