gotwarlost / istanbul

Yet another JS code coverage tool that computes statement, line, function and branch coverage with module loader hooks to transparently add coverage when running tests. Supports all JS coverage use cases including unit tests, server side functional tests and browser tests. Built for scale.
Other
8.7k stars 787 forks source link

Failed to parse file with exponentiation operator #859

Open MacMcIrish opened 6 years ago

MacMcIrish commented 6 years ago

Issue Istanbul cannot parse files that contain the exponentiation operator.

Context Node: v9.2.1 Mocha: 4.1.0 Istanbul: 0.4.5

Minimal Example, istanbulTest.js

const example = 3 ** 5;
module.exports = c;

Log (personal information trimmed):

Failed to parse file: .../istanbulTest.js

.../node_modules/istanbul/lib/instrumenter.js:468
                throw e;
                ^
Error: Line 1: Unexpected token *
    at constructError (.../node_modules/istanbul/node_modules/esprima/esprima.js:2407:21)
    at createError (.../node_modules/istanbul/node_modules/esprima/esprima.js:2426:17)
    at unexpectedTokenError (.../node_modules/istanbul/node_modules/esprima/esprima.js:2500:13)
    at throwUnexpectedToken (.../node_modules/istanbul/node_modules/esprima/esprima.js:2505:15)
    at parsePrimaryExpression (.../node_modules/istanbul/node_modules/esprima/esprima.js:3307:13)
    at inheritCoverGrammar (.../node_modules/istanbul/node_modules/esprima/esprima.js:2681:18)
    at parseLeftHandSideExpressionAllowCall (.../node_modules/istanbul/node_modules/esprima/esprima.js:3414:20)
    at inheritCoverGrammar (.../node_modules/istanbul/node_modules/esprima/esprima.js:2681:18)
    at parsePostfixExpression (.../node_modules/istanbul/node_modules/esprima/esprima.js:3490:16)
    at parseUnaryExpression (.../node_modules/istanbul/node_modules/esprima/esprima.js:3550:20)
    at isolateCoverGrammar (.../node_modules/istanbul/node_modules/esprima/esprima.js:2663:18)
    at parseBinaryExpression (.../node_modules/istanbul/node_modules/esprima/esprima.js:3651:17)
    at inheritCoverGrammar (.../node_modules/istanbul/node_modules/esprima/esprima.js:2681:18)
    at parseConditionalExpression (.../node_modules/istanbul/node_modules/esprima/esprima.js:3696:16)
    at parseAssignmentExpression (.../node_modules/istanbul/node_modules/esprima/esprima.js:3893:16)
    at isolateCoverGrammar (.../node_modules/istanbul/node_modules/esprima/esprima.js:2663:18)
    at parseLexicalBinding (.../node_modules/istanbul/node_modules/esprima/esprima.js:4105:24)
    at parseBindingList (.../node_modules/istanbul/node_modules/esprima/esprima.js:4116:21)
    at parseLexicalDeclaration (.../node_modules/istanbul/node_modules/esprima/esprima.js:4181:24)
    at parseStatementListItem (.../node_modules/istanbul/node_modules/esprima/esprima.js:3977:24)
    at parseFunctionSourceElements (.../node_modules/istanbul/node_modules/esprima/esprima.js:4869:23)
    at parseFunctionExpression (.../node_modules/istanbul/node_modules/esprima/esprima.js:5074:16)
    at parsePrimaryExpression (.../node_modules/istanbul/node_modules/esprima/esprima.js:3273:24)
    at inheritCoverGrammar (.../node_modules/istanbul/node_modules/esprima/esprima.js:2681:18)
    at parseLeftHandSideExpressionAllowCall (.../node_modules/istanbul/node_modules/esprima/esprima.js:3414:20)
    at inheritCoverGrammar (.../node_modules/istanbul/node_modules/esprima/esprima.js:2681:18)
    at parsePostfixExpression (.../node_modules/istanbul/node_modules/esprima/esprima.js:3490:16)
    at parseUnaryExpression (.../node_modules/istanbul/node_modules/esprima/esprima.js:3550:20)
    at inheritCoverGrammar (.../node_modules/istanbul/node_modules/esprima/esprima.js:2681:18)
    at parseBinaryExpression (.../node_modules/istanbul/node_modules/esprima/esprima.js:3639:16)
    at inheritCoverGrammar (.../node_modules/istanbul/node_modules/esprima/esprima.js:2681:18)
    at parseConditionalExpression (.../node_modules/istanbul/node_modules/esprima/esprima.js:3696:16)
    at parseAssignmentExpression (.../node_modules/istanbul/node_modules/esprima/esprima.js:3893:16)
    at inheritCoverGrammar (.../node_modules/istanbul/node_modules/esprima/esprima.js:2681:18)
    at parseGroupExpression (.../node_modules/istanbul/node_modules/esprima/esprima.js:3162:16)
    at inheritCoverGrammar (.../node_modules/istanbul/node_modules/esprima/esprima.js:2681:18)
    at parsePrimaryExpression (.../node_modules/istanbul/node_modules/esprima/esprima.js:3239:20)
    at inheritCoverGrammar (.../node_modules/istanbul/node_modules/esprima/esprima.js:2681:18)
    at parseLeftHandSideExpressionAllowCall (.../node_modules/istanbul/node_modules/esprima/esprima.js:3414:20)
    at inheritCoverGrammar (.../node_modules/istanbul/node_modules/esprima/esprima.js:2681:18)
    at parsePostfixExpression (.../node_modules/istanbul/node_modules/esprima/esprima.js:3490:16)
    at parseUnaryExpression (.../node_modules/istanbul/node_modules/esprima/esprima.js:3550:20)
    at inheritCoverGrammar (.../node_modules/istanbul/node_modules/esprima/esprima.js:2681:18)
    at parseBinaryExpression (.../node_modules/istanbul/node_modules/esprima/esprima.js:3639:16)
    at inheritCoverGrammar (.../node_modules/istanbul/node_modules/esprima/esprima.js:2681:18)
    at parseConditionalExpression (.../node_modules/istanbul/node_modules/esprima/esprima.js:3696:16)
    at parseAssignmentExpression (.../node_modules/istanbul/node_modules/esprima/esprima.js:3893:16)
    at isolateCoverGrammar (.../node_modules/istanbul/node_modules/esprima/esprima.js:2663:18)
    at parseExpression (.../node_modules/istanbul/node_modules/esprima/esprima.js:3942:16)
    at parseExpressionStatement (.../node_modules/istanbul/node_modules/esprima/esprima.js:4222:20)
    at parseStatement (.../node_modules/istanbul/node_modules/esprima/esprima.js:4760:24)
    at parseStatementListItem (.../node_modules/istanbul/node_modules/esprima/esprima.js:3989:16)
    at parseScriptBody (.../node_modules/istanbul/node_modules/esprima/esprima.js:5490:25)
    at parseProgram (.../node_modules/istanbul/node_modules/esprima/esprima.js:5506:16)
    at Object.parse (.../node_modules/istanbul/node_modules/esprima/esprima.js:5690:23)
    at Instrumenter.instrumentSync (.../node_modules/istanbul/lib/instrumenter.js:459:31)
    at .../node_modules/istanbul/lib/command/common/run-with-cover.js:224:33
    at Array.forEach (<anonymous>)
    at process.<anonymous> (.../node_modules/istanbul/lib/command/common/run-with-cover.js:222:39)
    at Object.onceWrapper (events.js:254:19)
    at process.emit (events.js:164:20)