mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
added helper function that joins vectors of strings, refactored suggestions formattingi function to use it
This commit is contained in:
parent
009a55c82d
commit
3705bcc9bc
@ -85,17 +85,11 @@ size_t dev::stringDistance(string const& _str1, string const& _str2)
|
|||||||
|
|
||||||
string dev::quotedAlternativesList(vector<string> const& suggestions)
|
string dev::quotedAlternativesList(vector<string> const& suggestions)
|
||||||
{
|
{
|
||||||
if (suggestions.empty())
|
vector<string> quotedSuggestions;
|
||||||
return "";
|
|
||||||
if (suggestions.size() == 1)
|
|
||||||
return "\"" + suggestions.front() + "\"";
|
|
||||||
|
|
||||||
string choices = "\"" + suggestions.front() + "\"";
|
for (auto& suggestion: suggestions)
|
||||||
for (size_t i = 1; i + 1 < suggestions.size(); ++i)
|
quotedSuggestions.push_back("\"" + suggestion + "\"");
|
||||||
choices += ", \"" + suggestions[i] + "\"";
|
|
||||||
|
|
||||||
choices += " or \"" + suggestions.back() + "\"";
|
return joinHumanReadable(quotedSuggestions, ", ", " or ");
|
||||||
|
|
||||||
return choices;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,4 +36,43 @@ size_t stringDistance(std::string const& _str1, std::string const& _str2);
|
|||||||
// Return a string having elements of suggestions as quoted, alternative suggestions. e.g. "a", "b" or "c"
|
// Return a string having elements of suggestions as quoted, alternative suggestions. e.g. "a", "b" or "c"
|
||||||
std::string quotedAlternativesList(std::vector<std::string> const& suggestions);
|
std::string quotedAlternativesList(std::vector<std::string> const& suggestions);
|
||||||
|
|
||||||
|
/// Joins collection of strings into one string with separators between, last separator can be different.
|
||||||
|
/// @param _list collection of strings to join
|
||||||
|
/// @param _separator defaults to ", "
|
||||||
|
/// @param _lastSeparator (optional) will be used to separate last two strings instead of _separator
|
||||||
|
/// @example join(vector<string>{"a", "b", "c"}, "; ", " or ") == "a; b or c"
|
||||||
|
template<class T>
|
||||||
|
std::string joinHumanReadable
|
||||||
|
(
|
||||||
|
T const& _list,
|
||||||
|
std::string const& _separator = ", ",
|
||||||
|
std::string const& _lastSeparator = ""
|
||||||
|
)
|
||||||
|
{
|
||||||
|
auto it = begin(_list);
|
||||||
|
auto itEnd = end(_list);
|
||||||
|
|
||||||
|
std::string result;
|
||||||
|
|
||||||
|
// append first string
|
||||||
|
if (it != itEnd)
|
||||||
|
{
|
||||||
|
result += *it;
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (;it != itEnd; ++it)
|
||||||
|
{
|
||||||
|
if ((next(it) == itEnd) && !_lastSeparator.empty())
|
||||||
|
result += _lastSeparator; // last iteration
|
||||||
|
else
|
||||||
|
result += _separator;
|
||||||
|
|
||||||
|
// append string
|
||||||
|
result += *it;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -81,6 +81,24 @@ BOOST_AUTO_TEST_CASE(test_alternatives_list)
|
|||||||
BOOST_CHECK_EQUAL(quotedAlternativesList(strings), "\"a\", \"b\", \"c\" or \"d\"");
|
BOOST_CHECK_EQUAL(quotedAlternativesList(strings), "\"a\", \"b\", \"c\" or \"d\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(test_human_readable_join)
|
||||||
|
{
|
||||||
|
BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({})), "");
|
||||||
|
BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({"a"})), "a");
|
||||||
|
BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({"a", "b"})), "a, b");
|
||||||
|
BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({"a", "b", "c"})), "a, b, c");
|
||||||
|
|
||||||
|
BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({}), "; "), "");
|
||||||
|
BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({"a"}), "; "), "a");
|
||||||
|
BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({"a", "b"}), "; "), "a; b");
|
||||||
|
BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({"a", "b", "c"}), "; "), "a; b; c");
|
||||||
|
|
||||||
|
BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({}), "; ", " or "), "");
|
||||||
|
BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({"a"}), "; ", " or "), "a");
|
||||||
|
BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({"a", "b"}), "; ", " or "), "a or b");
|
||||||
|
BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({"a", "b", "c"}), "; ", " or "), "a; b or c");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user