Skip to content

Commit dc11f13

Browse files
authored
Merge pull request #178 from kkarbowiak/refactor2
Refactor code
2 parents a7aaf29 + 29d4b6b commit dc11f13

1 file changed

Lines changed: 23 additions & 21 deletions

File tree

include/argparse.hpp

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -844,11 +844,11 @@ namespace argparse
844844
{
845845
if (impl.has_nargs_number())
846846
{
847-
parse_arguments_number(impl, value, name_for_error, tokens);
847+
value = parse_arguments_number(impl, name_for_error, tokens);
848848
}
849849
else
850850
{
851-
parse_arguments_option(impl, value, name_for_error, tokens);
851+
value = parse_arguments_option(impl, name_for_error, tokens);
852852
}
853853
}
854854
else
@@ -878,51 +878,50 @@ namespace argparse
878878
}
879879

880880
private:
881-
auto parse_arguments_number(ArgumentImpl const & impl, std::any & value, std::function<std::string()> name_for_error, std::ranges::view auto tokens) const -> void
881+
auto parse_arguments_number(ArgumentImpl const & impl, std::function<std::string()> name_for_error, std::ranges::view auto tokens) const -> std::any
882882
{
883883
auto const nargs_number = impl.get_nargs_number();
884884
auto const values = impl.consume_tokens(tokens | std::views::take(nargs_number), name_for_error);
885885
if (values.size() < nargs_number)
886886
{
887887
throw parsing_error(std::format("argument {}: expected {} argument{}", impl.get_joined_names(), std::to_string(nargs_number), nargs_number > 1 ? "s" : ""));
888888
}
889-
value = impl.get_transformed(values);
889+
return impl.get_transformed(values);
890890
}
891891

892-
auto parse_arguments_option(ArgumentImpl const & impl, std::any & value, std::function<std::string()> name_for_error, std::ranges::view auto tokens) const -> void
892+
auto parse_arguments_option(ArgumentImpl const & impl, std::function<std::string()> name_for_error, std::ranges::view auto tokens) const -> std::any
893893
{
894894
switch (impl.get_nargs_option())
895895
{
896896
case zero_or_one:
897897
{
898898
if (!tokens.empty())
899899
{
900-
value = impl.consume_token(tokens.front(), name_for_error);
900+
return impl.consume_token(tokens.front(), name_for_error);
901901
}
902902
else
903903
{
904-
value = impl.get_const();
904+
return impl.get_const();
905905
}
906-
break;
907906
}
908907
case zero_or_more:
909908
{
910-
value = impl.parse_arguments(tokens, name_for_error);
911-
break;
909+
return impl.parse_arguments(tokens, name_for_error);
912910
}
913911
case one_or_more:
914912
{
915913
if (auto const values = impl.consume_tokens(tokens, name_for_error); !values.empty())
916914
{
917-
value = impl.get_transformed(values);
915+
return impl.get_transformed(values);
918916
}
919917
else
920918
{
921919
throw parsing_error(std::format("argument {}: expected at least one argument", impl.get_joined_names()));
922920
}
923-
break;
924921
}
925922
}
923+
924+
std::unreachable();
926925
}
927926
};
928927

@@ -1109,36 +1108,39 @@ namespace argparse
11091108
class PositionalArgument final : public Argument, public Formattable
11101109
{
11111110
private:
1112-
auto parse_arguments_option(std::ranges::view auto tokens) -> void
1111+
auto parse_arguments_option(std::ranges::view auto tokens) -> std::any
11131112
{
11141113
switch (get_nargs_option())
11151114
{
11161115
case zero_or_one:
11171116
{
11181117
if (!tokens.empty())
11191118
{
1120-
m_value = m_impl.consume_token(tokens.front(), get_name_for_error());
1119+
return m_impl.consume_token(tokens.front(), get_name_for_error());
11211120
}
11221121
else
11231122
{
1124-
m_value = m_impl.get_default();
1123+
return m_impl.get_default();
11251124
}
1126-
break;
11271125
}
11281126
case zero_or_more:
11291127
{
1130-
m_value = m_impl.parse_arguments(tokens, get_name_for_error());
1131-
break;
1128+
return m_impl.parse_arguments(tokens, get_name_for_error());
11321129
}
11331130
case one_or_more:
11341131
{
11351132
if (auto const values = m_impl.consume_tokens(tokens, get_name_for_error()); !values.empty())
11361133
{
1137-
m_value = m_impl.get_transformed(values);
1134+
return m_impl.get_transformed(values);
1135+
}
1136+
else
1137+
{
1138+
return std::any();
11381139
}
1139-
break;
11401140
}
11411141
}
1142+
1143+
std::unreachable();
11421144
}
11431145

11441146
auto get_name_for_error() const -> std::function<std::string()>
@@ -1202,7 +1204,7 @@ namespace argparse
12021204
}
12031205
else
12041206
{
1205-
parse_arguments_option(consumable);
1207+
m_value = parse_arguments_option(consumable);
12061208
}
12071209
}
12081210
else

0 commit comments

Comments
 (0)