clap 3.2.23(structopt风格)如何隐藏show子命令组的帮助文本?
在clap 3.2.23中隐藏子命令组的帮助文本
问题场景
我编写了如下Rust代码:
#[derive(Subcommand)] pub enum MyTool { Clean(CleanPackage), Compile(CompilePackage), #[clap(subcommand)] Coverage(coverage::CoveragePackage), #[clap(subcommand)] Show(show::ShowTool), Test(TestPackage), View(ViewFunction), }
希望show下的子命令组不在帮助文本中显示,尝试了#[clap(subcommand, hidden)]和#[clap(subcommand, hide)]写法均无效,请问在clap 3.2.23中用structopt风格的参数解析器能否实现该需求?
解决方案
可以实现,但需要将隐藏属性添加到子命令本身的定义上,而非父命令的变体引用处。
具体操作:找到show::ShowTool的定义位置,在该枚举的#[derive(Subcommand)]下方添加#[clap(hidden = true)]属性:
// show模块中的ShowTool定义 #[derive(Subcommand)] #[clap(hidden = true)] pub enum ShowTool { // 你的子命令变体 ExampleSubCmd, AnotherSubCmd, }
原写法无效的原因是:hidden属性作用于父命令的Show变体时,仅会隐藏父命令帮助文本中Show这个顶级命令项,但不会隐藏其下的子命令组。只有将hidden = true添加到子命令枚举本身,才能让该子命令组的所有内容从帮助文本中消失。
内容的提问来源于stack exchange,提问作者Daniel Porteous
相关产品推荐
相关产品推荐

