From 7be174052128a8ce2900b64168afd3ae751a75dc Mon Sep 17 00:00:00 2001 From: Philip Top Date: Sat, 27 Jul 2024 08:05:56 -0700 Subject: [PATCH] Extra subcommand print (#1058) Fixes issue #1045 --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- azure-pipelines.yml | 11 +++++++---- include/CLI/impl/Formatter_inl.hpp | 6 +++--- tests/HelpTest.cpp | 29 +++++++++++++++++++++++++++++ 4 files changed, 40 insertions(+), 8 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index be0dec5b..b04bc8d3 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -26,7 +26,7 @@ repos: - id: debug-statements - repo: https://github.com/pre-commit/mirrors-clang-format - rev: v18.1.6 + rev: v18.1.8 hooks: - id: clang-format types_or: [c++, c, cuda] diff --git a/azure-pipelines.yml b/azure-pipelines.yml index c2cbb7a5..98bdc336 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -49,14 +49,17 @@ jobs: Linux14PC: vmImage: "ubuntu-latest" cli11.precompile: ON + macOS20: + vmImage: "macOS-14" + cli11.std: 20 macOS17: - vmImage: "macOS-12" + vmImage: "macOS-13" cli11.std: 17 macOS11: - vmImage: "macOS-11" + vmImage: "macOS-12" cli11.std: 11 - macOS11PC: - vmImage: "macOS-11" + macOS12PC: + vmImage: "macOS-12" cli11.std: 11 cli11.precompile: ON Windows17: diff --git a/include/CLI/impl/Formatter_inl.hpp b/include/CLI/impl/Formatter_inl.hpp index 2faba9e1..a5b8d043 100644 --- a/include/CLI/impl/Formatter_inl.hpp +++ b/include/CLI/impl/Formatter_inl.hpp @@ -180,10 +180,10 @@ CLI11_INLINE std::string Formatter::make_subcommands(const App *app, AppFormatMo std::vector subcmd_groups_seen; for(const App *com : subcommands) { if(com->get_name().empty()) { - if(com->get_group().empty() || com->get_group().front() == '+') { - continue; + if(!com->get_group().empty() && com->get_group().front() != '+') { + out << make_expanded(com); } - out << make_expanded(com); + continue; } std::string group_key = com->get_group(); if(!group_key.empty() && diff --git a/tests/HelpTest.cpp b/tests/HelpTest.cpp index 1b844c2f..50b4cd42 100644 --- a/tests/HelpTest.cpp +++ b/tests/HelpTest.cpp @@ -273,6 +273,35 @@ TEST_CASE("THelp: HiddenGroup", "[help]") { CHECK_THAT(help, Contains("another")); } +// from https://github.com/CLIUtils/CLI11/issues/1045 +TEST_CASE("THelp: multiple_group", "[help]") { + CLI::App app{"test_group"}; + auto *group1 = app.add_option_group("outGroup"); + auto *group2 = app.add_option_group("inGroup"); + + std::string outFile(""); + group1->add_option("--outfile,-o", outFile, "specify the file location of the output")->required(); + + std::string inFile(""); + group2->add_option("--infile,-i", inFile, "specify the file location of the input")->required(); + + auto help = app.help(); + int inCount = 0; + int outCount = 0; + auto iFind = help.find("inGroup"); + while(iFind != std::string::npos) { + ++inCount; + iFind = help.find("inGroup", iFind + 6); + } + auto oFind = help.find("outGroup"); + while(oFind != std::string::npos) { + ++outCount; + oFind = help.find("outGroup", oFind + 6); + } + CHECK(inCount == 1); + CHECK(outCount == 1); +} + TEST_CASE("THelp: OptionalPositionalAndOptions", "[help]") { CLI::App app{"My prog", "AnotherProgram"}; app.add_flag("-q,--quick");