UNPKG

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
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; }