From f04c97b587dc4877fc2acdb7eca89cb7f5db8f51 Mon Sep 17 00:00:00 2001 From: ToruNiina Date: Sat, 1 Jun 2019 19:06:08 +0900 Subject: [PATCH] refactor: simplify format_underline a bit --- toml/region.hpp | 42 +++++++++++++++++------------------------- 1 file changed, 17 insertions(+), 25 deletions(-) diff --git a/toml/region.hpp b/toml/region.hpp index 7b4c006..2fb1eaa 100644 --- a/toml/region.hpp +++ b/toml/region.hpp @@ -383,17 +383,11 @@ struct region final : public region_base // to show a better error message. inline std::string format_underline(const std::string& message, - std::vector> reg_com, - std::vector helps = {}) + const std::vector>& reg_com, + const std::vector& helps = {}) { assert(!reg_com.empty()); -#ifdef _WIN32 - const auto newline = "\r\n"; -#else - const char newline = '\n'; -#endif - const auto line_num_width = std::max_element(reg_com.begin(), reg_com.end(), [](std::pair const& lhs, std::pair const& rhs) @@ -403,26 +397,26 @@ inline std::string format_underline(const std::string& message, )->first->line_num().size(); std::ostringstream retval; - retval << message << newline; + retval << message << '\n'; - for(std::size_t i=0; iname() == reg_com.at(i).first->name()) + // if the filenames are the same, print "..." + if(iter != reg_com.begin() && + std::prev(iter)->first->name() == iter->first->name()) { - retval << newline << " ..." << newline; + retval << "\n ...\n"; } - else + else // if filename differs, print " --> filename.toml" { - if(i != 0) {retval << newline;} - retval << " --> " << reg_com.at(i).first->name() << newline; + if(iter != reg_com.begin()) {retval << '\n';} + retval << " --> " << iter->first->name() << '\n'; } - - const region_base* const reg = reg_com.at(i).first; - const std::string& comment = reg_com.at(i).second; - + const region_base* const reg = iter->first; + const std::string& comment = iter->second; retval << ' ' << std::setw(line_num_width) << reg->line_num(); - retval << " | " << reg->line() << newline; + retval << " | " << reg->line() << '\n'; retval << make_string(line_num_width + 1, ' '); retval << " | " << make_string(reg->before(), ' '); @@ -440,20 +434,18 @@ inline std::string format_underline(const std::string& message, const auto underline_len = std::min(reg->size(), reg->line().size()); retval << make_string(underline_len, '~'); } - retval << ' '; retval << comment; } - if(helps.size() != 0) + if(!helps.empty()) { - retval << newline; + retval << '\n'; retval << make_string(line_num_width + 1, ' '); retval << " | "; for(const auto help : helps) { - retval << newline; - retval << "Hint: "; + retval << "\nHint: "; retval << help; } }