json json_of_message(message const & msg) { json j; j["file_name"] = msg.get_file_name(); j["pos_line"] = msg.get_pos().first; j["pos_col"] = msg.get_pos().second; if (auto end_pos = msg.get_end_pos()) { j["end_pos_line"] = end_pos->first; j["end_pos_col"] = end_pos->second; } j["severity"] = json_of_severity(msg.get_severity()); j["caption"] = msg.get_caption(); j["text"] = msg.get_text(); return j; }
void report_message(message const & msg0) { auto & l = logtree(); auto & loc = logtree().get_location(); std::shared_ptr<message> msg; if (loc.m_file_name.empty()) { msg = std::make_shared<message>(msg0); } else { auto pos_ok = loc.m_range.m_begin <= msg0.get_pos() && msg0.get_pos() <= loc.m_range.m_end; msg = std::make_shared<message>(loc.m_file_name, pos_ok ? msg0.get_pos() : loc.m_range.m_begin, pos_ok ? msg0.get_end_pos() : optional<pos_info>(), msg0.get_severity(), msg0.get_caption(), msg0.get_text()); } l.add(msg); }