apex-code-coverage-transformer
Version:
Transform Salesforce Apex code coverage JSONs into other formats accepted by SonarQube, GitHub, GitLab, Azure, Bitbucket, etc.
72 lines (71 loc) • 2.38 kB
TypeScript
import { OpenCoverCoverageObject } from '../utils/types.js';
import { BaseHandler } from './BaseHandler.js';
/**
* Handler for generating OpenCover XML coverage reports.
*
* OpenCover is a code coverage tool for .NET, but its XML format
* is also accepted by Azure DevOps, Visual Studio, and other tools.
*
* **Format Origin**: OpenCover (.NET coverage tool)
*
* @see https://github.com/OpenCover/opencover
* @see https://github.com/OpenCover/opencover/wiki/Reports
*
* **Apex-Specific Adaptations**:
* - Salesforce Apex only provides line-level coverage data
* - Each Apex class is represented as an OpenCover "Module"
* - Line coverage is mapped to "SequencePoints" (executable code locations)
* - Branch coverage is always 0 (Apex doesn't provide branch/decision coverage)
* - Column information (`@sc`, `@ec`) defaults to 0 (not available in Apex)
*
* **Limitations**:
* - No branch/decision coverage - OpenCover supports this, Apex does not
* - No method-level coverage granularity - treating entire class as one method
* - No cyclomatic complexity metrics
* - No column-level positioning data
*
* **Structure Mapping**:
* - Apex Class → OpenCover Module/Class
* - Apex Class → OpenCover Method (single method per class)
* - Apex Lines → OpenCover SequencePoints
*
* Compatible with:
* - Azure DevOps
* - Visual Studio
* - Codecov
* - JetBrains tools (ReSharper, Rider)
*
* @example
* ```xml
* <CoverageSession>
* <Summary numSequencePoints="100" visitedSequencePoints="75" />
* <Modules>
* <Module>
* <Files>
* <File uid="1" fullPath="path/to/file.cls" />
* </Files>
* <Classes>
* <Class fullName="ClassName">
* <Methods>
* <Method name="MethodName">
* <SequencePoints>
* <SequencePoint vc="1" sl="1" />
* </SequencePoints>
* </Method>
* </Methods>
* </Class>
* </Classes>
* </Module>
* </Modules>
* </CoverageSession>
* ```
*/
export declare class OpenCoverCoverageHandler extends BaseHandler {
private readonly coverageObj;
private readonly module;
private fileIdCounter;
private filePathToId;
constructor();
processFile(filePath: string, fileName: string, lines: Record<string, number>): void;
finalize(): OpenCoverCoverageObject;
}