TextDiagnosticBuffer.h revision 341825
1135446Strhodes//===- TextDiagnosticBuffer.h - Buffer Text Diagnostics ---------*- C++ -*-===// 2170222Sdougb// 3135446Strhodes// The LLVM Compiler Infrastructure 4135446Strhodes// 5135446Strhodes// This file is distributed under the University of Illinois Open Source 6135446Strhodes// License. See LICENSE.TXT for details. 7135446Strhodes// 8135446Strhodes//===----------------------------------------------------------------------===// 9135446Strhodes// 10135446Strhodes// This is a concrete diagnostic client, which buffers the diagnostic messages. 11135446Strhodes// 12135446Strhodes//===----------------------------------------------------------------------===// 13135446Strhodes 14135446Strhodes#ifndef LLVM_CLANG_FRONTEND_TEXTDIAGNOSTICBUFFER_H 15135446Strhodes#define LLVM_CLANG_FRONTEND_TEXTDIAGNOSTICBUFFER_H 16135446Strhodes 17135446Strhodes#include "clang/Basic/Diagnostic.h" 18170222Sdougb#include "clang/Basic/SourceLocation.h" 19135446Strhodes#include <cstddef> 20170222Sdougb#include <string> 21135446Strhodes#include <utility> 22135446Strhodes#include <vector> 23135446Strhodes 24135446Strhodesnamespace clang { 25135446Strhodes 26135446Strhodesclass TextDiagnosticBuffer : public DiagnosticConsumer { 27135446Strhodespublic: 28135446Strhodes using DiagList = std::vector<std::pair<SourceLocation, std::string>>; 29135446Strhodes using iterator = DiagList::iterator; 30135446Strhodes using const_iterator = DiagList::const_iterator; 31135446Strhodes 32135446Strhodesprivate: 33135446Strhodes DiagList Errors, Warnings, Remarks, Notes; 34135446Strhodes 35135446Strhodes /// All - All diagnostics in the order in which they were generated. That 36135446Strhodes /// order likely doesn't correspond to user input order, but it at least 37135446Strhodes /// keeps notes in the right places. Each pair in the vector is a diagnostic 38135446Strhodes /// level and an index into the corresponding DiagList above. 39135446Strhodes std::vector<std::pair<DiagnosticsEngine::Level, size_t>> All; 40135446Strhodes 41135446Strhodespublic: 42135446Strhodes const_iterator err_begin() const { return Errors.begin(); } 43135446Strhodes const_iterator err_end() const { return Errors.end(); } 44135446Strhodes 45135446Strhodes const_iterator warn_begin() const { return Warnings.begin(); } 46135446Strhodes const_iterator warn_end() const { return Warnings.end(); } 47135446Strhodes 48135446Strhodes const_iterator remark_begin() const { return Remarks.begin(); } 49135446Strhodes const_iterator remark_end() const { return Remarks.end(); } 50135446Strhodes 51135446Strhodes const_iterator note_begin() const { return Notes.begin(); } 52135446Strhodes const_iterator note_end() const { return Notes.end(); } 53135446Strhodes 54135446Strhodes void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, 55135446Strhodes const Diagnostic &Info) override; 56135446Strhodes 57170222Sdougb /// FlushDiagnostics - Flush the buffered diagnostics to an given 58135446Strhodes /// diagnostic engine. 59135446Strhodes void FlushDiagnostics(DiagnosticsEngine &Diags) const; 60135446Strhodes}; 61135446Strhodes 62135446Strhodes} // namespace clang 63135446Strhodes 64135446Strhodes#endif // LLVM_CLANG_FRONTEND_TEXTDIAGNOSTICBUFFER_H 65135446Strhodes