From 874f0b96a6c12658bc532c74306fb3391c64289a Mon Sep 17 00:00:00 2001 From: Andrew Gallant Date: Tue, 6 Feb 2018 18:26:23 -0500 Subject: [PATCH] argv: support hidden flags This commit adds support for hidden flags. The purpose of hidden flags is for things that end users likely won't need unless they have a configuration file that disables ripgrep's defaults. These flags will provide a way to re-enable ripgrep's defaults. --- build.rs | 3 +++ src/app.rs | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/build.rs b/build.rs index 93c258589..9fc3ba5ee 100644 --- a/build.rs +++ b/build.rs @@ -99,6 +99,9 @@ fn formatted_options() -> io::Result { let mut formatted = vec![]; for arg in args { + if arg.hidden { + continue; + } // ripgrep only has two positional arguments, and probably will only // ever have two positional arguments, so we just hardcode them into // the template. diff --git a/src/app.rs b/src/app.rs index c05fd01bc..54787b8ac 100644 --- a/src/app.rs +++ b/src/app.rs @@ -135,6 +135,18 @@ pub struct RGArg { /// /// This is shown in the `--help` output. pub doc_long: &'static str, + /// Whether this flag is hidden or not. + /// + /// This is typically used for uncommon flags that only serve to override + /// other flags. For example, --no-ignore is a prominent flag that disables + /// ripgrep's gitignore functionality, but --ignore re-enables it. Since + /// gitignore support is enabled by default, use of the --ignore flag is + /// somewhat niche and relegated to special cases when users make use of + /// configuration files to set defaults. + /// + /// Generally, these flags should be documented in the documentation for + /// the flag they override. + pub hidden: bool, /// The type of this argument. pub kind: RGArgKind, } @@ -238,6 +250,7 @@ impl RGArg { name: name, doc_short: "", doc_long: "", + hidden: false, kind: RGArgKind::Positional { value_name: value_name, multiple: false, @@ -261,6 +274,7 @@ impl RGArg { name: long_name, doc_short: "", doc_long: "", + hidden: false, kind: RGArgKind::Switch { long: long_name, short: None, @@ -290,6 +304,7 @@ impl RGArg { name: long_name, doc_short: "", doc_long: "", + hidden: false, kind: RGArgKind::Flag { long: long_name, short: None, @@ -367,6 +382,13 @@ impl RGArg { self } + /// Hide this flag from all documentation. + fn hidden(mut self) -> RGArg { + self.hidden = true; + self.claparg = self.claparg.hidden(true); + self + } + /// Set the possible values for this argument. If this argument is not /// a flag, then this panics. ///