xref: /freebsd-src/contrib/llvm-project/llvm/tools/llvm-cov/SourceCoverageViewHTML.h (revision 0b57cec536236d46e3dba9bd041533462f33dbb7)
1*0b57cec5SDimitry Andric //===- SourceCoverageViewHTML.h - A html 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 html coverage renderer.
10*0b57cec5SDimitry Andric ///
11*0b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
12*0b57cec5SDimitry Andric 
13*0b57cec5SDimitry Andric #ifndef LLVM_COV_SOURCECOVERAGEVIEWHTML_H
14*0b57cec5SDimitry Andric #define LLVM_COV_SOURCECOVERAGEVIEWHTML_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 struct FileCoverageSummary;
23*0b57cec5SDimitry Andric 
24*0b57cec5SDimitry Andric /// A coverage printer for html output.
25*0b57cec5SDimitry Andric class CoveragePrinterHTML : public CoveragePrinter {
26*0b57cec5SDimitry Andric public:
27*0b57cec5SDimitry Andric   Expected<OwnedStream> createViewFile(StringRef Path,
28*0b57cec5SDimitry Andric                                        bool InToplevel) override;
29*0b57cec5SDimitry Andric 
30*0b57cec5SDimitry Andric   void closeViewFile(OwnedStream OS) override;
31*0b57cec5SDimitry Andric 
32*0b57cec5SDimitry Andric   Error createIndexFile(ArrayRef<std::string> SourceFiles,
33*0b57cec5SDimitry Andric                         const coverage::CoverageMapping &Coverage,
34*0b57cec5SDimitry Andric                         const CoverageFiltersMatchAll &Filters) override;
35*0b57cec5SDimitry Andric 
36*0b57cec5SDimitry Andric   CoveragePrinterHTML(const CoverageViewOptions &Opts)
37*0b57cec5SDimitry Andric       : CoveragePrinter(Opts) {}
38*0b57cec5SDimitry Andric 
39*0b57cec5SDimitry Andric private:
40*0b57cec5SDimitry Andric   void emitFileSummary(raw_ostream &OS, StringRef SF,
41*0b57cec5SDimitry Andric                        const FileCoverageSummary &FCS,
42*0b57cec5SDimitry Andric                        bool IsTotals = false) const;
43*0b57cec5SDimitry Andric   std::string buildLinkToFile(StringRef SF,
44*0b57cec5SDimitry Andric                               const FileCoverageSummary &FCS) const;
45*0b57cec5SDimitry Andric };
46*0b57cec5SDimitry Andric 
47*0b57cec5SDimitry Andric /// A code coverage view which supports html-based rendering.
48*0b57cec5SDimitry Andric class SourceCoverageViewHTML : public SourceCoverageView {
49*0b57cec5SDimitry Andric   void renderViewHeader(raw_ostream &OS) override;
50*0b57cec5SDimitry Andric 
51*0b57cec5SDimitry Andric   void renderViewFooter(raw_ostream &OS) override;
52*0b57cec5SDimitry Andric 
53*0b57cec5SDimitry Andric   void renderSourceName(raw_ostream &OS, bool WholeFile) override;
54*0b57cec5SDimitry Andric 
55*0b57cec5SDimitry Andric   void renderLinePrefix(raw_ostream &OS, unsigned ViewDepth) override;
56*0b57cec5SDimitry Andric 
57*0b57cec5SDimitry Andric   void renderLineSuffix(raw_ostream &OS, unsigned ViewDepth) override;
58*0b57cec5SDimitry Andric 
59*0b57cec5SDimitry Andric   void renderViewDivider(raw_ostream &OS, unsigned ViewDepth) override;
60*0b57cec5SDimitry Andric 
61*0b57cec5SDimitry Andric   void renderLine(raw_ostream &OS, LineRef L, const LineCoverageStats &LCS,
62*0b57cec5SDimitry Andric                   unsigned ExpansionCol, unsigned ViewDepth) override;
63*0b57cec5SDimitry Andric 
64*0b57cec5SDimitry Andric   void renderExpansionSite(raw_ostream &OS, LineRef L,
65*0b57cec5SDimitry Andric                            const LineCoverageStats &LCS, unsigned ExpansionCol,
66*0b57cec5SDimitry Andric                            unsigned ViewDepth) override;
67*0b57cec5SDimitry Andric 
68*0b57cec5SDimitry Andric   void renderExpansionView(raw_ostream &OS, ExpansionView &ESV,
69*0b57cec5SDimitry Andric                            unsigned ViewDepth) override;
70*0b57cec5SDimitry Andric 
71*0b57cec5SDimitry Andric   void renderInstantiationView(raw_ostream &OS, InstantiationView &ISV,
72*0b57cec5SDimitry Andric                                unsigned ViewDepth) override;
73*0b57cec5SDimitry Andric 
74*0b57cec5SDimitry Andric   void renderLineCoverageColumn(raw_ostream &OS,
75*0b57cec5SDimitry Andric                                 const LineCoverageStats &Line) override;
76*0b57cec5SDimitry Andric 
77*0b57cec5SDimitry Andric   void renderLineNumberColumn(raw_ostream &OS, unsigned LineNo) override;
78*0b57cec5SDimitry Andric 
79*0b57cec5SDimitry Andric   void renderRegionMarkers(raw_ostream &OS, const LineCoverageStats &Line,
80*0b57cec5SDimitry Andric                            unsigned ViewDepth) override;
81*0b57cec5SDimitry Andric 
82*0b57cec5SDimitry Andric   void renderTitle(raw_ostream &OS, StringRef Title) override;
83*0b57cec5SDimitry Andric 
84*0b57cec5SDimitry Andric   void renderTableHeader(raw_ostream &OS, unsigned FirstUncoveredLineNo,
85*0b57cec5SDimitry Andric                          unsigned IndentLevel) override;
86*0b57cec5SDimitry Andric 
87*0b57cec5SDimitry Andric public:
88*0b57cec5SDimitry Andric   SourceCoverageViewHTML(StringRef SourceName, const MemoryBuffer &File,
89*0b57cec5SDimitry Andric                          const CoverageViewOptions &Options,
90*0b57cec5SDimitry Andric                          coverage::CoverageData &&CoverageInfo)
91*0b57cec5SDimitry Andric       : SourceCoverageView(SourceName, File, Options, std::move(CoverageInfo)) {
92*0b57cec5SDimitry Andric   }
93*0b57cec5SDimitry Andric };
94*0b57cec5SDimitry Andric 
95*0b57cec5SDimitry Andric } // namespace llvm
96*0b57cec5SDimitry Andric 
97*0b57cec5SDimitry Andric #endif // LLVM_COV_SOURCECOVERAGEVIEWHTML_H
98