aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorregnat <rg@regnat.ovh>2022-03-07 10:04:57 +0100
committerregnat <rg@regnat.ovh>2022-03-07 10:09:10 +0100
commit313bbc07a8ae9d72c5f728fde490f3cddcc5087b (patch)
treec3bcd2a1c1ce785c815a0c30cc266f41cdbde66b /src
parentfd45d85b4149a4d153d9c60f7f77244b3cf29ae3 (diff)
Implement `operator<<` for Suggestions
That way there’s no need to explicitely convert it to a string when printing it
Diffstat (limited to 'src')
-rw-r--r--src/libutil/error.cc2
-rw-r--r--src/libutil/suggestions.cc20
-rw-r--r--src/libutil/suggestions.hh7
3 files changed, 21 insertions, 8 deletions
diff --git a/src/libutil/error.cc b/src/libutil/error.cc
index 15ae7a759..b2dfb35b2 100644
--- a/src/libutil/error.cc
+++ b/src/libutil/error.cc
@@ -285,7 +285,7 @@ std::ostream & showErrorInfo(std::ostream & out, const ErrorInfo & einfo, bool s
auto suggestions = einfo.suggestions.trim();
if (! suggestions.suggestions.empty()){
oss << "Did you mean " <<
- suggestions.trim().pretty_print() <<
+ suggestions.trim() <<
"?" << std::endl;
}
diff --git a/src/libutil/suggestions.cc b/src/libutil/suggestions.cc
index bcd93aa6b..9510a5f0c 100644
--- a/src/libutil/suggestions.cc
+++ b/src/libutil/suggestions.cc
@@ -65,27 +65,27 @@ Suggestions Suggestions::trim(int limit, int maxDistance) const
return Suggestions{res};
}
-std::string Suggestion::pretty_print() const
+std::string Suggestion::to_string() const
{
return ANSI_WARNING + filterANSIEscapes(suggestion) + ANSI_NORMAL;
}
-std::string Suggestions::pretty_print() const
+std::string Suggestions::to_string() const
{
switch (suggestions.size()) {
case 0:
return "";
case 1:
- return suggestions.begin()->pretty_print();
+ return suggestions.begin()->to_string();
default: {
std::string res = "one of ";
auto iter = suggestions.begin();
- res += iter->pretty_print(); // Iter can’t be end() because the container isn’t null
+ res += iter->to_string(); // Iter can’t be end() because the container isn’t null
iter++;
auto last = suggestions.end(); last--;
for ( ; iter != suggestions.end() ; iter++) {
res += (iter == last) ? " or " : ", ";
- res += iter->pretty_print();
+ res += iter->to_string();
}
return res;
}
@@ -101,4 +101,14 @@ Suggestions & Suggestions::operator+=(const Suggestions & other)
return *this;
}
+std::ostream & operator<<(std::ostream & str, const Suggestion & suggestion)
+{
+ return str << suggestion.to_string();
+}
+
+std::ostream & operator<<(std::ostream & str, const Suggestions & suggestions)
+{
+ return str << suggestions.to_string();
+}
+
}
diff --git a/src/libutil/suggestions.hh b/src/libutil/suggestions.hh
index 705b4cd1c..d8f36cb24 100644
--- a/src/libutil/suggestions.hh
+++ b/src/libutil/suggestions.hh
@@ -16,7 +16,7 @@ public:
int distance; // The smaller the better
std::string suggestion;
- std::string pretty_print() const;
+ std::string to_string() const;
GENERATE_CMP(Suggestion, me->distance, me->suggestion)
};
@@ -25,7 +25,7 @@ class Suggestions {
public:
std::set<Suggestion> suggestions;
- std::string pretty_print() const;
+ std::string to_string() const;
Suggestions trim(
int limit = 5,
@@ -39,4 +39,7 @@ public:
Suggestions& operator+=(const Suggestions & other);
};
+
+std::ostream & operator<<(std::ostream & str, const Suggestion &);
+std::ostream & operator<<(std::ostream & str, const Suggestions &);
}