Warning: This file is not a C or C++ file. It does not have highlighting.

1//===--- TextDiagnosticPrinter.h - Text Diagnostic Client -------*- C++ -*-===//
2//
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
6//
7//===----------------------------------------------------------------------===//
8//
9// This is a concrete diagnostic client. In terminals that support it, the
10// diagnostics are pretty-printed (colors + bold). The printing/flushing
11// happens in HandleDiagnostics (usually called at the point when the
12// diagnostic is generated).
13//
14//===----------------------------------------------------------------------===//
15//
16// Coding style: https://mlir.llvm.org/getting_started/DeveloperGuide/
17//
18//===----------------------------------------------------------------------===//
19
20#ifndef FORTRAN_FRONTEND_TEXTDIAGNOSTICPRINTER_H
21#define FORTRAN_FRONTEND_TEXTDIAGNOSTICPRINTER_H
22
23#include "clang/Basic/Diagnostic.h"
24#include "llvm/ADT/IntrusiveRefCntPtr.h"
25#include "llvm/Support/raw_ostream.h"
26
27namespace clang {
28class DiagnosticOptions;
29class DiagnosticsEngine;
30} // namespace clang
31
32using llvm::IntrusiveRefCntPtr;
33using llvm::raw_ostream;
34
35namespace Fortran::frontend {
36class TextDiagnostic;
37
38class TextDiagnosticPrinter : public clang::DiagnosticConsumer {
39 raw_ostream &os;
40 llvm::IntrusiveRefCntPtr<clang::DiagnosticOptions> diagOpts;
41
42 /// A string to prefix to error messages.
43 std::string prefix;
44
45public:
46 TextDiagnosticPrinter(raw_ostream &os, clang::DiagnosticOptions *diags);
47 ~TextDiagnosticPrinter() override;
48
49 /// Set the diagnostic printer prefix string, which will be printed at the
50 /// start of any diagnostics. If empty, no prefix string is used.
51 void setPrefix(std::string value) { prefix = std::move(value); }
52
53 void HandleDiagnostic(clang::DiagnosticsEngine::Level level,
54 const clang::Diagnostic &info) override;
55
56 void printLocForRemarks(llvm::raw_svector_ostream &diagMessageStream,
57 llvm::StringRef &diagMsg);
58};
59
60} // namespace Fortran::frontend
61
62#endif
63

Warning: This file is not a C or C++ file. It does not have highlighting.

source code of flang/include/flang/Frontend/TextDiagnosticPrinter.h