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

1//===--- TextDiagnostic.h - Text Diagnostic Pretty-Printing -----*- 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// A utility class that provides support for textual pretty-printing of
10// diagnostics. Based on clang::TextDiagnostic (this is a trimmed version).
11//
12// TODO: If expanding, consider sharing the implementation with Clang.
13//===----------------------------------------------------------------------===//
14//
15// Coding style: https://mlir.llvm.org/getting_started/DeveloperGuide/
16//
17//===----------------------------------------------------------------------===//
18
19#ifndef FORTRAN_FRONTEND_TEXTDIAGNOSTIC_H
20#define FORTRAN_FRONTEND_TEXTDIAGNOSTIC_H
21
22#include "clang/Basic/Diagnostic.h"
23#include "llvm/ADT/IntrusiveRefCntPtr.h"
24
25namespace Fortran::frontend {
26
27/// Class to encapsulate the logic for formatting and printing a textual
28/// diagnostic message.
29///
30/// The purpose of this class is to isolate the implementation of printing
31/// beautiful text diagnostics from any particular interfaces. Currently only
32/// simple diagnostics that lack source location information are supported (e.g.
33/// Flang driver errors).
34///
35/// In the future we can extend this class (akin to Clang) to support more
36/// complex diagnostics that would include macro backtraces, caret diagnostics,
37/// FixIt Hints and code snippets.
38///
39class TextDiagnostic {
40public:
41 TextDiagnostic();
42
43 ~TextDiagnostic();
44
45 /// Print the diagnostic level to a llvm::raw_ostream.
46 ///
47 /// This is a static helper that handles colorizing the level and formatting
48 /// it into an arbitrary output stream.
49 ///
50 /// \param os Where the message is printed
51 /// \param level The diagnostic level (e.g. error or warning)
52 /// \param showColors Enable colorizing of the message.
53 static void printDiagnosticLevel(llvm::raw_ostream &os,
54 clang::DiagnosticsEngine::Level level,
55 bool showColors);
56
57 /// Pretty-print a diagnostic message to a llvm::raw_ostream.
58 ///
59 /// This is a static helper to handle the colorizing and rendering diagnostic
60 /// message to a particular ostream. In the future we can
61 /// extend it to support e.g. line wrapping. It is
62 /// publicly visible as at this stage we don't require any state data to
63 /// print a diagnostic.
64 ///
65 /// \param os Where the message is printed
66 /// \param isSupplemental true if this is a continuation note diagnostic
67 /// \param message The text actually printed
68 /// \param showColors Enable colorizing of the message.
69 static void printDiagnosticMessage(llvm::raw_ostream &os, bool isSupplemental,
70 llvm::StringRef message, bool showColors);
71};
72
73} // namespace Fortran::frontend
74
75#endif
76

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

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