diff options
author | regnat <rg@regnat.ovh> | 2022-03-07 10:04:57 +0100 |
---|---|---|
committer | regnat <rg@regnat.ovh> | 2022-03-07 10:09:10 +0100 |
commit | 313bbc07a8ae9d72c5f728fde490f3cddcc5087b (patch) | |
tree | c3bcd2a1c1ce785c815a0c30cc266f41cdbde66b /src | |
parent | fd45d85b4149a4d153d9c60f7f77244b3cf29ae3 (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.cc | 2 | ||||
-rw-r--r-- | src/libutil/suggestions.cc | 20 | ||||
-rw-r--r-- | src/libutil/suggestions.hh | 7 |
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 &); } |