xref: /freebsd-src/contrib/llvm-project/llvm/tools/llvm-cov/SourceCoverageViewText.h (revision 0b57cec536236d46e3dba9bd041533462f33dbb7)
1*0b57cec5SDimitry Andric //===- SourceCoverageViewText.h - A text-based code coverage view ---------===//
2*0b57cec5SDimitry Andric //
3*0b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*0b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*0b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*0b57cec5SDimitry Andric //
7*0b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
8*0b57cec5SDimitry Andric ///
9*0b57cec5SDimitry Andric /// \file This file defines the interface to the text-based coverage renderer.
10*0b57cec5SDimitry Andric ///
11*0b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
12*0b57cec5SDimitry Andric 
13*0b57cec5SDimitry Andric #ifndef LLVM_COV_SOURCECOVERAGEVIEWTEXT_H
14*0b57cec5SDimitry Andric #define LLVM_COV_SOURCECOVERAGEVIEWTEXT_H
15*0b57cec5SDimitry Andric 
16*0b57cec5SDimitry Andric #include "SourceCoverageView.h"
17*0b57cec5SDimitry Andric 
18*0b57cec5SDimitry Andric namespace llvm {
19*0b57cec5SDimitry Andric 
20*0b57cec5SDimitry Andric using namespace coverage;
21*0b57cec5SDimitry Andric 
22*0b57cec5SDimitry Andric /// A coverage printer for text output.
23*0b57cec5SDimitry Andric class CoveragePrinterText : public CoveragePrinter {
24*0b57cec5SDimitry Andric public:
25*0b57cec5SDimitry Andric   Expected<OwnedStream> createViewFile(StringRef Path,
26*0b57cec5SDimitry Andric                                        bool InToplevel) override;
27*0b57cec5SDimitry Andric 
28*0b57cec5SDimitry Andric   void closeViewFile(OwnedStream OS) override;
29*0b57cec5SDimitry Andric 
30*0b57cec5SDimitry Andric   Error createIndexFile(ArrayRef<std::string> SourceFiles,
31*0b57cec5SDimitry Andric                         const CoverageMapping &Coverage,
32*0b57cec5SDimitry Andric                         const CoverageFiltersMatchAll &Filters) override;
33*0b57cec5SDimitry Andric 
34*0b57cec5SDimitry Andric   CoveragePrinterText(const CoverageViewOptions &Opts)
35*0b57cec5SDimitry Andric       : CoveragePrinter(Opts) {}
36*0b57cec5SDimitry Andric };
37*0b57cec5SDimitry Andric 
38*0b57cec5SDimitry Andric /// A code coverage view which supports text-based rendering.
39*0b57cec5SDimitry Andric class SourceCoverageViewText : public SourceCoverageView {
40*0b57cec5SDimitry Andric   void renderViewHeader(raw_ostream &OS) override;
41*0b57cec5SDimitry Andric 
42*0b57cec5SDimitry Andric   void renderViewFooter(raw_ostream &OS) override;
43*0b57cec5SDimitry Andric 
44*0b57cec5SDimitry Andric   void renderSourceName(raw_ostream &OS, bool WholeFile) override;
45*0b57cec5SDimitry Andric 
46*0b57cec5SDimitry Andric   void renderLinePrefix(raw_ostream &OS, unsigned ViewDepth) override;
47*0b57cec5SDimitry Andric 
48*0b57cec5SDimitry Andric   void renderLineSuffix(raw_ostream &OS, unsigned ViewDepth) override;
49*0b57cec5SDimitry Andric 
50*0b57cec5SDimitry Andric   void renderViewDivider(raw_ostream &OS, unsigned ViewDepth) override;
51*0b57cec5SDimitry Andric 
52*0b57cec5SDimitry Andric   void renderLine(raw_ostream &OS, LineRef L, const LineCoverageStats &LCS,
53*0b57cec5SDimitry Andric                   unsigned ExpansionCol, unsigned ViewDepth) override;
54*0b57cec5SDimitry Andric 
55*0b57cec5SDimitry Andric   void renderExpansionSite(raw_ostream &OS, LineRef L,
56*0b57cec5SDimitry Andric                            const LineCoverageStats &LCS, unsigned ExpansionCol,
57*0b57cec5SDimitry Andric                            unsigned ViewDepth) override;
58*0b57cec5SDimitry Andric 
59*0b57cec5SDimitry Andric   void renderExpansionView(raw_ostream &OS, ExpansionView &ESV,
60*0b57cec5SDimitry Andric                            unsigned ViewDepth) override;
61*0b57cec5SDimitry Andric 
62*0b57cec5SDimitry Andric   void renderInstantiationView(raw_ostream &OS, InstantiationView &ISV,
63*0b57cec5SDimitry Andric                                unsigned ViewDepth) override;
64*0b57cec5SDimitry Andric 
65*0b57cec5SDimitry Andric   void renderLineCoverageColumn(raw_ostream &OS,
66*0b57cec5SDimitry Andric                                 const LineCoverageStats &Line) override;
67*0b57cec5SDimitry Andric 
68*0b57cec5SDimitry Andric   void renderLineNumberColumn(raw_ostream &OS, unsigned LineNo) override;
69*0b57cec5SDimitry Andric 
70*0b57cec5SDimitry Andric   void renderRegionMarkers(raw_ostream &OS, const LineCoverageStats &Line,
71*0b57cec5SDimitry Andric                            unsigned ViewDepth) override;
72*0b57cec5SDimitry Andric 
73*0b57cec5SDimitry Andric   void renderTitle(raw_ostream &OS, StringRef Title) override;
74*0b57cec5SDimitry Andric 
75*0b57cec5SDimitry Andric   void renderTableHeader(raw_ostream &OS, unsigned FirstUncoveredLineNo,
76*0b57cec5SDimitry Andric                          unsigned IndentLevel) override;
77*0b57cec5SDimitry Andric 
78*0b57cec5SDimitry Andric public:
79*0b57cec5SDimitry Andric   SourceCoverageViewText(StringRef SourceName, const MemoryBuffer &File,
80*0b57cec5SDimitry Andric                          const CoverageViewOptions &Options,
81*0b57cec5SDimitry Andric                          CoverageData &&CoverageInfo)
82*0b57cec5SDimitry Andric       : SourceCoverageView(SourceName, File, Options, std::move(CoverageInfo)) {
83*0b57cec5SDimitry Andric   }
84*0b57cec5SDimitry Andric };
85*0b57cec5SDimitry Andric 
86*0b57cec5SDimitry Andric } // namespace llvm
87*0b57cec5SDimitry Andric 
88*0b57cec5SDimitry Andric #endif // LLVM_COV_SOURCECOVERAGEVIEWTEXT_H
89