1341825Sdim//===- TextDiagnosticBuffer.h - Buffer Text Diagnostics ---------*- C++ -*-===// 2193326Sed// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6193326Sed// 7193326Sed//===----------------------------------------------------------------------===// 8193326Sed// 9193326Sed// This is a concrete diagnostic client, which buffers the diagnostic messages. 10193326Sed// 11193326Sed//===----------------------------------------------------------------------===// 12193326Sed 13280031Sdim#ifndef LLVM_CLANG_FRONTEND_TEXTDIAGNOSTICBUFFER_H 14280031Sdim#define LLVM_CLANG_FRONTEND_TEXTDIAGNOSTICBUFFER_H 15193326Sed 16193326Sed#include "clang/Basic/Diagnostic.h" 17341825Sdim#include "clang/Basic/SourceLocation.h" 18341825Sdim#include <cstddef> 19341825Sdim#include <string> 20341825Sdim#include <utility> 21193326Sed#include <vector> 22193326Sed 23193326Sednamespace clang { 24193326Sed 25226633Sdimclass TextDiagnosticBuffer : public DiagnosticConsumer { 26193326Sedpublic: 27341825Sdim using DiagList = std::vector<std::pair<SourceLocation, std::string>>; 28341825Sdim using iterator = DiagList::iterator; 29341825Sdim using const_iterator = DiagList::const_iterator; 30341825Sdim 31193326Sedprivate: 32276479Sdim DiagList Errors, Warnings, Remarks, Notes; 33341825Sdim 34327952Sdim /// All - All diagnostics in the order in which they were generated. That 35327952Sdim /// order likely doesn't correspond to user input order, but it at least 36327952Sdim /// keeps notes in the right places. Each pair in the vector is a diagnostic 37327952Sdim /// level and an index into the corresponding DiagList above. 38327952Sdim std::vector<std::pair<DiagnosticsEngine::Level, size_t>> All; 39341825Sdim 40193326Sedpublic: 41341825Sdim const_iterator err_begin() const { return Errors.begin(); } 42341825Sdim const_iterator err_end() const { return Errors.end(); } 43193326Sed 44193326Sed const_iterator warn_begin() const { return Warnings.begin(); } 45341825Sdim const_iterator warn_end() const { return Warnings.end(); } 46193326Sed 47276479Sdim const_iterator remark_begin() const { return Remarks.begin(); } 48341825Sdim const_iterator remark_end() const { return Remarks.end(); } 49276479Sdim 50193326Sed const_iterator note_begin() const { return Notes.begin(); } 51341825Sdim const_iterator note_end() const { return Notes.end(); } 52193326Sed 53276479Sdim void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, 54276479Sdim const Diagnostic &Info) override; 55199990Srdivacky 56199990Srdivacky /// FlushDiagnostics - Flush the buffered diagnostics to an given 57199990Srdivacky /// diagnostic engine. 58226633Sdim void FlushDiagnostics(DiagnosticsEngine &Diags) const; 59193326Sed}; 60193326Sed 61341825Sdim} // namespace clang 62193326Sed 63341825Sdim#endif // LLVM_CLANG_FRONTEND_TEXTDIAGNOSTICBUFFER_H 64