TextDiagnosticBuffer.h revision 341825
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 24namespace clang { 25 26class TextDiagnosticBuffer : public DiagnosticConsumer { 27public: 28 using DiagList = std::vector<std::pair<SourceLocation, std::string>>; 29 using iterator = DiagList::iterator; 30 using const_iterator = DiagList::const_iterator; 31 32private: 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 41public: 42 const_iterator err_begin() const { return Errors.begin(); } 43 const_iterator err_end() const { return Errors.end(); } 44 45 const_iterator warn_begin() const { return Warnings.begin(); } 46 const_iterator warn_end() const { return Warnings.end(); } 47 48 const_iterator remark_begin() const { return Remarks.begin(); } 49 const_iterator remark_end() const { return Remarks.end(); } 50 51 const_iterator note_begin() const { return Notes.begin(); } 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