Istanbul: esprima fails when using `--include-all-sources`

Created on 17 Mar 2016  路  5Comments  路  Source: gotwarlost/istanbul

I am invoking istanbul like so:

$ istanbul cover _mocha --include-all-sources -- -u exports --reporter spec ./test/unit/*.js 
<test output>
  108 passing (157ms)


/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:5701
            throw e;
            ^
Error: Line 78: Unexpected token <
    at constructError (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2406:21)
    at createError (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2425:17)
    at unexpectedTokenError (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2499:13)
    at throwUnexpectedToken (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2504:15)
    at parsePrimaryExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3306:13)
    at inheritCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2680:18)
    at parseLeftHandSideExpressionAllowCall (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3413:20)
    at inheritCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2680:18)
    at parsePostfixExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3489:16)
    at parseUnaryExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3549:20)
    at inheritCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2680:18)
    at parseBinaryExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3638:16)
    at inheritCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2680:18)
    at parseConditionalExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3695:16)
    at parseAssignmentExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3892:16)
    at inheritCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2680:18)
    at parseGroupExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3161:16)
    at inheritCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2680:18)
    at parsePrimaryExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3238:20)
    at inheritCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2680:18)
    at parseLeftHandSideExpressionAllowCall (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3413:20)
    at inheritCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2680:18)
    at parsePostfixExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3489:16)
    at parseUnaryExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3549:20)
    at inheritCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2680:18)
    at parseBinaryExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3638:16)
    at inheritCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2680:18)
    at parseConditionalExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3695:16)
    at parseAssignmentExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3892:16)
    at isolateCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2662:18)
    at parseArguments (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3326:28)
    at parseLeftHandSideExpressionAllowCall (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3425:24)
    at inheritCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2680:18)
    at parsePostfixExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3489:16)
    at parseUnaryExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3518:20)
    at inheritCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2680:18)
    at parseBinaryExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3638:16)
    at inheritCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2680:18)
    at parseConditionalExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3695:16)
    at parseAssignmentExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3892:16)
    at isolateCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2662:18)
    at parseVariableDeclaration (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:4055:20)
    at parseVariableDeclarationList (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:4067:17)
    at parseVariableStatement (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:4082:24)
    at parseStatement (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:4788:24)
    at parseStatementListItem (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3988:16)
    at parseFunctionSourceElements (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:4868:23)
    at parseFunctionExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:5073:16)
    at parsePrimaryExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3272:24)
    at inheritCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2680:18)
    at parseLeftHandSideExpressionAllowCall (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3413:20)
    at inheritCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2680:18)
    at parsePostfixExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3489:16)
    at parseUnaryExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3549:20)
    at inheritCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2680:18)
    at parseBinaryExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3638:16)
    at inheritCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2680:18)
    at parseConditionalExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3695:16)
    at parseAssignmentExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3892:16)
    at inheritCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2680:18)
    at parseGroupExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3161:16)
    at inheritCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2680:18)
    at parsePrimaryExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3238:20)
    at inheritCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2680:18)
    at parseLeftHandSideExpressionAllowCall (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3413:20)
    at inheritCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2680:18)
    at parsePostfixExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3489:16)
    at parseUnaryExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3549:20)
    at inheritCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2680:18)
    at parseBinaryExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3638:16)
    at inheritCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2680:18)
    at parseConditionalExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3695:16)
    at parseAssignmentExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3892:16)
    at isolateCoverGrammar (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:2662:18)
    at parseExpression (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3941:16)
    at parseExpressionStatement (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:4221:20)
    at parseStatement (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:4759:24)
    at parseStatementListItem (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:3988:16)
    at parseScriptBody (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:5489:25)
    at parseProgram (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:5505:16)
    at Object.parse (/usr/lib/node_modules/istanbul/node_modules/esprima/esprima.js:5689:23)
    at Object.Instrumenter.instrumentSync (/usr/lib/node_modules/istanbul/lib/instrumenter.js:451:27)
    at /usr/lib/node_modules/istanbul/lib/command/common/run-with-cover.js:224:33
    at Array.forEach (native)
    at process.<anonymous> (/usr/lib/node_modules/istanbul/lib/command/common/run-with-cover.js:222:39)
    at process.g (events.js:273:16)
    at emitOne (events.js:90:13)
    at process.emit (events.js:182:7)
    at process.exit (node.js:782:17)
    at done (/usr/lib/node_modules/mocha/bin/_mocha:416:32)
    at afterWrite (_stream_writable.js:346:3)
    at nextTickCallbackWithManyArgs (node.js:496:18)
    at process._tickCallback (node.js:394:17)

istanbul version:0.4.2, installed using npm.

Most helpful comment

Yep. I just had the same issue and I am going to support the OP on this. It would be useful if the output referenced the offending file.

All 5 comments

It _looks_ like istanbul is trying to load a file that does not conform to ES5 syntax (e.g. a file that has html tags that can be processed using a JSX parser, for example, but not by esprima). Try the verbose option to see if you can find the offending file.

@gotwarlost I think this was the case, there was a file with HTML embedded inside of it. I don't understand, however, why this issue was closed. If this is a case that can be detected (which you have shown by looking at the stack trace, I believe), there should at the very least be a helpful error message that says so. This would be most helpful if the program could also declare which file it had issues parsing. Even better would be a further flag that could be used by the program to ignore files with malformed syntax -- otherwise, in my case where some front-end code has embedded HTML, how do I specify that I want to include all sources except for those?

And, for the record, Error: Line 78: Unexpected token < accompanied by 100 lines of stack trace is not really helpful.

Yep. I just had the same issue and I am going to support the OP on this. It would be useful if the output referenced the offending file.

I'm having this error: Error: Line 20: Unexpected identifier

Can expose the file in the error?

Was this page helpful?
0 / 5 - 0 ratings