28#include <clang/Basic/Diagnostic.h>
31namespace acav::logfmt {
33inline std::string sanitizeField(std::string value) {
34 for (
char &ch : value) {
35 if (ch ==
'\n' || ch ==
'\r' || ch ==
'\t') {
42inline std::string toLevelString(clang::DiagnosticsEngine::Level level) {
44 case clang::DiagnosticsEngine::Warning:
46 case clang::DiagnosticsEngine::Error:
48 case clang::DiagnosticsEngine::Fatal:
50 case clang::DiagnosticsEngine::Remark:
52 case clang::DiagnosticsEngine::Note:
54 case clang::DiagnosticsEngine::Ignored:
60inline std::string formatDiagnosticLine(
const std::string &level,
61 const std::string &file,
64 const std::string &message) {
65 std::string result =
"@diag\t";
68 result += sanitizeField(file);
71 result += std::to_string(line);
75 result += std::to_string(column);
78 result += sanitizeField(message);
82inline std::string formatDiagnosticLine(clang::DiagnosticsEngine::Level level,
83 const std::string &file,
86 const std::string &message) {
87 return formatDiagnosticLine(toLevelString(level), file, line, column, message);
Utilities for interacting with Clang at runtime This includes runtime detection of Clang paths and AS...