1 //===- SourceCoverageViewText.h - A text-based code coverage view ---------===//
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 /// \file This file defines the interface to the text-based coverage renderer.
10 ///
11 //===----------------------------------------------------------------------===//
12 
13 #ifndef LLVM_COV_SOURCECOVERAGEVIEWTEXT_H
14 #define LLVM_COV_SOURCECOVERAGEVIEWTEXT_H
15 
16 #include "SourceCoverageView.h"
17 
18 namespace llvm {
19 
20 using namespace coverage;
21 
22 /// A coverage printer for text output.
23 class CoveragePrinterText : public CoveragePrinter {
24 public:
25   Expected<OwnedStream> createViewFile(StringRef Path,
26                                        bool InToplevel) override;
27 
28   void closeViewFile(OwnedStream OS) override;
29 
30   Error createIndexFile(ArrayRef<std::string> SourceFiles,
31                         const CoverageMapping &Coverage,
32                         const CoverageFiltersMatchAll &Filters) override;
33 
34   CoveragePrinterText(const CoverageViewOptions &Opts)
35       : CoveragePrinter(Opts) {}
36 };
37 
38 /// A code coverage view which supports text-based rendering.
39 class SourceCoverageViewText : public SourceCoverageView {
40   void renderViewHeader(raw_ostream &OS) override;
41 
42   void renderViewFooter(raw_ostream &OS) override;
43 
44   void renderSourceName(raw_ostream &OS, bool WholeFile) override;
45 
46   void renderLinePrefix(raw_ostream &OS, unsigned ViewDepth) override;
47 
48   void renderLineSuffix(raw_ostream &OS, unsigned ViewDepth) override;
49 
50   void renderViewDivider(raw_ostream &OS, unsigned ViewDepth) override;
51 
52   void renderLine(raw_ostream &OS, LineRef L, const LineCoverageStats &LCS,
53                   unsigned ExpansionCol, unsigned ViewDepth) override;
54 
55   void renderExpansionSite(raw_ostream &OS, LineRef L,
56                            const LineCoverageStats &LCS, unsigned ExpansionCol,
57                            unsigned ViewDepth) override;
58 
59   void renderExpansionView(raw_ostream &OS, ExpansionView &ESV,
60                            unsigned ViewDepth) override;
61 
62   void renderBranchView(raw_ostream &OS, BranchView &BRV,
63                         unsigned ViewDepth) override;
64 
65   void renderInstantiationView(raw_ostream &OS, InstantiationView &ISV,
66                                unsigned ViewDepth) override;
67 
68   void renderLineCoverageColumn(raw_ostream &OS,
69                                 const LineCoverageStats &Line) override;
70 
71   void renderLineNumberColumn(raw_ostream &OS, unsigned LineNo) override;
72 
73   void renderRegionMarkers(raw_ostream &OS, const LineCoverageStats &Line,
74                            unsigned ViewDepth) override;
75 
76   void renderTitle(raw_ostream &OS, StringRef Title) override;
77 
78   void renderTableHeader(raw_ostream &OS, unsigned FirstUncoveredLineNo,
79                          unsigned IndentLevel) override;
80 
81 public:
82   SourceCoverageViewText(StringRef SourceName, const MemoryBuffer &File,
83                          const CoverageViewOptions &Options,
84                          CoverageData &&CoverageInfo)
85       : SourceCoverageView(SourceName, File, Options, std::move(CoverageInfo)) {
86   }
87 };
88 
89 } // namespace llvm
90 
91 #endif // LLVM_COV_SOURCECOVERAGEVIEWTEXT_H
92