122 lines · c
1//===- SourceCoverageViewHTML.h - A html 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-exception6//7//===----------------------------------------------------------------------===//8///9/// \file This file defines the interface to the html coverage renderer.10///11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_COV_SOURCECOVERAGEVIEWHTML_H14#define LLVM_COV_SOURCECOVERAGEVIEWHTML_H15 16#include "SourceCoverageView.h"17 18namespace llvm {19 20using namespace coverage;21 22struct FileCoverageSummary;23 24/// A coverage printer for html output.25class CoveragePrinterHTML : public CoveragePrinter {26public:27 Expected<OwnedStream> createViewFile(StringRef Path,28 bool InToplevel) override;29 30 void closeViewFile(OwnedStream OS) override;31 32 Error createIndexFile(ArrayRef<std::string> SourceFiles,33 const coverage::CoverageMapping &Coverage,34 const CoverageFiltersMatchAll &Filters) override;35 36 CoveragePrinterHTML(const CoverageViewOptions &Opts)37 : CoveragePrinter(Opts) {}38 39protected:40 Error emitStyleSheet();41 Error emitJavaScript();42 void emitReportHeader(raw_ostream &OSRef, const std::string &Title);43 44private:45 void emitFileSummary(raw_ostream &OS, StringRef SF,46 const FileCoverageSummary &FCS,47 bool IsTotals = false) const;48 std::string buildLinkToFile(StringRef SF,49 const FileCoverageSummary &FCS) const;50};51 52/// A coverage printer for html output, but generates index files in every53/// subdirectory to show a hierarchical view.54class CoveragePrinterHTMLDirectory : public CoveragePrinterHTML {55public:56 using CoveragePrinterHTML::CoveragePrinterHTML;57 58 Error createIndexFile(ArrayRef<std::string> SourceFiles,59 const coverage::CoverageMapping &Coverage,60 const CoverageFiltersMatchAll &Filters) override;61 62private:63 struct Reporter;64};65 66/// A code coverage view which supports html-based rendering.67class SourceCoverageViewHTML : public SourceCoverageView {68 void renderViewHeader(raw_ostream &OS) override;69 70 void renderViewFooter(raw_ostream &OS) override;71 72 void renderSourceName(raw_ostream &OS, bool WholeFile) override;73 74 void renderLinePrefix(raw_ostream &OS, unsigned ViewDepth) override;75 76 void renderLineSuffix(raw_ostream &OS, unsigned ViewDepth) override;77 78 void renderViewDivider(raw_ostream &OS, unsigned ViewDepth) override;79 80 void renderLine(raw_ostream &OS, LineRef L, const LineCoverageStats &LCS,81 unsigned ExpansionCol, unsigned ViewDepth) override;82 83 void renderExpansionSite(raw_ostream &OS, LineRef L,84 const LineCoverageStats &LCS, unsigned ExpansionCol,85 unsigned ViewDepth) override;86 87 void renderExpansionView(raw_ostream &OS, ExpansionView &ESV,88 unsigned ViewDepth) override;89 90 void renderBranchView(raw_ostream &OS, BranchView &BRV,91 unsigned ViewDepth) override;92 93 void renderMCDCView(raw_ostream &OS, MCDCView &BRV,94 unsigned ViewDepth) override;95 96 void renderInstantiationView(raw_ostream &OS, InstantiationView &ISV,97 unsigned ViewDepth) override;98 99 void renderLineCoverageColumn(raw_ostream &OS,100 const LineCoverageStats &Line) override;101 102 void renderLineNumberColumn(raw_ostream &OS, unsigned LineNo) override;103 104 void renderRegionMarkers(raw_ostream &OS, const LineCoverageStats &Line,105 unsigned ViewDepth) override;106 107 void renderTitle(raw_ostream &OS, StringRef Title) override;108 109 void renderTableHeader(raw_ostream &OS, unsigned IndentLevel) override;110 111public:112 SourceCoverageViewHTML(StringRef SourceName, const MemoryBuffer &File,113 const CoverageViewOptions &Options,114 coverage::CoverageData &&CoverageInfo)115 : SourceCoverageView(SourceName, File, Options, std::move(CoverageInfo)) {116 }117};118 119} // namespace llvm120 121#endif // LLVM_COV_SOURCECOVERAGEVIEWHTML_H122