diff --git a/packages/istanbul-reports/lib/html/annotator.js b/packages/istanbul-reports/lib/html/annotator.js
index be8a4534..84d8fc39 100644
--- a/packages/istanbul-reports/lib/html/annotator.js
+++ b/packages/istanbul-reports/lib/html/annotator.js
@@ -164,6 +164,22 @@ function annotateBranches(fileCoverage, structuredText) {
gt;
closeSpan = lt + '/span' + gt;
+ // If the branch is an implicit else from an if statement,
+ // then the coverage report won't show a statistic.
+ // Therefore, the previous branch will be used to report that
+ // there is no coverage on that implicit branch.
+ if (
+ count === 0 &&
+ startLine === undefined &&
+ branchMeta[branchName].type === 'if'
+ ) {
+ const prevMeta = metaArray[i - 1];
+ startCol = prevMeta.start.column;
+ endCol = prevMeta.end.column + 1;
+ startLine = prevMeta.start.line;
+ endLine = prevMeta.end.line;
+ }
+
if (count === 0 && structuredText[startLine]) {
//skip branches taken
if (endLine !== startLine) {
diff --git a/packages/istanbul-reports/test/fixtures/github-649.json b/packages/istanbul-reports/test/fixtures/github-649.json
new file mode 100644
index 00000000..078b36fa
--- /dev/null
+++ b/packages/istanbul-reports/test/fixtures/github-649.json
@@ -0,0 +1,127 @@
+{
+ "path": "/Users/benjamincoe/bcoe/istanbul-lib-instrument/src/index.js",
+ "statementMap": {
+ "0": {
+ "start": {
+ "line": 1,
+ "column": 0
+ },
+ "end": {
+ "line": 9,
+ "column": 2
+ }
+ },
+ "1": {
+ "start": {
+ "line": 2,
+ "column": 10
+ },
+ "end": {
+ "line": 2,
+ "column": 11
+ }
+ },
+ "2": {
+ "start": {
+ "line": 4,
+ "column": 4
+ },
+ "end": {
+ "line": 6,
+ "column": 5
+ }
+ },
+ "3": {
+ "start": {
+ "line": 5,
+ "column": 6
+ },
+ "end": {
+ "line": 5,
+ "column": 12
+ }
+ },
+ "4": {
+ "start": {
+ "line": 8,
+ "column": 4
+ },
+ "end": {
+ "line": 8,
+ "column": 13
+ }
+ }
+ },
+ "fnMap": {
+ "0": {
+ "name": "(anonymous_0)",
+ "decl": {
+ "start": {
+ "line": 1,
+ "column": 16
+ },
+ "end": {
+ "line": 1,
+ "column": 17
+ }
+ },
+ "loc": {
+ "start": {
+ "line": 1,
+ "column": 28
+ },
+ "end": {
+ "line": 9,
+ "column": 1
+ }
+ },
+ "line": 1
+ }
+ },
+ "branchMap": {
+ "0": {
+ "loc": {
+ "start": {
+ "line": 4,
+ "column": 4
+ },
+ "end": {
+ "line": 6,
+ "column": 5
+ }
+ },
+ "type": "if",
+ "locations": [{
+ "start": {
+ "line": 4,
+ "column": 4
+ },
+ "end": {
+ "line": 6,
+ "column": 5
+ }
+ }, {
+ "start": {
+ },
+ "end": {
+ }
+ }
+ ],
+ "line": 4
+ }
+ },
+ "s": {
+ "0": 1,
+ "1": 1,
+ "2": 1,
+ "3": 1,
+ "4": 1
+ },
+ "f": {
+ "0": 1
+ },
+ "b": {
+ "0": [1, 0]
+ },
+ "hash": "edc1f904dd2d4c7214941451a07aabfc0aee6ec0"
+}
diff --git a/packages/istanbul-reports/test/html/annotator.js b/packages/istanbul-reports/test/html/annotator.js
index 78cc5331..b55b072b 100644
--- a/packages/istanbul-reports/test/html/annotator.js
+++ b/packages/istanbul-reports/test/html/annotator.js
@@ -81,5 +81,25 @@ describe('annotator', () => {
' function test () {};'
);
});
+
+ // see: https://github.com/istanbuljs/istanbuljs/issues/649
+ it('handles implicit else branches', () => {
+ const annotated = annotator(getFixture('github-649'), {
+ getSource() {
+ return `exports.testy = function () {
+ let a = 0;
+
+ if (!a) {
+ a = 3;
+ }
+
+ return a;
+ };`;
+ }
+ });
+ annotated.annotatedCode[3].should.equal(
+ ' E if (!a) {'
+ );
+ });
});
});