@@ -549,48 +549,80 @@ void ArgsManager::ForceSetArg(const std::string& strArg, const std::string& strV
549
549
550
550
void ArgsManager::AddArg (const std::string& name, const std::string& help, const bool debug_only, const OptionsCategory& cat)
551
551
{
552
- std::pair<OptionsCategory, std::string> key (cat, name);
553
- assert (m_available_args.count (key) == 0 );
554
- m_available_args.emplace (key, std::pair<std::string, bool >(help, debug_only));
552
+ // Split arg name from its help param
553
+ size_t eq_index = name.find (' =' );
554
+ if (eq_index == std::string::npos) {
555
+ eq_index = name.size ();
556
+ }
557
+
558
+ std::map<std::string, Arg>& arg_map = m_available_args[cat];
559
+ auto ret = arg_map.emplace (name.substr (0 , eq_index), Arg (name.substr (eq_index, name.size () - eq_index), help, debug_only));
560
+ assert (ret.second ); // Make sure an insertion actually happened
555
561
}
556
562
557
563
std::string ArgsManager::GetHelpMessage ()
558
564
{
559
565
const bool show_debug = gArgs .GetBoolArg (" -help-debug" , false );
560
566
561
- std::string usage = HelpMessageGroup ( " Options: " ) ;
562
-
563
- OptionsCategory last_cat = OptionsCategory::OPTIONS;
564
- for ( auto & arg : m_available_args) {
565
- if (arg. first . first != last_cat) {
566
- last_cat = arg. first . first ;
567
- if (last_cat == OptionsCategory::CONNECTION)
567
+ std::string usage = " " ;
568
+ for ( const auto & arg_map : m_available_args) {
569
+ switch (arg_map. first ) {
570
+ case OptionsCategory::OPTIONS:
571
+ usage += HelpMessageGroup ( " Options: " );
572
+ break ;
573
+ case OptionsCategory::CONNECTION:
568
574
usage += HelpMessageGroup (" Connection options:" );
569
- else if (last_cat == OptionsCategory::ZMQ)
575
+ break ;
576
+ case OptionsCategory::ZMQ:
570
577
usage += HelpMessageGroup (" ZeroMQ notification options:" );
571
- else if (last_cat == OptionsCategory::DEBUG_TEST)
578
+ break ;
579
+ case OptionsCategory::DEBUG_TEST:
572
580
usage += HelpMessageGroup (" Debugging/Testing options:" );
573
- else if (last_cat == OptionsCategory::NODE_RELAY)
581
+ break ;
582
+ case OptionsCategory::NODE_RELAY:
574
583
usage += HelpMessageGroup (" Node relay options:" );
575
- else if (last_cat == OptionsCategory::BLOCK_CREATION)
584
+ break ;
585
+ case OptionsCategory::BLOCK_CREATION:
576
586
usage += HelpMessageGroup (" Block creation options:" );
577
- else if (last_cat == OptionsCategory::RPC)
587
+ break ;
588
+ case OptionsCategory::RPC:
578
589
usage += HelpMessageGroup (" RPC server options:" );
579
- else if (last_cat == OptionsCategory::WALLET)
590
+ break ;
591
+ case OptionsCategory::WALLET:
580
592
usage += HelpMessageGroup (" Wallet options:" );
581
- else if (last_cat == OptionsCategory::WALLET_DEBUG_TEST && show_debug)
582
- usage += HelpMessageGroup (" Wallet debugging/testing options:" );
583
- else if (last_cat == OptionsCategory::CHAINPARAMS)
593
+ break ;
594
+ case OptionsCategory::WALLET_DEBUG_TEST:
595
+ if (show_debug) usage += HelpMessageGroup (" Wallet debugging/testing options:" );
596
+ break ;
597
+ case OptionsCategory::CHAINPARAMS:
584
598
usage += HelpMessageGroup (" Chain selection options:" );
585
- else if (last_cat == OptionsCategory::GUI)
599
+ break ;
600
+ case OptionsCategory::GUI:
586
601
usage += HelpMessageGroup (" UI Options:" );
587
- else if (last_cat == OptionsCategory::COMMANDS)
602
+ break ;
603
+ case OptionsCategory::COMMANDS:
588
604
usage += HelpMessageGroup (" Commands:" );
589
- else if (last_cat == OptionsCategory::REGISTER_COMMANDS)
605
+ break ;
606
+ case OptionsCategory::REGISTER_COMMANDS:
590
607
usage += HelpMessageGroup (" Register Commands:" );
608
+ break ;
609
+ default :
610
+ break ;
591
611
}
592
- if (show_debug || !arg.second .second ) {
593
- usage += HelpMessageOpt (arg.first .second , arg.second .first );
612
+
613
+ // When we get to the hidden options, stop
614
+ if (arg_map.first == OptionsCategory::HIDDEN) break ;
615
+
616
+ for (const auto & arg : arg_map.second ) {
617
+ if (show_debug || !arg.second .m_debug_only ) {
618
+ std::string name;
619
+ if (arg.second .m_help_param .empty ()) {
620
+ name = arg.first ;
621
+ } else {
622
+ name = arg.first + arg.second .m_help_param ;
623
+ }
624
+ usage += HelpMessageOpt (name, arg.second .m_help_text );
625
+ }
594
626
}
595
627
}
596
628
return usage;
0 commit comments