1 //===- TextDiagnosticBuffer.h - Buffer Text Diagnostics ---------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This is a concrete diagnostic client, which buffers the diagnostic messages. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef LLVM_CLANG_FRONTEND_TEXTDIAGNOSTICBUFFER_H 15 #define LLVM_CLANG_FRONTEND_TEXTDIAGNOSTICBUFFER_H 16 17 #include "clang/Basic/Diagnostic.h" 18 #include "clang/Basic/SourceLocation.h" 19 #include <cstddef> 20 #include <string> 21 #include <utility> 22 #include <vector> 23 24 namespace clang { 25 26 class TextDiagnosticBuffer : public DiagnosticConsumer { 27 public: 28 using DiagList = std::vector<std::pair<SourceLocation, std::string>>; 29 using iterator = DiagList::iterator; 30 using const_iterator = DiagList::const_iterator; 31 32 private: 33 DiagList Errors, Warnings, Remarks, Notes; 34 35 /// All - All diagnostics in the order in which they were generated. That 36 /// order likely doesn't correspond to user input order, but it at least 37 /// keeps notes in the right places. Each pair in the vector is a diagnostic 38 /// level and an index into the corresponding DiagList above. 39 std::vector<std::pair<DiagnosticsEngine::Level, size_t>> All; 40 41 public: err_begin()42 const_iterator err_begin() const { return Errors.begin(); } err_end()43 const_iterator err_end() const { return Errors.end(); } 44 warn_begin()45 const_iterator warn_begin() const { return Warnings.begin(); } warn_end()46 const_iterator warn_end() const { return Warnings.end(); } 47 remark_begin()48 const_iterator remark_begin() const { return Remarks.begin(); } remark_end()49 const_iterator remark_end() const { return Remarks.end(); } 50 note_begin()51 const_iterator note_begin() const { return Notes.begin(); } note_end()52 const_iterator note_end() const { return Notes.end(); } 53 54 void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, 55 const Diagnostic &Info) override; 56 57 /// FlushDiagnostics - Flush the buffered diagnostics to an given 58 /// diagnostic engine. 59 void FlushDiagnostics(DiagnosticsEngine &Diags) const; 60 }; 61 62 } // namespace clang 63 64 #endif // LLVM_CLANG_FRONTEND_TEXTDIAGNOSTICBUFFER_H 65