//===- 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 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 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 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 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 &Functions); /// Render an array of all the source files, also pass back a Summary. void renderFiles(ArrayRef SourceFiles, ArrayRef 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 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 &SourceFiles) override; }; } // end namespace llvm #endif // LLVM_COV_COVERAGEEXPORTERJSON_H