13#include "llvm/Support/ErrorHandling.h"
14#include "llvm/Support/raw_ostream.h"
20 std::unique_ptr<raw_ostream> StreamOwner)
21 : OS(os), StreamOwner(
std::move(StreamOwner)), LangOpts(
nullptr) {}
32 llvm_unreachable(
"Invalid DiagnosticsEngine level!");
36LogDiagnosticPrinter::EmitDiagEntry(llvm::raw_ostream &OS,
37 const LogDiagnosticPrinter::DiagEntry &DE) {
39 OS <<
" <key>level</key>\n"
42 if (!DE.Filename.empty()) {
43 OS <<
" <key>filename</key>\n"
48 OS <<
" <key>line</key>\n"
53 OS <<
" <key>column</key>\n"
57 if (!DE.Message.empty()) {
58 OS <<
" <key>message</key>\n"
62 OS <<
" <key>ID</key>\n"
65 if (!DE.WarningOption.empty()) {
66 OS <<
" <key>WarningOption</key>\n"
85 llvm::raw_svector_ostream OS(Msg);
88 if (!MainFilename.empty()) {
89 OS <<
" <key>main-file</key>\n"
93 if (!DwarfDebugFlags.empty()) {
94 OS <<
" <key>dwarf-debug-flags</key>\n"
98 OS <<
" <key>diagnostics</key>\n";
100 for (
auto &DE : Entries)
101 EmitDiagEntry(OS, DE);
105 this->OS << OS.str();
119 MainFilename = std::string(FE->getName());
125 DE.DiagnosticID = Info.
getID();
126 DE.DiagnosticLevel = Level;
135 DE.Message = std::string(MessageStr);
139 DE.Line = DE.Column = 0;
149 DE.Filename = std::string(FE->getName());
159 Entries.push_back(DE);
static StringRef getLevelName(DiagnosticsEngine::Level Level)
Defines the SourceManager interface.
virtual void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info)
Handle this diagnostic, reporting it to the user or capturing it to a log as needed.
Options for controlling the compiler diagnostics engine.
A little helper class (which is basically a smart pointer that forwards info from DiagnosticsEngine a...
const SourceLocation & getLocation() const
void FormatDiagnostic(SmallVectorImpl< char > &OutStr) const
Format this diagnostic into a string, substituting the formal arguments into the %0 slots.
SourceManager & getSourceManager() const
bool hasSourceManager() const
const DiagnosticsEngine * getDiags() const
Level
The level of the diagnostic, after it has been through mapping.
const IntrusiveRefCntPtr< DiagnosticIDs > & getDiagnosticIDs() const
An opaque identifier used by SourceManager which refers to a source file (MemoryBuffer) along with it...
void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info) override
Handle this diagnostic, reporting it to the user or capturing it to a log as needed.
void EndSourceFile() override
Callback to inform the diagnostic client that processing of a source file has ended.
LogDiagnosticPrinter(raw_ostream &OS, DiagnosticOptions &DiagOpts, std::unique_ptr< raw_ostream > StreamOwner)
Represents an unpacked "presumed" location which can be presented to the user.
unsigned getColumn() const
Return the presumed column number of this location.
const char * getFilename() const
Return the presumed filename of this location.
unsigned getLine() const
Return the presumed line number of this location.
bool isInvalid() const
Return true if this object is invalid or uninitialized.
bool isValid() const
Return true if this is a valid SourceLocation object.
This class handles loading and caching of source files into memory.
raw_ostream & EmitString(raw_ostream &o, StringRef s)
raw_ostream & EmitInteger(raw_ostream &o, int64_t value)
The JSON file list parser is used to communicate input to InstallAPI.
CustomizableOptional< FileEntryRef > OptionalFileEntryRef
nullptr
This class represents a compute construct, representing a 'Kind' of ‘parallel’, 'serial',...