Skip to content

Commit

Permalink
feat: improve performance combining coverage on large codebases
Browse files Browse the repository at this point in the history
  • Loading branch information
koenvangeert committed Dec 7, 2023
1 parent d066085 commit 2cb325c
Showing 1 changed file with 11 additions and 15 deletions.
26 changes: 11 additions & 15 deletions task.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ const {
includeAllFiles
} = require('./task-utils')
const { fixSourcePaths } = require('./support-utils')
const { removePlaceholders } = require('./common-utils')

const debug = require('debug')('code-coverage')
require('debug').enable('code-coverage')

// these are standard folder and file names used by NYC tools
const processWorkingDirectory = process.cwd()
Expand Down Expand Up @@ -59,6 +59,13 @@ const nycReportOptions = (function getNycOption() {

const nycFilename = join(nycReportOptions['temp-dir'], 'out.json')

let coverageMap = (() => {
const previousCoverage = existsSync(nycFilename)
? JSON.parse(readFileSync(nycFilename, 'utf8'))
: {}
return istanbul.createCoverageMap(previousCoverage)
})()

function saveCoverage(coverage) {
if (!existsSync(nycReportOptions.tempDir)) {
mkdirSync(nycReportOptions.tempDir, { recursive: true })
Expand Down Expand Up @@ -122,7 +129,7 @@ const tasks = {
resetCoverage({ isInteractive }) {
if (isInteractive) {
debug('reset code coverage in interactive mode')
const coverageMap = istanbul.createCoverageMap({})
coverageMap = istanbul.createCoverageMap({})
saveCoverage(coverageMap)
}
/*
Expand All @@ -148,21 +155,9 @@ const tasks = {

fixSourcePaths(coverage)

const previousCoverage = existsSync(nycFilename)
? JSON.parse(readFileSync(nycFilename, 'utf8'))
: {}

// previous code coverage object might have placeholder entries
// for files that we have not seen yet,
// but the user expects to include in the coverage report
// the merge function messes up, so we should remove any placeholder entries
// and re-insert them again when creating the report
removePlaceholders(previousCoverage)
console.log(coverageMap.toJSON())

const coverageMap = istanbul.createCoverageMap(previousCoverage)
coverageMap.merge(coverage)
saveCoverage(coverageMap)
debug('wrote coverage file %s', nycFilename)

return null
},
Expand All @@ -172,6 +167,7 @@ const tasks = {
* NPM script to generate HTML report
*/
coverageReport() {
saveCoverage(coverageMap)
if (!existsSync(nycFilename)) {
console.warn('Cannot find coverage file %s', nycFilename)
console.warn('Skipping coverage report')
Expand Down

0 comments on commit 2cb325c

Please sign in to comment.