mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
[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. llvm-svn: 273634
This commit is contained in:
parent
8b58021d7b
commit
9219f54dd4
@ -133,7 +133,8 @@ CodeCoverageTool::attachExpansionSubViews(SourceCoverageView &View,
|
||||
|
||||
auto SubViewExpansions = ExpansionCoverage.getExpansions();
|
||||
auto SubView = llvm::make_unique<SourceCoverageView>(
|
||||
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<SourceCoverageView>(
|
||||
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<SourceCoverageView>(
|
||||
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<SourceCoverageView>(
|
||||
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";
|
||||
|
@ -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";
|
||||
}
|
||||
|
@ -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<ExpansionView> ExpansionSubViews;
|
||||
|
||||
/// A container for all instantiations (e.g template functions) in the source
|
||||
/// on display.
|
||||
std::vector<InstantiationView> 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
|
||||
|
Loading…
Reference in New Issue
Block a user