Skip to content

Commit 2cb325c

Browse files
committed
feat: improve performance combining coverage on large codebases
1 parent d066085 commit 2cb325c

File tree

1 file changed

+11
-15
lines changed

1 file changed

+11
-15
lines changed

task.js

+11-15
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ const {
1212
includeAllFiles
1313
} = require('./task-utils')
1414
const { fixSourcePaths } = require('./support-utils')
15-
const { removePlaceholders } = require('./common-utils')
1615

1716
const debug = require('debug')('code-coverage')
17+
require('debug').enable('code-coverage')
1818

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

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

62+
let coverageMap = (() => {
63+
const previousCoverage = existsSync(nycFilename)
64+
? JSON.parse(readFileSync(nycFilename, 'utf8'))
65+
: {}
66+
return istanbul.createCoverageMap(previousCoverage)
67+
})()
68+
6269
function saveCoverage(coverage) {
6370
if (!existsSync(nycReportOptions.tempDir)) {
6471
mkdirSync(nycReportOptions.tempDir, { recursive: true })
@@ -122,7 +129,7 @@ const tasks = {
122129
resetCoverage({ isInteractive }) {
123130
if (isInteractive) {
124131
debug('reset code coverage in interactive mode')
125-
const coverageMap = istanbul.createCoverageMap({})
132+
coverageMap = istanbul.createCoverageMap({})
126133
saveCoverage(coverageMap)
127134
}
128135
/*
@@ -148,21 +155,9 @@ const tasks = {
148155

149156
fixSourcePaths(coverage)
150157

151-
const previousCoverage = existsSync(nycFilename)
152-
? JSON.parse(readFileSync(nycFilename, 'utf8'))
153-
: {}
154-
155-
// previous code coverage object might have placeholder entries
156-
// for files that we have not seen yet,
157-
// but the user expects to include in the coverage report
158-
// the merge function messes up, so we should remove any placeholder entries
159-
// and re-insert them again when creating the report
160-
removePlaceholders(previousCoverage)
158+
console.log(coverageMap.toJSON())
161159

162-
const coverageMap = istanbul.createCoverageMap(previousCoverage)
163160
coverageMap.merge(coverage)
164-
saveCoverage(coverageMap)
165-
debug('wrote coverage file %s', nycFilename)
166161

167162
return null
168163
},
@@ -172,6 +167,7 @@ const tasks = {
172167
* NPM script to generate HTML report
173168
*/
174169
coverageReport() {
170+
saveCoverage(coverageMap)
175171
if (!existsSync(nycFilename)) {
176172
console.warn('Cannot find coverage file %s', nycFilename)
177173
console.warn('Skipping coverage report')

0 commit comments

Comments
 (0)