Index: tools/llvm-cov/CodeCoverage.cpp =================================================================== --- tools/llvm-cov/CodeCoverage.cpp +++ tools/llvm-cov/CodeCoverage.cpp @@ -310,6 +310,11 @@ "use-color", cl::desc("Emit colored output (default=autodetect)"), cl::init(cl::BOU_UNSET)); + cl::opt ShowFullFilenames( + "full-filenames", cl::Optional, + cl::desc("Show full filenames in the coverage report (default=false)"), + cl::init(false)); + auto commandLineParser = [&, this](int argc, const char **argv) -> int { cl::ParseCommandLineOptions(argc, argv, "LLVM code coverage tool\n"); ViewOpts.Debug = DebugDump; @@ -318,6 +323,7 @@ ViewOpts.Colors = UseColor == cl::BOU_UNSET ? sys::Process::StandardOutHasColors() : UseColor == cl::BOU_TRUE; + ViewOpts.ShowFullFilenames = ShowFullFilenames; // Create the function filters if (!NameFilters.empty() || !NameRegexFilters.empty()) { Index: tools/llvm-cov/CoverageReport.cpp =================================================================== --- tools/llvm-cov/CoverageReport.cpp +++ tools/llvm-cov/CoverageReport.cpp @@ -20,7 +20,7 @@ namespace { /// \brief Helper struct which prints trimmed and aligned columns. struct Column { - enum TrimKind { NoTrim, LeftTrim, RightTrim }; + enum TrimKind { NoTrim, WidthTrim, LeftTrim, RightTrim }; enum AlignmentKind { LeftAlignment, RightAlignment }; @@ -30,7 +30,7 @@ AlignmentKind Alignment; Column(StringRef Str, unsigned Width) - : Str(Str), Width(Width), Trim(NoTrim), Alignment(LeftAlignment) {} + : Str(Str), Width(Width), Trim(WidthTrim), Alignment(LeftAlignment) {} Column &set(TrimKind Value) { Trim = Value; @@ -44,6 +44,7 @@ void render(raw_ostream &OS) const; }; + raw_ostream &operator<<(raw_ostream &OS, const Column &Value) { Value.render(OS); return OS; @@ -64,6 +65,9 @@ switch (Trim) { case NoTrim: + OS << Str; + break; + case WidthTrim: OS << Str.substr(0, Width); break; case LeftTrim: @@ -84,8 +88,8 @@ return Column(Str, Width).set(Value); } -static const unsigned FileReportColumns[] = {25, 10, 8, 8, 10, 10}; -static const unsigned FunctionReportColumns[] = {25, 10, 8, 8, 10, 8, 8}; +static size_t FileReportColumns[] = {25, 10, 8, 8, 10, 10}; +static size_t FunctionReportColumns[] = {25, 10, 8, 8, 10, 8, 8}; /// \brief Prints a horizontal divider which spans across the given columns. template @@ -108,8 +112,10 @@ } void CoverageReport::render(const FileCoverageSummary &File, raw_ostream &OS) { - OS << column(File.Name, FileReportColumns[0], Column::LeftTrim) - << format("%*u", FileReportColumns[1], (unsigned)File.RegionCoverage.NumRegions); + OS << column(File.Name, FileReportColumns[0], + Options.ShowFullFilenames ? Column::NoTrim : Column::LeftTrim) + << format("%*u", FileReportColumns[1], + (unsigned)File.RegionCoverage.NumRegions); Options.colored_ostream(OS, File.RegionCoverage.isFullyCovered() ? raw_ostream::GREEN : raw_ostream::RED) @@ -191,6 +197,11 @@ } void CoverageReport::renderFileReports(raw_ostream &OS) { + if (Options.ShowFullFilenames) { + for (StringRef Filename : Coverage->getUniqueSourceFiles()) { + FileReportColumns[0] = std::max(FileReportColumns[0], Filename.size()); + } + } OS << column("Filename", FileReportColumns[0]) << column("Regions", FileReportColumns[1], Column::RightAlignment) << column("Miss", FileReportColumns[2], Column::RightAlignment) Index: tools/llvm-cov/CoverageViewOptions.h =================================================================== --- tools/llvm-cov/CoverageViewOptions.h +++ tools/llvm-cov/CoverageViewOptions.h @@ -24,6 +24,7 @@ bool ShowLineStatsOrRegionMarkers; bool ShowExpandedRegions; bool ShowFunctionInstantiations; + bool ShowFullFilenames; /// \brief Change the output's stream color if the colors are enabled. ColoredRawOstream colored_ostream(raw_ostream &OS,