1 //===--- LogDiagnosticPrinter.h - Log Diagnostic Client ---------*- C++ -*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #ifndef LLVM_CLANG_FRONTEND_LOGDIAGNOSTICPRINTER_H
10 #define LLVM_CLANG_FRONTEND_LOGDIAGNOSTICPRINTER_H
12 #include "clang/Basic/Diagnostic.h"
13 #include "clang/Basic/SourceLocation.h"
14 #include "llvm/ADT/SmallVector.h"
15 #include "llvm/ADT/StringRef.h"
18 class DiagnosticOptions;
21 class LogDiagnosticPrinter : public DiagnosticConsumer {
23 /// The primary message line of the diagnostic.
26 /// The source file name, if available.
29 /// The source file line number, if available.
32 /// The source file column number, if available.
35 /// The ID of the diagnostic.
36 unsigned DiagnosticID;
38 /// The Option Flag for the diagnostic
39 std::string WarningOption;
41 /// The level of the diagnostic.
42 DiagnosticsEngine::Level DiagnosticLevel;
45 void EmitDiagEntry(llvm::raw_ostream &OS,
46 const LogDiagnosticPrinter::DiagEntry &DE);
48 // Conditional ownership (when StreamOwner is non-null, it's keeping OS
49 // alive). We might want to replace this with a wrapper for conditional
50 // ownership eventually - it seems to pop up often enough.
52 std::unique_ptr<raw_ostream> StreamOwner;
53 const LangOptions *LangOpts;
54 IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts;
56 SourceLocation LastWarningLoc;
57 FullSourceLoc LastLoc;
59 SmallVector<DiagEntry, 8> Entries;
61 std::string MainFilename;
62 std::string DwarfDebugFlags;
65 LogDiagnosticPrinter(raw_ostream &OS, DiagnosticOptions *Diags,
66 std::unique_ptr<raw_ostream> StreamOwner);
68 void setDwarfDebugFlags(StringRef Value) {
69 DwarfDebugFlags = Value;
72 void BeginSourceFile(const LangOptions &LO, const Preprocessor *PP) override {
76 void EndSourceFile() override;
78 void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel,
79 const Diagnostic &Info) override;
82 } // end namespace clang