aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm/tools/llvm-cov/CoverageExporterJson.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm/tools/llvm-cov/CoverageExporterJson.h')
-rw-r--r--contrib/llvm/tools/llvm-cov/CoverageExporterJson.h112
1 files changed, 112 insertions, 0 deletions
diff --git a/contrib/llvm/tools/llvm-cov/CoverageExporterJson.h b/contrib/llvm/tools/llvm-cov/CoverageExporterJson.h
new file mode 100644
index 000000000000..f88dffa0ebea
--- /dev/null
+++ b/contrib/llvm/tools/llvm-cov/CoverageExporterJson.h
@@ -0,0 +1,112 @@
+//===- CoverageExporterJson.h - Code coverage JSON exporter ---------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This class implements a code coverage exporter for JSON format.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_COV_COVERAGEEXPORTERJSON_H
+#define LLVM_COV_COVERAGEEXPORTERJSON_H
+
+#include "CoverageExporter.h"
+#include <stack>
+
+namespace llvm {
+
+class CoverageExporterJson : public CoverageExporter {
+ /// States that the JSON rendering machine can be in.
+ enum JsonState { None, NonEmptyElement, EmptyElement };
+
+ /// Tracks state of the JSON output.
+ std::stack<JsonState> State;
+
+ /// Emit a serialized scalar.
+ void emitSerialized(const int64_t Value);
+
+ /// Emit a serialized string.
+ void emitSerialized(const std::string &Value);
+
+ /// Emit a comma if there is a previous element to delimit.
+ void emitComma();
+
+ /// Emit a starting dictionary/object character.
+ void emitDictStart();
+
+ /// Emit a dictionary/object key but no value.
+ void emitDictKey(const std::string &Key);
+
+ /// Emit a dictionary/object key/value pair.
+ template <typename V>
+ void emitDictElement(const std::string &Key, const V &Value) {
+ emitComma();
+ emitSerialized(Key);
+ OS << ":";
+ emitSerialized(Value);
+ }
+
+ /// Emit a closing dictionary/object character.
+ void emitDictEnd();
+
+ /// Emit a starting array character.
+ void emitArrayStart();
+
+ /// Emit an array element.
+ template <typename V> void emitArrayElement(const V &Value) {
+ emitComma();
+ emitSerialized(Value);
+ }
+
+ /// emit a closing array character.
+ void emitArrayEnd();
+
+ /// Render an array of all the given functions.
+ void renderFunctions(
+ const iterator_range<coverage::FunctionRecordIterator> &Functions);
+
+ /// Render an array of all the source files, also pass back a Summary.
+ void renderFiles(ArrayRef<std::string> SourceFiles,
+ ArrayRef<FileCoverageSummary> FileReports);
+
+ /// Render a single file.
+ void renderFile(const std::string &Filename,
+ const FileCoverageSummary &FileReport);
+
+ /// Render summary for a single file.
+ void renderFileCoverage(const coverage::CoverageData &FileCoverage,
+ const FileCoverageSummary &FileReport);
+
+ /// Render a CoverageSegment.
+ void renderSegment(const coverage::CoverageSegment &Segment);
+
+ /// Render an ExpansionRecord.
+ void renderExpansion(const coverage::ExpansionRecord &Expansion);
+
+ /// Render a list of CountedRegions.
+ void renderRegions(ArrayRef<coverage::CountedRegion> Regions);
+
+ /// Render a single CountedRegion.
+ void renderRegion(const coverage::CountedRegion &Region);
+
+ /// Render a FileCoverageSummary.
+ void renderSummary(const FileCoverageSummary &Summary);
+
+public:
+ CoverageExporterJson(const coverage::CoverageMapping &CoverageMapping,
+ const CoverageViewOptions &Options, raw_ostream &OS);
+
+ /// Render the CoverageMapping object.
+ void renderRoot(const CoverageFilters &IgnoreFilenameFilters) override;
+
+ /// Render the CoverageMapping object for specified source files.
+ void renderRoot(const std::vector<std::string> &SourceFiles) override;
+};
+
+} // end namespace llvm
+
+#endif // LLVM_COV_COVERAGEEXPORTERJSON_H