//===- TextDiagnosticBuffer.h - Buffer Text Diagnostics ---------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This is a concrete diagnostic client, which buffers the diagnostic messages. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_FRONTEND_TEXTDIAGNOSTICBUFFER_H #define LLVM_CLANG_FRONTEND_TEXTDIAGNOSTICBUFFER_H #include "clang/Basic/Diagnostic.h" #include "clang/Basic/SourceLocation.h" #include #include #include #include namespace clang { class TextDiagnosticBuffer : public DiagnosticConsumer { public: using DiagList = std::vector>; using iterator = DiagList::iterator; using const_iterator = DiagList::const_iterator; private: DiagList Errors, Warnings, Remarks, Notes; /// All - All diagnostics in the order in which they were generated. That /// order likely doesn't correspond to user input order, but it at least /// keeps notes in the right places. Each pair in the vector is a diagnostic /// level and an index into the corresponding DiagList above. std::vector> All; public: const_iterator err_begin() const { return Errors.begin(); } const_iterator err_end() const { return Errors.end(); } const_iterator warn_begin() const { return Warnings.begin(); } const_iterator warn_end() const { return Warnings.end(); } const_iterator remark_begin() const { return Remarks.begin(); } const_iterator remark_end() const { return Remarks.end(); } const_iterator note_begin() const { return Notes.begin(); } const_iterator note_end() const { return Notes.end(); } void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info) override; /// FlushDiagnostics - Flush the buffered diagnostics to an given /// diagnostic engine. void FlushDiagnostics(DiagnosticsEngine &Diags) const; }; } // namespace clang #endif // LLVM_CLANG_FRONTEND_TEXTDIAGNOSTICBUFFER_H