From cc9ef12921233de3b257774e5e55274017ecd478 Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Fri, 24 Jun 2016 00:34:51 +0000 Subject: [PATCH] [llvm-cov] Add SourceNames to SourceCoverageViews, NFC A SourceName can be a file or a function. It makes sense to attach this information to a SourceCoverageView, seeing as views (1) already point to the text corresponding to the relevant source code and (2) are already used to render that text along with the SourceNames. This is a nice cleanup which is independent of the upcoming html patch. While we're at it, document the fields in SourceCoverageView. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273634 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/llvm-cov/CodeCoverage.cpp | 21 ++++++++++----------- tools/llvm-cov/SourceCoverageView.cpp | 9 ++++++--- tools/llvm-cov/SourceCoverageView.h | 23 +++++++++++++++++++++-- 3 files changed, 37 insertions(+), 16 deletions(-) diff --git a/tools/llvm-cov/CodeCoverage.cpp b/tools/llvm-cov/CodeCoverage.cpp index 947bc7c4fcc..aa2156180a4 100644 --- a/tools/llvm-cov/CodeCoverage.cpp +++ b/tools/llvm-cov/CodeCoverage.cpp @@ -133,7 +133,8 @@ CodeCoverageTool::attachExpansionSubViews(SourceCoverageView &View, auto SubViewExpansions = ExpansionCoverage.getExpansions(); auto SubView = llvm::make_unique( - SourceBuffer.get(), ViewOpts, std::move(ExpansionCoverage)); + Expansion.Function.Name, SourceBuffer.get(), ViewOpts, + std::move(ExpansionCoverage)); attachExpansionSubViews(*SubView, SubViewExpansions, Coverage); View.addExpansion(Expansion.Region, std::move(SubView)); } @@ -151,7 +152,7 @@ CodeCoverageTool::createFunctionView(const FunctionRecord &Function, auto Expansions = FunctionCoverage.getExpansions(); auto View = llvm::make_unique( - SourceBuffer.get(), ViewOpts, std::move(FunctionCoverage)); + Function.Name, SourceBuffer.get(), ViewOpts, std::move(FunctionCoverage)); attachExpansionSubViews(*View, Expansions, Coverage); return View; @@ -169,14 +170,15 @@ CodeCoverageTool::createSourceFileView(StringRef SourceFile, auto Expansions = FileCoverage.getExpansions(); auto View = llvm::make_unique( - SourceBuffer.get(), ViewOpts, std::move(FileCoverage)); + SourceFile, SourceBuffer.get(), ViewOpts, std::move(FileCoverage)); attachExpansionSubViews(*View, Expansions, Coverage); for (auto Function : Coverage.getInstantiations(SourceFile)) { auto SubViewCoverage = Coverage.getCoverageForFunction(*Function); auto SubViewExpansions = SubViewCoverage.getExpansions(); auto SubView = llvm::make_unique( - SourceBuffer.get(), ViewOpts, std::move(SubViewCoverage)); + Function->Name, SourceBuffer.get(), ViewOpts, + std::move(SubViewCoverage)); attachExpansionSubViews(*SubView, SubViewExpansions, Coverage); if (SubView) { @@ -426,9 +428,7 @@ int CodeCoverageTool::show(int argc, const char **argv, outs() << "\n"; continue; } - ViewOpts.colored_ostream(outs(), raw_ostream::CYAN) << Function.Name - << ":"; - outs() << "\n"; + mainView->renderSourceName(outs()); mainView->render(outs(), /*WholeFile=*/false); outs() << "\n"; } @@ -452,10 +452,9 @@ int CodeCoverageTool::show(int argc, const char **argv, continue; } - if (ShowFilenames) { - ViewOpts.colored_ostream(outs(), raw_ostream::CYAN) << SourceFile << ":"; - outs() << "\n"; - } + if (ShowFilenames) + mainView->renderSourceName(outs()); + mainView->render(outs(), /*Wholefile=*/true); if (SourceFiles.size() > 1) outs() << "\n"; diff --git a/tools/llvm-cov/SourceCoverageView.cpp b/tools/llvm-cov/SourceCoverageView.cpp index 0d28006c018..fb5dcb325ca 100644 --- a/tools/llvm-cov/SourceCoverageView.cpp +++ b/tools/llvm-cov/SourceCoverageView.cpp @@ -250,9 +250,7 @@ void SourceCoverageView::render(raw_ostream &OS, bool WholeFile, OS << "\n"; renderIndent(OS, NestedIndent); OS << ' '; - Options.colored_ostream(OS, raw_ostream::CYAN) << NextISV->FunctionName - << ":"; - OS << "\n"; + NextISV->View->renderSourceName(OS); NextISV->View->render(OS, false, NestedIndent); RenderedSubView = true; } @@ -262,3 +260,8 @@ void SourceCoverageView::render(raw_ostream &OS, bool WholeFile, } } } + +void SourceCoverageView::renderSourceName(raw_ostream &OS) { + getOptions().colored_ostream(OS, raw_ostream::CYAN) << getSourceName() + << ":\n"; +} diff --git a/tools/llvm-cov/SourceCoverageView.h b/tools/llvm-cov/SourceCoverageView.h index 49a5f4acdc2..2e98151a70e 100644 --- a/tools/llvm-cov/SourceCoverageView.h +++ b/tools/llvm-cov/SourceCoverageView.h @@ -101,10 +101,23 @@ struct LineCoverageStats { /// It can have embedded coverage views. class SourceCoverageView { private: + /// A function or file name. + StringRef SourceName; + + /// A memory buffer backing the source on display. const MemoryBuffer &File; + + /// Various options to guide the coverage renderer. const CoverageViewOptions &Options; + + /// Complete coverage information about the source on display. coverage::CoverageData CoverageInfo; + + /// A container for all expansions (e.g macros) in the source on display. std::vector ExpansionSubViews; + + /// A container for all instantiations (e.g template functions) in the source + /// on display. std::vector InstantiationSubViews; /// \brief Render a source line with highlighting. @@ -132,10 +145,13 @@ private: static const unsigned LineNumberColumnWidth = 5; public: - SourceCoverageView(const MemoryBuffer &File, + SourceCoverageView(StringRef SourceName, const MemoryBuffer &File, const CoverageViewOptions &Options, coverage::CoverageData &&CoverageInfo) - : File(File), Options(Options), CoverageInfo(std::move(CoverageInfo)) {} + : SourceName(SourceName), File(File), Options(Options), + CoverageInfo(std::move(CoverageInfo)) {} + + StringRef getSourceName() const { return SourceName; } const CoverageViewOptions &getOptions() const { return Options; } @@ -154,6 +170,9 @@ public: /// \brief Print the code coverage information for a specific /// portion of a source file to the output stream. void render(raw_ostream &OS, bool WholeFile, unsigned IndentLevel = 0); + + /// \brief Print the source name corresponding to this view. + void renderSourceName(raw_ostream &OS); }; } // namespace llvm -- 2.50.1