Skip to content

Commit a686968

Browse files
committed
refactor: begin using class syntax where appropriate
1 parent d93227f commit a686968

File tree

2 files changed

+105
-120
lines changed

2 files changed

+105
-120
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ npm-debug.log
55
package-lock.json
66
/.idea
77
.eslintcache
8+
/lcov.info

index.js

Lines changed: 104 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -11,132 +11,123 @@ const fs = require('fs');
1111
const path = require('path');
1212

1313
/**
14-
* Represents a DA record
15-
*
16-
* @param {number} lineNumber
17-
* @param {number} hits
18-
*
19-
* @constructor
14+
* Represents a "DA" entry, which records the hit count of
15+
* a line of code.
2016
*/
21-
function DA(lineNumber, hits) {
22-
this.lineNumber = lineNumber;
23-
this.hits = hits;
24-
}
17+
class DA {
18+
/**
19+
* @param {number} lineNumber
20+
* @param {number} hits
21+
*/
22+
constructor(lineNumber, hits) {
23+
this.lineNumber = lineNumber;
24+
this.hits = hits;
25+
}
2526

26-
/**
27-
* Generates a DA string
28-
*
29-
* @returns {string}
30-
*/
31-
DA.prototype.toString = function () {
32-
return 'DA:' + this.lineNumber + ',' + this.hits + '\n';
33-
};
27+
/**
28+
* @param {number} hits
29+
*/
30+
addHits(hits) {
31+
this.hits += hits;
32+
}
3433

35-
/**
36-
* Represents a BRDA record
37-
*
38-
* @param {number} lineNumber
39-
* @param {number} blockNumber
40-
* @param {number} branchNumber
41-
* @param {number} hits
42-
*
43-
* @constructor
44-
*/
45-
function BRDA(lineNumber, blockNumber, branchNumber, hits) {
46-
this.lineNumber = lineNumber;
47-
this.blockNumber = blockNumber;
48-
this.branchNumber = branchNumber;
49-
this.hits = hits;
34+
toString() {
35+
return `DA:${this.lineNumber},${this.hits}\n`;
36+
}
5037
}
5138

5239
/**
53-
* Generates a BRDA string
54-
*
55-
* @returns {string}
40+
* Represents a BRDA entry, which records the hit count
41+
* of a logical branch in code.
5642
*/
57-
BRDA.prototype.toString = function () {
58-
let str = 'BRDA:';
59-
str += [this.lineNumber, this.blockNumber, this.branchNumber, this.hits].join(
60-
','
61-
);
62-
str += '\n';
63-
64-
return str;
65-
};
43+
class BRDA {
44+
/**
45+
* @param {number} lineNumber
46+
* @param {number} blockNumber
47+
* @param {number} branchNumber
48+
* @param {number} hits
49+
*/
50+
constructor(lineNumber, blockNumber, branchNumber, hits) {
51+
this.lineNumber = lineNumber;
52+
this.blockNumber = blockNumber;
53+
this.branchNumber = branchNumber;
54+
this.hits = hits;
55+
}
6656

67-
/**
68-
* Represents a coverage file, and it's DA/BRDA records
69-
*
70-
* @param {string} filename
71-
*
72-
* @constructor
73-
*/
74-
function CoverageFile(filename) {
75-
this.filename = filename;
76-
this.DARecords = [];
77-
this.BRDARecords = [];
57+
toString() {
58+
const { lineNumber, blockNumber, branchNumber, hits } = this;
59+
return `BRDA:${lineNumber},${blockNumber},${branchNumber},${hits}\n`;
60+
}
7861
}
7962

8063
/**
81-
* Generates a coverage report for a file.
82-
*
83-
* @returns {string}
64+
* Represents a coverage file, and it's DA/BRDA records.
8465
*/
85-
CoverageFile.prototype.toString = function () {
86-
const header = 'SF:' + this.filename + '\n';
87-
const footer = 'end_of_record\n';
66+
class CoverageFile {
67+
/**
68+
* @param {string} filename
69+
*/
70+
constructor(filename) {
71+
this.filename = filename;
72+
this.DARecords = [];
73+
this.BRDARecords = [];
74+
}
8875

89-
let body = this.DARecords.map(function (daRecord) {
90-
return daRecord.toString();
91-
}).join('');
76+
/**
77+
* Finds and returns an existing DA entry via its line number.
78+
*
79+
* @param {number} lineNumber
80+
*
81+
* @returns {DA|undefined}
82+
*/
83+
findDA(lineNumber) {
84+
return this.DARecords.find((record) => record.lineNumber === lineNumber);
85+
}
9286

93-
body += this.BRDARecords.map(function (brdaRecord) {
94-
return brdaRecord.toString();
95-
}).join('');
87+
/**
88+
* Creates a new DA record, or adds the hit count to an existing
89+
* record if available.
90+
*
91+
* @param {number} lineNumber
92+
* @param {number} hits
93+
*/
94+
addDA(lineNumber, hits) {
95+
const existingRecord = this.findDA(lineNumber);
96+
97+
if (existingRecord) {
98+
existingRecord.addHits(hits);
99+
return;
100+
}
96101

97-
return header + body + footer;
98-
};
102+
this.DARecords.push(new DA(lineNumber, hits));
103+
}
99104

100-
/**
101-
* Find an existing DA record
102-
*
103-
* @param {DA[]} source
104-
* @param {number} lineNumber
105-
*
106-
* @returns {DA|null}
107-
*/
108-
function findDA(source, lineNumber) {
109-
for (let i = 0; i < source.length; i++) {
110-
const da = source[i];
111-
if (da.lineNumber === lineNumber) {
112-
return da;
113-
}
105+
/**
106+
* Finds and returns an existing BRDA entry.
107+
*
108+
* @param {number} lineNumber
109+
* @param {number} blockNumber
110+
* @param {number} branchNumber
111+
*
112+
* @returns {BRDA|undefined}
113+
*/
114+
findBRDA(lineNumber, blockNumber, branchNumber) {
115+
return this.BRDARecords.find(
116+
(record) =>
117+
record.lineNumber === lineNumber &&
118+
record.blockNumber === blockNumber &&
119+
record.branchNumber === branchNumber
120+
);
114121
}
115-
return null;
116-
}
117122

118-
/**
119-
* Find an existing BRDA record
120-
*
121-
* @param {BRDA[]} source
122-
* @param {number} blockNumber
123-
* @param {number} branchNumber
124-
* @param {number} lineNumber
125-
*
126-
* @returns {BRDA|null}
127-
*/
128-
function findBRDA(source, blockNumber, branchNumber, lineNumber) {
129-
for (let i = 0; i < source.length; i++) {
130-
const brda = source[i];
131-
if (
132-
brda.blockNumber === blockNumber &&
133-
brda.branchNumber === branchNumber &&
134-
brda.lineNumber === lineNumber
135-
) {
136-
return brda;
137-
}
123+
toString() {
124+
return (
125+
`SF:${this.filename}\n` +
126+
this.DARecords.map((record) => record.toString()).join('') +
127+
this.BRDARecords.map((record) => record.toString()).join('') +
128+
'end_of_record\n'
129+
);
138130
}
139-
return null;
140131
}
141132

142133
/**
@@ -236,13 +227,7 @@ function parseDA(currentCoverageFile, prefixSplit) {
236227
const lineNumber = parseInt(numberSplit[0], 10);
237228
const hits = parseInt(numberSplit[1], 10);
238229

239-
const existingDA = findDA(currentCoverageFile.DARecords, lineNumber);
240-
if (existingDA) {
241-
existingDA.hits += hits;
242-
return;
243-
}
244-
245-
currentCoverageFile.DARecords.push(new DA(lineNumber, hits));
230+
currentCoverageFile.addDA(lineNumber, hits);
246231
}
247232

248233
/**
@@ -257,11 +242,10 @@ function parseBRDA(currentCoverageFile, prefixSplit) {
257242
const blockNumber = parseInt(numberSplit[1], 10);
258243
const branchNumber = parseInt(numberSplit[2], 10);
259244

260-
const existingBRDA = findBRDA(
261-
currentCoverageFile.BRDARecords,
245+
const existingBRDA = currentCoverageFile.findBRDA(
246+
lineNumber,
262247
blockNumber,
263-
branchNumber,
264-
lineNumber
248+
branchNumber
265249
);
266250

267251
// Special case, hits might be a '-'. This means that the code block
@@ -370,7 +354,7 @@ module.exports = function (config) {
370354
}
371355
const fileContentStr = fs.readFileSync(filePath, {
372356
encoding: 'utf8',
373-
flag: 'r'
357+
flag: 'r',
374358
});
375359
coverageFiles = processFile(
376360
path.dirname(filePath),
@@ -383,7 +367,7 @@ module.exports = function (config) {
383367
function flush() {
384368
fs.writeFileSync('lcov.info', Buffer.from(createRecords(coverageFiles)), {
385369
encoding: 'utf-8',
386-
flag: 'w+'
370+
flag: 'w+',
387371
});
388372
this.push('lcov.info');
389373
this.emit('end');

0 commit comments

Comments
 (0)