Coverage Report

Created: 2023-05-31 04:38

/Users/buildslave/jenkins/workspace/coverage/llvm-project/clang/include/clang/Frontend/SARIFDiagnosticPrinter.h
Line
Count
Source (jump to first uncovered line)
1
//===-- SARIFDiagnosticPrinter.h - SARIF 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, which prints the diagnostics to
10
// standard error in SARIF format.
11
//
12
//===----------------------------------------------------------------------===//
13
14
#ifndef LLVM_CLANG_FRONTEND_SARIFDIAGNOSTICPRINTER_H
15
#define LLVM_CLANG_FRONTEND_SARIFDIAGNOSTICPRINTER_H
16
17
#include "clang/Basic/Diagnostic.h"
18
#include "clang/Basic/LLVM.h"
19
#include "clang/Basic/Sarif.h"
20
#include "llvm/ADT/IntrusiveRefCntPtr.h"
21
#include "llvm/ADT/StringRef.h"
22
#include <memory>
23
24
namespace clang {
25
class DiagnosticOptions;
26
class LangOptions;
27
class SARIFDiagnostic;
28
class SarifDocumentWriter;
29
30
class SARIFDiagnosticPrinter : public DiagnosticConsumer {
31
public:
32
  SARIFDiagnosticPrinter(raw_ostream &OS, DiagnosticOptions *Diags);
33
0
  ~SARIFDiagnosticPrinter() = default;
34
35
  SARIFDiagnosticPrinter &operator=(const SARIFDiagnosticPrinter &&) = delete;
36
  SARIFDiagnosticPrinter(SARIFDiagnosticPrinter &&) = delete;
37
  SARIFDiagnosticPrinter &operator=(const SARIFDiagnosticPrinter &) = delete;
38
  SARIFDiagnosticPrinter(const SARIFDiagnosticPrinter &) = delete;
39
40
  /// setPrefix - Set the diagnostic printer prefix string, which will be
41
  /// printed at the start of any diagnostics. If empty, no prefix string is
42
  /// used.
43
0
  void setPrefix(llvm::StringRef Value) { Prefix = Value; }
44
45
1
  bool hasSarifWriter() const { return Writer != nullptr; }
46
47
0
  SarifDocumentWriter &getSarifWriter() const {
48
0
    assert(Writer && "SarifWriter not set!");
49
0
    return *Writer;
50
0
  }
51
52
1
  void setSarifWriter(std::unique_ptr<SarifDocumentWriter> SarifWriter) {
53
1
    Writer = std::move(SarifWriter);
54
1
  }
55
56
  void BeginSourceFile(const LangOptions &LO, const Preprocessor *PP) override;
57
  void EndSourceFile() override;
58
  void HandleDiagnostic(DiagnosticsEngine::Level Level,
59
                        const Diagnostic &Info) override;
60
61
private:
62
  raw_ostream &OS;
63
  IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts;
64
65
  /// Handle to the currently active SARIF diagnostic emitter.
66
  std::unique_ptr<SARIFDiagnostic> SARIFDiag;
67
68
  /// A string to prefix to error messages.
69
  std::string Prefix;
70
71
  std::unique_ptr<SarifDocumentWriter> Writer;
72
};
73
74
} // end namespace clang
75
76
#endif