@@ -101,7 +101,7 @@ struct Spec {
101101 }
102102 for (auto command : subparser.commands ) {
103103 command.name = std::define_static_string (std::string (name) + ' :' + command.name );
104- options .push_back (command);
104+ commands .push_back (command);
105105 }
106106 }
107107 return false ;
@@ -197,58 +197,5 @@ struct Spec {
197197 commands = define_static_array (parser.commands );
198198 options = define_static_array (parser.options );
199199 }
200-
201- bool parse_as_command (ArgParser& parser) const {
202- for (auto cmd : commands) {
203- if (auto unevaluated = cmd.parse (parser); unevaluated) {
204- (*unevaluated)(nullptr );
205- return true ;
206- }
207- }
208- return false ;
209- }
210-
211- std::optional<Option::Unevaluated> parse_as_option (ArgParser& parser) const {
212- for (auto opt : options) {
213- if (auto unevaluated = opt.parse (parser); unevaluated) {
214- return unevaluated;
215- }
216- }
217-
218- return {};
219- }
220-
221- std::vector<Argument::Unevaluated> parse_arguments (ArgParser& parser) const {
222- std::vector<Argument::Unevaluated> parsed_args;
223- for (auto arg : arguments) {
224- auto argument = arg.parse (parser);
225- if (!argument) {
226- if (!arg.is_optional ) {
227- std::println (" Missing required argument {}" , arg.name );
228- std::exit (1 );
229- }
230- // failed to parse argument - bail out
231- return parsed_args;
232- }
233- parsed_args.push_back (*argument);
234- }
235- return parsed_args;
236- }
237-
238- std::vector<Option::Unevaluated> parse_options (ArgParser& parser) const {
239- std::vector<Option::Unevaluated> parsed_opts{};
240- while (parser.valid ()) {
241- if (parse_as_command (parser)) {
242- continue ;
243- }
244-
245- auto unevaluated = parse_as_option (parser);
246- if (!unevaluated) {
247- parser.fail (" Could not find option `{}`" , parser.current ());
248- }
249- parsed_opts.push_back (*unevaluated);
250- }
251- return parsed_opts;
252- }
253200};
254201} // namespace rsl::_cli_impl
0 commit comments