blob: f1a426e9a5bc8fe852aa6a43a4f8594b22bef748 [file] [log] [blame] [edit]
#include "parse_text_proto.h"
#include <cstddef>
#include <cstdio>
#include <fstream>
#include <string>
#include <vector>
#include "absl/log/log.h"
#include "absl/strings/str_format.h"
#include "absl/strings/str_split.h"
#include "absl/strings/string_view.h"
#include "google/protobuf/io/tokenizer.h"
namespace safepower_agent {
namespace internal {
std::string ErrorCollectorString::ExtractLine(int line) const {
std::vector<absl::string_view> lines = absl::StrSplit(text_proto_, '\n');
return (static_cast<std::size_t>(line) < lines.size())
? std::string(lines[line])
: "";
}
std::string ErrorCollectorFile::ExtractLine(int line) const {
std::ifstream file(path_);
std::string line_string;
for (int i = 0; i <= line; ++i) {
if (!file.good()) {
return "";
}
std::getline(file, line_string);
LOG(INFO) << "line: " << line_string;
}
return line_string;
}
void ErrorCollector::RecordError(int line, google::protobuf::io::ColumnNumber column,
absl::string_view message) {
absl::StrAppendFormat(&message_, "%s [line %d, column %d]\n%s", message,
line + 1, column + 1, ExtractLine(line));
}
void ErrorCollector::RecordWarning(int line, google::protobuf::io::ColumnNumber column,
absl::string_view message) {
LOG(WARNING) << message << " [line " << line + 1 << ", column " << column + 1
<< "]\n"
<< ExtractLine(line);
}
} // namespace internal
} // namespace safepower_agent