Skip to content

Commit bf696bb

Browse files
fix: improve performance combining coverage on large codebases (#753)
Co-authored-by: Jennifer Shehane <[email protected]>
1 parent e18f4ec commit bf696bb

File tree

1 file changed

+9
-16
lines changed

1 file changed

+9
-16
lines changed

task.js

+9-16
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ 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')
1817

@@ -59,6 +58,13 @@ const nycReportOptions = (function getNycOption() {
5958

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

61+
let coverageMap = (() => {
62+
const previousCoverage = existsSync(nycFilename)
63+
? JSON.parse(readFileSync(nycFilename, 'utf8'))
64+
: {}
65+
return istanbul.createCoverageMap(previousCoverage)
66+
})()
67+
6268
function saveCoverage(coverage) {
6369
if (!existsSync(nycReportOptions.tempDir)) {
6470
mkdirSync(nycReportOptions.tempDir, { recursive: true })
@@ -122,7 +128,7 @@ const tasks = {
122128
resetCoverage({ isInteractive }) {
123129
if (isInteractive) {
124130
debug('reset code coverage in interactive mode')
125-
const coverageMap = istanbul.createCoverageMap({})
131+
coverageMap = istanbul.createCoverageMap({})
126132
saveCoverage(coverageMap)
127133
}
128134
/*
@@ -148,21 +154,7 @@ const tasks = {
148154

149155
fixSourcePaths(coverage)
150156

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)
161-
162-
const coverageMap = istanbul.createCoverageMap(previousCoverage)
163157
coverageMap.merge(coverage)
164-
saveCoverage(coverageMap)
165-
debug('wrote coverage file %s', nycFilename)
166158

167159
return null
168160
},
@@ -172,6 +164,7 @@ const tasks = {
172164
* NPM script to generate HTML report
173165
*/
174166
coverageReport() {
167+
saveCoverage(coverageMap)
175168
if (!existsSync(nycFilename)) {
176169
console.warn('Cannot find coverage file %s', nycFilename)
177170
console.warn('Skipping coverage report')

0 commit comments

Comments
 (0)