UNPKG

72 kBJSONView Raw
1{"src/meta.js":{"source":"\nexport default function meta(state, value) {\n if (arguments.length > 1) {\n state.file.metadata.coverage = value;\n }\n return state.file.metadata.coverage;\n}\n","path":"src/meta.js","locations":[{"id":0,"loc":{"start":{"line":2,"column":15},"end":{"line":7,"column":1}},"tags":["function"],"name":"meta","count":329},{"id":1,"loc":{"start":{"line":3,"column":28},"end":{"line":5,"column":3}},"tags":["branch","line","if"],"group":"3:2","count":35},{"id":2,"loc":{"start":{"line":5,"column":3},"end":{"line":5,"column":3}},"tags":["branch","if"],"group":"3:2","count":294},{"id":3,"loc":{"start":{"line":4,"column":4},"end":{"line":4,"column":41}},"tags":["statement","line"],"count":35},{"id":4,"loc":{"start":{"line":6,"column":9},"end":{"line":6,"column":37}},"tags":["line","statement"],"count":329}]},"src/prelude.js":{"source":"/* global __dirname */\n\nimport {readFileSync} from 'fs';\nimport path from 'path';\nimport template from '@babel/template';\nimport astify from 'babel-literal-to-ast';\nimport meta from './meta';\n\nconst render = template(readFileSync(\n path.join(__dirname, '..', 'share', 'prelude.js'), 'utf8'\n));\n\nexport default function prelude(state) {\n const coverage = meta(state);\n const name = state.filename;\n const global = (state.opts && state.opts.global) || '__coverage__';\n return render({\n GLOBAL: astify(global),\n SOURCE: astify(coverage.source),\n VARIABLE: coverage.variable,\n FILE: astify(name),\n LOCATIONS: astify(coverage.entries),\n });\n}\n","path":"src/prelude.js","locations":[{"id":0,"loc":{"start":{"line":9,"column":15},"end":{"line":11,"column":2}},"tags":["statement","variable","line"],"count":1},{"id":1,"loc":{"start":{"line":13,"column":15},"end":{"line":24,"column":1}},"tags":["function"],"name":"prelude","count":35},{"id":2,"loc":{"start":{"line":14,"column":19},"end":{"line":14,"column":30}},"tags":["statement","variable","line"],"count":35},{"id":3,"loc":{"start":{"line":15,"column":15},"end":{"line":15,"column":29}},"tags":["statement","variable","line"],"count":35},{"id":4,"loc":{"start":{"line":16,"column":17},"end":{"line":16,"column":68}},"tags":["statement","variable","line"],"count":35},{"id":5,"loc":{"start":{"line":16,"column":18},"end":{"line":16,"column":49}},"tags":["branch","logic"],"group":"16:17","count":35},{"id":6,"loc":{"start":{"line":16,"column":54},"end":{"line":16,"column":68}},"tags":["branch","logic"],"group":"16:17","count":0},{"id":7,"loc":{"start":{"line":16,"column":18},"end":{"line":16,"column":28}},"tags":["branch","logic"],"group":"16:18","count":0},{"id":8,"loc":{"start":{"line":16,"column":32},"end":{"line":16,"column":49}},"tags":["branch","logic"],"group":"16:18","count":35},{"id":9,"loc":{"start":{"line":17,"column":9},"end":{"line":23,"column":4}},"tags":["line","statement"],"count":35},{"id":10,"loc":{"start":{"line":18,"column":12},"end":{"line":18,"column":26}},"tags":["line"],"count":35},{"id":11,"loc":{"start":{"line":19,"column":12},"end":{"line":19,"column":35}},"tags":["line"],"count":35},{"id":12,"loc":{"start":{"line":20,"column":14},"end":{"line":20,"column":31}},"tags":["line"],"count":35},{"id":13,"loc":{"start":{"line":21,"column":10},"end":{"line":21,"column":22}},"tags":["line"],"count":35},{"id":14,"loc":{"start":{"line":22,"column":15},"end":{"line":22,"column":39}},"tags":["line"],"count":35}]},"src/tags.js":{"source":"import meta from './meta';\n\nconst COMMENT_PATTERN = /^\\s*@?(adana|coverage|test|istanbul):?\\s*(.*)\\s*/;\n\nfunction within(a, b) {\n return a.start.line >= b.start.line &&\n a.start.column >= b.start.column &&\n a.end.line <= b.end.line &&\n a.end.column <= b.end.column;\n}\n\nexport function applyRules(state) {\n const coverage = meta(state);\n coverage.entries.forEach((entry) => {\n const result = { };\n const output = [];\n entry.tags.forEach((tag) => {\n result[tag] = true;\n });\n coverage.rules.forEach((rule) => {\n if (within(rule.loc, entry.loc)) {\n result[rule.tag] = rule.value;\n }\n });\n Object.keys(result).forEach((tag) => {\n const value = result[tag];\n if (value) {\n output.push(tag);\n }\n });\n entry.tags = output;\n });\n}\n\nexport function extract(comment) {\n const output = { };\n const result = COMMENT_PATTERN.exec(comment);\n if (result) {\n const entries = result[2].split(/\\s+/);\n entries.forEach((entry) => {\n switch (entry.charAt(0)) {\n case '+':\n output[entry.substr(1)] = true;\n break;\n case '-':\n output[entry.substr(1)] = false;\n break;\n default:\n break;\n }\n });\n }\n return output;\n}\n\nexport function addRules(state, loc, comments) {\n if (comments) {\n const coverage = meta(state);\n comments.forEach((comment) => {\n const values = extract(comment.value);\n Object.keys(values).forEach((tag) => {\n coverage.rules.push({\n tag,\n value: values[tag],\n loc,\n });\n });\n });\n }\n}\n","path":"src/tags.js","locations":[{"id":0,"loc":{"start":{"line":3,"column":24},"end":{"line":3,"column":74}},"tags":["statement","variable","line"],"count":1},{"id":1,"loc":{"start":{"line":5,"column":0},"end":{"line":10,"column":1}},"tags":["function"],"name":"within","count":280},{"id":2,"loc":{"start":{"line":6,"column":9},"end":{"line":9,"column":32}},"tags":["line","statement"],"count":280},{"id":3,"loc":{"start":{"line":6,"column":9},"end":{"line":8,"column":28}},"tags":["branch","logic"],"group":"6:9","count":16},{"id":4,"loc":{"start":{"line":9,"column":4},"end":{"line":9,"column":32}},"tags":["branch","logic"],"group":"6:9","count":264},{"id":5,"loc":{"start":{"line":6,"column":9},"end":{"line":7,"column":36}},"tags":["branch","logic"],"group":"6:9","count":17},{"id":6,"loc":{"start":{"line":8,"column":4},"end":{"line":8,"column":28}},"tags":["branch","logic"],"group":"6:9","count":263},{"id":7,"loc":{"start":{"line":6,"column":9},"end":{"line":6,"column":37}},"tags":["branch","logic"],"group":"6:9","count":73},{"id":8,"loc":{"start":{"line":7,"column":4},"end":{"line":7,"column":36}},"tags":["branch","logic"],"group":"6:9","count":207},{"id":9,"loc":{"start":{"line":12,"column":7},"end":{"line":33,"column":1}},"tags":["function"],"name":"applyRules","count":35},{"id":10,"loc":{"start":{"line":13,"column":19},"end":{"line":13,"column":30}},"tags":["statement","variable","line"],"count":35},{"id":11,"loc":{"start":{"line":14,"column":2},"end":{"line":32,"column":5}},"tags":["statement","line"],"count":35},{"id":12,"loc":{"start":{"line":14,"column":27},"end":{"line":32,"column":3}},"tags":["function"],"name":"@14:27","count":210},{"id":13,"loc":{"start":{"line":15,"column":19},"end":{"line":15,"column":22}},"tags":["statement","variable","line"],"count":210},{"id":14,"loc":{"start":{"line":16,"column":19},"end":{"line":16,"column":21}},"tags":["statement","variable","line"],"count":210},{"id":15,"loc":{"start":{"line":17,"column":4},"end":{"line":19,"column":7}},"tags":["statement","line"],"count":210},{"id":16,"loc":{"start":{"line":17,"column":23},"end":{"line":19,"column":5}},"tags":["function"],"name":"@17:23","count":460},{"id":17,"loc":{"start":{"line":18,"column":6},"end":{"line":18,"column":25}},"tags":["statement","line"],"count":460},{"id":18,"loc":{"start":{"line":20,"column":4},"end":{"line":24,"column":7}},"tags":["statement","line"],"count":210},{"id":19,"loc":{"start":{"line":20,"column":27},"end":{"line":24,"column":5}},"tags":["function"],"name":"@20:27","count":280},{"id":20,"loc":{"start":{"line":21,"column":39},"end":{"line":23,"column":7}},"tags":["branch","line","if"],"group":"21:6","count":16},{"id":21,"loc":{"start":{"line":23,"column":7},"end":{"line":23,"column":7}},"tags":["branch","if"],"group":"21:6","count":264},{"id":22,"loc":{"start":{"line":22,"column":8},"end":{"line":22,"column":38}},"tags":["statement","line"],"count":16},{"id":23,"loc":{"start":{"line":25,"column":4},"end":{"line":30,"column":7}},"tags":["statement","line"],"count":210},{"id":24,"loc":{"start":{"line":25,"column":32},"end":{"line":30,"column":5}},"tags":["function"],"name":"@25:32","count":474},{"id":25,"loc":{"start":{"line":26,"column":20},"end":{"line":26,"column":31}},"tags":["statement","variable","line"],"count":474},{"id":26,"loc":{"start":{"line":27,"column":17},"end":{"line":29,"column":7}},"tags":["branch","line","if"],"group":"27:6","count":474},{"id":27,"loc":{"start":{"line":29,"column":7},"end":{"line":29,"column":7}},"tags":["branch","if"],"group":"27:6","count":0},{"id":28,"loc":{"start":{"line":28,"column":8},"end":{"line":28,"column":25}},"tags":["statement","line"],"count":474},{"id":29,"loc":{"start":{"line":31,"column":4},"end":{"line":31,"column":24}},"tags":["statement","line"],"count":210},{"id":30,"loc":{"start":{"line":35,"column":7},"end":{"line":54,"column":1}},"tags":["function"],"name":"extract","count":15},{"id":31,"loc":{"start":{"line":36,"column":17},"end":{"line":36,"column":20}},"tags":["statement","variable","line"],"count":15},{"id":32,"loc":{"start":{"line":37,"column":17},"end":{"line":37,"column":46}},"tags":["statement","variable","line"],"count":15},{"id":33,"loc":{"start":{"line":38,"column":14},"end":{"line":52,"column":3}},"tags":["branch","line","if"],"group":"38:2","count":15},{"id":34,"loc":{"start":{"line":52,"column":3},"end":{"line":52,"column":3}},"tags":["branch","if"],"group":"38:2","count":0},{"id":35,"loc":{"start":{"line":39,"column":20},"end":{"line":39,"column":42}},"tags":["statement","variable","line"],"count":15},{"id":36,"loc":{"start":{"line":40,"column":4},"end":{"line":51,"column":7}},"tags":["statement","line"],"count":15},{"id":37,"loc":{"start":{"line":40,"column":20},"end":{"line":51,"column":5}},"tags":["function"],"name":"@40:20","count":31},{"id":38,"loc":{"start":{"line":42,"column":6},"end":{"line":44,"column":14}},"tags":["branch","switch"],"group":"41:6","count":15},{"id":39,"loc":{"start":{"line":45,"column":6},"end":{"line":47,"column":14}},"tags":["branch","switch"],"group":"41:6","count":1},{"id":40,"loc":{"start":{"line":48,"column":6},"end":{"line":49,"column":14}},"tags":["branch","switch"],"group":"41:6","count":15},{"id":41,"loc":{"start":{"line":43,"column":8},"end":{"line":43,"column":39}},"tags":["statement","line"],"count":15},{"id":42,"loc":{"start":{"line":44,"column":8},"end":{"line":44,"column":14}},"tags":["statement","line"],"count":15},{"id":43,"loc":{"start":{"line":46,"column":8},"end":{"line":46,"column":40}},"tags":["statement","line"],"count":1},{"id":44,"loc":{"start":{"line":47,"column":8},"end":{"line":47,"column":14}},"tags":["statement","line"],"count":1},{"id":45,"loc":{"start":{"line":49,"column":8},"end":{"line":49,"column":14}},"tags":["statement","line"],"count":15},{"id":46,"loc":{"start":{"line":53,"column":9},"end":{"line":53,"column":15},"identifierName":"output"},"tags":["line","statement"],"count":15},{"id":47,"loc":{"start":{"line":56,"column":7},"end":{"line":70,"column":1}},"tags":["function"],"name":"addRules","count":52},{"id":48,"loc":{"start":{"line":57,"column":16},"end":{"line":69,"column":3}},"tags":["branch","line","if"],"group":"57:2","count":14},{"id":49,"loc":{"start":{"line":69,"column":3},"end":{"line":69,"column":3}},"tags":["branch","if"],"group":"57:2","count":38},{"id":50,"loc":{"start":{"line":58,"column":21},"end":{"line":58,"column":32}},"tags":["statement","variable","line"],"count":14},{"id":51,"loc":{"start":{"line":59,"column":4},"end":{"line":68,"column":7}},"tags":["statement","line"],"count":14},{"id":52,"loc":{"start":{"line":59,"column":21},"end":{"line":68,"column":5}},"tags":["function"],"name":"@59:21","count":14},{"id":53,"loc":{"start":{"line":60,"column":21},"end":{"line":60,"column":43}},"tags":["statement","variable","line"],"count":14},{"id":54,"loc":{"start":{"line":61,"column":6},"end":{"line":67,"column":9}},"tags":["statement","line"],"count":14},{"id":55,"loc":{"start":{"line":61,"column":34},"end":{"line":67,"column":7}},"tags":["function"],"name":"@61:34","count":14},{"id":56,"loc":{"start":{"line":62,"column":8},"end":{"line":66,"column":11}},"tags":["statement","line"],"count":14},{"id":57,"loc":{"start":{"line":64,"column":17},"end":{"line":64,"column":28}},"tags":["line"],"count":14}]},"src/instrumenter.js":{"source":"import * as types from '@babel/types';\nimport micromatch from 'micromatch';\n\nimport prelude from './prelude';\nimport meta from './meta';\nimport {applyRules, addRules} from './tags';\n\nexport function skip({opts, filename: file} = { }) {\n if (file && opts) {\n const {ignore, only} = opts;\n\n if (only) {\n return micromatch([file], only, {nocase: true}).length <= 0;\n }\n if (ignore) {\n return micromatch([file], ignore, {nocase: true}).length > 0;\n }\n }\n return false;\n}\n\n/**\n * Create an opaque, unique key for a given node. Useful for tagging the node\n * in separate places.\n * @param {Object} path Babel path to derive key from.\n * @returns {String} String key.\n */\nexport function key(path) {\n const node = path.node;\n if (node.loc) {\n const location = node.loc.start;\n return `${location.line}:${location.column}`;\n }\n throw new TypeError('Path must have valid location.');\n}\n\n/**\n * Some nodes need to marked as non-instrumentable; since babel will apply\n * our plugin to nodes we create, we have to be careful to not put ourselves\n * into an infinite loop.\n * @param {Object} node Babel AST node.\n * @returns {Object} Babel AST node that won't be instrumented.\n */\nfunction X(node) {\n node.__adana = true;\n return node;\n}\n\nfunction ignore(path) {\n return (!path.node || !path.node.loc || path.node.__adana);\n}\n\nfunction standardize(listener) {\n return (path, state) => ignore(path) ? undefined : listener(path, state);\n}\n\n/**\n * Create the transform-adana babel plugin.\n * @returns {Object} `babel` plugin object.\n */\nexport default function instrumenter() {\n /**\n * Create a chunk of code that marks the specified node as having\n * been executed.\n * @param {Object} state `babel` state for the path that's being walked.\n * @param {Object} options Configure how the marker behaves.\n * @returns {Object} AST node for marking coverage.\n */\n function createMarker(state, options) {\n const {tags, loc, name, group} = options;\n const coverage = meta(state);\n const id = coverage.entries.length;\n\n coverage.entries.push({\n id,\n loc,\n tags,\n name,\n group,\n count: 0,\n });\n\n // Maker is simply a statement incrementing a coverage variable.\n return X(types.updateExpression('++', types.memberExpression(\n types.memberExpression(\n coverage.variable,\n types.numericLiteral(id),\n true\n ),\n types.stringLiteral('count'),\n true\n ), true));\n }\n\n /**\n * [isInstrumentableStatement description]\n * @param {[type]} path [description]\n * @returns {Boolean} [description]\n */\n function isInstrumentableStatement(path) {\n const parent = path.parentPath;\n return !parent.isReturnStatement() &&\n !parent.isVariableDeclaration() &&\n !parent.isExportDeclaration() &&\n !parent.isFunctionDeclaration() &&\n !parent.isIfStatement();\n }\n\n /**\n * Inject a marker that measures whether the node for the given path has\n * been run or not.\n * @param {Object} path [description]\n * @param {Object} state [description]\n * @param {Object} options [description]\n * @returns {void}\n */\n function instrument(path, state, options) {\n // This function is here because isInstrumentableStatement() is being\n // called; we can't create the marker without knowing the result of that,\n // otherwise dead markers will be created.\n function marker() {\n return createMarker(state, {\n loc: path.node.loc,\n ...options,\n });\n }\n\n if (path.isBlockStatement()) {\n path.unshiftContainer('body', X(types.expressionStatement(marker())));\n } else if (path.isExpression()) {\n path.replaceWith(X(types.sequenceExpression([marker(), path.node])));\n } else if (path.isStatement()) {\n if (isInstrumentableStatement(path)) {\n path.insertBefore(X(types.expressionStatement(marker())));\n }\n }\n }\n\n /**\n * [visitStatement description]\n * @param {[type]} path [description]\n * @param {[type]} state [description]\n * @returns {void}\n */\n function visitStatement(path, state) {\n instrument(path, state, {\n tags: ['statement', 'line'],\n loc: path.node.loc,\n });\n }\n\n /**\n * The function visitor is mainly to track the definitions of functions;\n * being able ensure how many of your functions have actually been invoked.\n * @param {[type]} path [description]\n * @param {[type]} state [description]\n * @returns {void}\n */\n function visitFunction(path, state) {\n instrument(path.get('body'), state, {\n tags: ['function'],\n name: path.node.id ? path.node.id.name : `@${key(path)}`,\n loc: path.node.loc,\n });\n }\n\n /**\n * Multiple branches based on the result of `case _` and `default`. If you\n * do not provide a `default` one will be intelligently added for you,\n * forcing you to cover that case.\n * @param {[type]} path [description]\n * @param {[type]} state [description]\n * @returns {void}\n */\n function visitSwitchStatement(path, state) {\n let hasDefault = false;\n path.get('cases').forEach((entry) => {\n if (entry.node.test) {\n addRules(state, entry.node.loc, entry.node.test.trailingComments);\n }\n if (entry.node.consequent.length > 1) {\n addRules(\n state,\n entry.node.loc,\n entry.node.consequent[0].leadingComments\n );\n }\n\n if (entry.node.test === null) {\n hasDefault = true;\n }\n entry.unshiftContainer('consequent', createMarker(state, {\n tags: ['branch', 'switch'],\n loc: entry.node.loc,\n group: key(path),\n }));\n });\n\n // Default is technically a branch, just like if statements without\n // else's are also technically a branch.\n if (!hasDefault) {\n // Add an extra break to the end of the last case in case some idiot\n // forgot to add it.\n const cases = path.get('cases');\n if (cases.length > 0) {\n cases[cases.length - 1].pushContainer(\n 'consequent',\n types.breakStatement()\n );\n }\n // Finally add the default case.\n path.pushContainer('cases', types.switchCase(null, [\n types.expressionStatement(createMarker(state, {\n tags: ['branch', 'switch'],\n loc: {\n start: path.node.loc.end,\n end: path.node.loc.end,\n },\n group: key(path),\n })),\n types.breakStatement(),\n ]));\n }\n }\n\n /**\n * [visitVariableDeclaration description]\n * @param {[type]} path [description]\n * @param {[type]} state [description]\n * @returns {void}\n */\n function visitVariableDeclaration(path, state) {\n path.get('declarations').forEach((decl) => {\n if (decl.has('init')) {\n instrument(decl.get('init'), state, {\n tags: ['statement', 'variable', 'line'],\n });\n }\n });\n }\n\n /**\n * Includes both while and do-while loops. They contain a single branch which\n * tests the loop condition.\n * @param {[type]} path [description]\n * @param {[type]} state [description]\n * @returns {void}\n */\n function visitWhileLoop(path, state) {\n const test = path.get('test');\n const group = key(path);\n // This is a particularly clever use of the fact JS operators are short-\n // circuiting. To instrument a loop one _cannot_ add a marker on the outside\n // of the loop body due to weird cases of things where loops are in non-\n // block if statements. So instead, create the following mechanism:\n // ((condition && A) || !B) where A and B are markers. Since markers are\n // postfix, they're always true. Ergo, A is only incremented when condition\n // is true, B only when it's false and the truth value of the whole\n // statement is preserved. Neato.\n test.replaceWith(types.logicalExpression(\n '||',\n types.logicalExpression(\n '&&',\n X(test.node),\n createMarker(state, {\n tags: ['branch', 'line', 'statement', 'loop', 'while'],\n loc: test.node.loc,\n group,\n })\n ),\n types.unaryExpression(\n '!',\n createMarker(state, {\n tags: ['branch', 'line', 'loop', 'while'],\n loc: test.node.loc,\n group,\n })\n )\n ));\n }\n\n /**\n * The try block can either fully succeed (no error) or it can throw. Both\n * cases are accounted for.\n * @param {[type]} path [description]\n * @param {[type]} state [description]\n * @returns {void}\n */\n function visitTryStatement(path, state) {\n const group = key(path);\n const body = path.get('block');\n const trigger = path.scope.generateDeclaredUidIdentifier('_exception');\n addRules(state, body.node.loc, body.node.leadingComments);\n path.get('block').unshiftContainer('body', types.expressionStatement(\n types.assignmentExpression('=', trigger, types.booleanLiteral(true)),\n ));\n const handlerExpression = types.expressionStatement(\n types.assignmentExpression('=', trigger, types.booleanLiteral(false)),\n );\n let handlerLoc;\n if (path.has('handler')) {\n const handler = path.get('handler').node;\n handlerLoc = handler.loc;\n addRules(state, handler.loc, handler.body.leadingComments);\n path.get('handler.body').unshiftContainer(\n 'body',\n handlerExpression\n );\n } else {\n const loc = path.get('block').node.loc.end;\n handlerLoc = {start: loc, end: loc};\n path.get('handler').replaceWith(types.catchClause(\n types.identifier('err'), types.blockStatement([\n handlerExpression,\n types.throwStatement(\n types.identifier('err')\n ),\n ])\n ));\n }\n\n const guard = types.ifStatement(\n trigger,\n types.expressionStatement(\n createMarker(state, {\n tags: ['branch', 'line', 'exception'],\n loc: path.get('block').node.loc,\n group,\n })\n ),\n types.expressionStatement(\n createMarker(state, {\n tags: ['branch', 'line', 'exception'],\n loc: handlerLoc,\n group,\n })\n )\n );\n\n if (path.has('finalizer')) {\n path.get('finalizer').unshiftContainer('body', guard);\n } else {\n path.get('finalizer').replaceWith(types.blockStatement([guard]));\n }\n }\n\n /**\n * Return statements are instrumented by marking the next block they return.\n * This helps ensure multi-line expressions for return statements are\n * accurately captured.\n * @param {[type]} path [description]\n * @param {[type]} state [description]\n * @returns {[type]} [description]\n */\n function visitReturnStatement(path, state) {\n if (!path.has('argument')) {\n path.get('argument').replaceWith(types.sequenceExpression([\n createMarker(state, {\n loc: path.node.loc,\n tags: ['line', 'statement'],\n }),\n types.identifier('undefined'),\n ]));\n } else {\n instrument(path.get('argument'), state, {\n tags: ['line', 'statement'],\n });\n }\n }\n\n /**\n * For multi-line reporting (and objects do tend to span multiple lines) this\n * is required to know which parts of the object where actually executed.\n * Ignore shorthand property that look like `{ this }`.\n * @param {[type]} path [description]\n * @param {[type]} state [description]\n * @returns {[type]} [description]\n */\n function visitObjectProperty(path, state) {\n if (!path.node.shorthand && !path.parentPath.isPattern()) {\n const key = path.get('key');\n const value = path.get('value');\n if (path.node.computed) {\n instrument(key, state, {\n tags: ['line'],\n });\n }\n instrument(value, state, {\n tags: ['line'],\n });\n }\n }\n\n /**\n * For multi-line reporting (and arrays do tend to span multiple lines) this\n * is required to know which parts of the array where actually executed.\n * This does _not_ include destructed arrays.\n * @param {[type]} path [description]\n * @param {[type]} state [description]\n * @returns {[type]} [description]\n */\n function visitArrayExpression(path, state) {\n if (!path.parentPath.isPattern()) {\n path.get('elements').forEach((element) => {\n instrument(element, state, {\n tags: ['line'],\n });\n });\n }\n }\n\n /**\n * Logical expressions are those using logic operators like `&&` and `||`.\n * Since logic expressions short-circuit in JS they are effectively branches\n * and will be treated as such here.\n * @param {[type]} path [description]\n * @param {[type]} state [description]\n * @returns {void}\n */\n function visitLogicalExpression(path, state) {\n const group = key(path);\n const test = path.scope.generateDeclaredUidIdentifier('test');\n\n path.replaceWith(X(types.conditionalExpression(\n types.assignmentExpression('=', test, X(path.node)),\n types.sequenceExpression([createMarker(state, {\n tags: ['branch', 'logic'],\n loc: path.get('left').node.loc,\n group,\n }), test]),\n types.sequenceExpression([createMarker(state, {\n tags: ['branch', 'logic'],\n loc: path.get('right').node.loc,\n group,\n }), test])\n )));\n }\n\n /**\n * Conditionals are either if/else statements or tenaiary expressions. They\n * have a test case and two choices (based on the test result). Both cases\n * are always accounted for, even if the code does not exist for the alternate\n * case.\n * @param {[type]} path [description]\n * @param {[type]} state [description]\n * @returns {void}\n */\n function visitConditional(path, state) {\n // Branches can be grouped together so that each of the possible branch\n // destinations is accounted for under one group. For if statements, this\n // refers to all the blocks that fall under a single if.. else if.. else..\n // grouping.\n const root = path.findParent((search) => {\n return search.node.type === path.node.type &&\n !ignore(search) &&\n (!search.parentPath || search.parentPath.node.type !== path.node.type);\n }) || path;\n\n // Create the group name based on the root `if` statement.\n const group = key(root);\n\n function tagBranch(path) {\n addRules(state, path.node.loc, path.node.leadingComments);\n if (path.isBlockStatement() && path.node.body.length > 0) {\n addRules(state, path.node.loc, path.node.body[0].leadingComments);\n }\n }\n\n tagBranch(path.get('consequent'));\n if (path.has('alternate')) {\n tagBranch(path.get('alternate'));\n }\n\n instrument(path.get('consequent'), state, {\n tags: ['branch', 'line', 'if'],\n loc: path.node.consequent.loc,\n group,\n });\n\n if (path.has('alternate') && !path.get('alternate').isIfStatement()) {\n instrument(path.get('alternate'), state, {\n tags: ['branch', 'line', 'if'],\n loc: path.node.alternate.loc,\n group,\n });\n } else if (!path.has('alternate')) {\n path.get('alternate').replaceWith(types.expressionStatement(\n createMarker(state, {\n tags: ['branch', 'if'],\n loc: {\n start: path.node.loc.end,\n end: path.node.loc.end,\n },\n group,\n }))\n );\n }\n }\n\n function noInstrument(path) {\n if (\n path.node &&\n path.node.leadingComments &&\n path.node.leadingComments.some(\n (comment) => /^\\s*adana-no-instrument\\s*$/.exec(comment.value)\n )\n ) {\n path.skip();\n return;\n }\n }\n\n const visitor = {\n // Expressions\n ArrowFunctionExpression: visitFunction,\n FunctionExpression: visitFunction,\n ObjectMethod: visitFunction,\n ClassMethod: visitFunction,\n LogicalExpression: visitLogicalExpression,\n ConditionalExpression: visitConditional,\n ObjectProperty: visitObjectProperty,\n ArrayExpression: visitArrayExpression,\n\n // Declarations\n FunctionDeclaration: visitFunction,\n VariableDeclaration: visitVariableDeclaration,\n\n // Statements\n ContinueStatement: visitStatement,\n BreakStatement: visitStatement,\n ExpressionStatement: visitStatement,\n ThrowStatement: visitStatement,\n ReturnStatement: visitReturnStatement,\n TryStatement: visitTryStatement,\n WhileStatement: visitWhileLoop,\n DoWhileStatement: visitWhileLoop,\n IfStatement: visitConditional,\n SwitchStatement: visitSwitchStatement,\n\n // Generics\n enter: noInstrument,\n };\n\n Object.keys(visitor).forEach((key) => {\n visitor[key] = standardize(visitor[key]);\n });\n\n // Create the actual babel plugin object.\n return {\n visitor: {\n Program(path, state) {\n // Check if file should be instrumented or not.\n if (skip(state)) {\n return;\n }\n meta(state, {\n source: state.file.code,\n entries: [],\n rules: [],\n tags: {},\n variable: path.scope.generateUidIdentifier('coverage'),\n });\n path.traverse(visitor, state);\n applyRules(state);\n path.unshiftContainer('body', prelude(state));\n },\n },\n };\n}\n","path":"src/instrumenter.js","locations":[{"id":0,"loc":{"start":{"line":8,"column":7},"end":{"line":20,"column":1}},"tags":["function"],"name":"skip","count":37},{"id":1,"loc":{"start":{"line":9,"column":20},"end":{"line":18,"column":3}},"tags":["branch","line","if"],"group":"9:2","count":32},{"id":2,"loc":{"start":{"line":18,"column":3},"end":{"line":18,"column":3}},"tags":["branch","if"],"group":"9:2","count":5},{"id":3,"loc":{"start":{"line":9,"column":6},"end":{"line":9,"column":10},"identifierName":"file"},"tags":["branch","logic"],"group":"9:6","count":32},{"id":4,"loc":{"start":{"line":9,"column":14},"end":{"line":9,"column":18},"identifierName":"opts"},"tags":["branch","logic"],"group":"9:6","count":5},{"id":5,"loc":{"start":{"line":10,"column":27},"end":{"line":10,"column":31},"identifierName":"opts"},"tags":["statement","variable","line"],"count":32},{"id":6,"loc":{"start":{"line":12,"column":14},"end":{"line":14,"column":5}},"tags":["branch","line","if"],"group":"9:2","count":1},{"id":7,"loc":{"start":{"line":14,"column":5},"end":{"line":14,"column":5}},"tags":["branch","if"],"group":"9:2","count":31},{"id":8,"loc":{"start":{"line":13,"column":13},"end":{"line":13,"column":65}},"tags":["line","statement"],"count":1},{"id":9,"loc":{"start":{"line":13,"column":25},"end":{"line":13,"column":29},"identifierName":"file"},"tags":["line"],"count":1},{"id":10,"loc":{"start":{"line":13,"column":47},"end":{"line":13,"column":51}},"tags":["line"],"count":1},{"id":11,"loc":{"start":{"line":15,"column":16},"end":{"line":17,"column":5}},"tags":["branch","line","if"],"group":"9:2","count":31},{"id":12,"loc":{"start":{"line":17,"column":5},"end":{"line":17,"column":5}},"tags":["branch","if"],"group":"9:2","count":0},{"id":13,"loc":{"start":{"line":16,"column":13},"end":{"line":16,"column":66}},"tags":["line","statement"],"count":31},{"id":14,"loc":{"start":{"line":16,"column":25},"end":{"line":16,"column":29},"identifierName":"file"},"tags":["line"],"count":31},{"id":15,"loc":{"start":{"line":16,"column":49},"end":{"line":16,"column":53}},"tags":["line"],"count":31},{"id":16,"loc":{"start":{"line":19,"column":9},"end":{"line":19,"column":14}},"tags":["line","statement"],"count":5},{"id":17,"loc":{"start":{"line":28,"column":7},"end":{"line":35,"column":1}},"tags":["function"],"name":"key","count":40},{"id":18,"loc":{"start":{"line":29,"column":15},"end":{"line":29,"column":24}},"tags":["statement","variable","line"],"count":40},{"id":19,"loc":{"start":{"line":30,"column":16},"end":{"line":33,"column":3}},"tags":["branch","line","if"],"group":"30:2","count":39},{"id":20,"loc":{"start":{"line":33,"column":3},"end":{"line":33,"column":3}},"tags":["branch","if"],"group":"30:2","count":1},{"id":21,"loc":{"start":{"line":31,"column":21},"end":{"line":31,"column":35}},"tags":["statement","variable","line"],"count":39},{"id":22,"loc":{"start":{"line":32,"column":11},"end":{"line":32,"column":48}},"tags":["line","statement"],"count":39},{"id":23,"loc":{"start":{"line":34,"column":2},"end":{"line":34,"column":56}},"tags":["statement","line"],"count":1},{"id":24,"loc":{"start":{"line":44,"column":0},"end":{"line":47,"column":1}},"tags":["function"],"name":"X","count":392},{"id":25,"loc":{"start":{"line":45,"column":2},"end":{"line":45,"column":22}},"tags":["statement","line"],"count":392},{"id":26,"loc":{"start":{"line":46,"column":9},"end":{"line":46,"column":13},"identifierName":"node"},"tags":["line","statement"],"count":392},{"id":27,"loc":{"start":{"line":49,"column":0},"end":{"line":51,"column":1}},"tags":["function"],"name":"ignore","count":3053},{"id":28,"loc":{"start":{"line":50,"column":10},"end":{"line":50,"column":59}},"tags":["line","statement"],"count":3053},{"id":29,"loc":{"start":{"line":50,"column":10},"end":{"line":50,"column":38}},"tags":["branch","logic"],"group":"50:10","count":2175},{"id":30,"loc":{"start":{"line":50,"column":42},"end":{"line":50,"column":59}},"tags":["branch","logic"],"group":"50:10","count":878},{"id":31,"loc":{"start":{"line":50,"column":10},"end":{"line":50,"column":20}},"tags":["branch","logic"],"group":"50:10","count":2157},{"id":32,"loc":{"start":{"line":50,"column":24},"end":{"line":50,"column":38}},"tags":["branch","logic"],"group":"50:10","count":896},{"id":33,"loc":{"start":{"line":53,"column":0},"end":{"line":55,"column":1}},"tags":["function"],"name":"standardize","count":168},{"id":34,"loc":{"start":{"line":54,"column":9},"end":{"line":54,"column":74}},"tags":["line","statement"],"count":168},{"id":35,"loc":{"start":{"line":54,"column":9},"end":{"line":54,"column":74}},"tags":["function"],"name":"@54:9","count":3048},{"id":36,"loc":{"start":{"line":54,"column":41},"end":{"line":54,"column":50},"identifierName":"undefined"},"tags":["branch","line","if"],"group":"54:26","count":2174},{"id":37,"loc":{"start":{"line":54,"column":53},"end":{"line":54,"column":74}},"tags":["branch","line","if"],"group":"54:26","count":874},{"id":38,"loc":{"start":{"line":61,"column":15},"end":{"line":569,"column":1}},"tags":["function"],"name":"instrumenter","count":8},{"id":39,"loc":{"start":{"line":69,"column":2},"end":{"line":93,"column":3}},"tags":["function"],"name":"createMarker","count":210},{"id":40,"loc":{"start":{"line":70,"column":37},"end":{"line":70,"column":44},"identifierName":"options"},"tags":["statement","variable","line"],"count":210},{"id":41,"loc":{"start":{"line":71,"column":21},"end":{"line":71,"column":32}},"tags":["statement","variable","line"],"count":210},{"id":42,"loc":{"start":{"line":72,"column":15},"end":{"line":72,"column":38}},"tags":["statement","variable","line"],"count":210},{"id":43,"loc":{"start":{"line":74,"column":4},"end":{"line":81,"column":7}},"tags":["statement","line"],"count":210},{"id":44,"loc":{"start":{"line":80,"column":13},"end":{"line":80,"column":14}},"tags":["line"],"count":210},{"id":45,"loc":{"start":{"line":84,"column":11},"end":{"line":92,"column":13}},"tags":["line","statement"],"count":210},{"id":46,"loc":{"start":{"line":100,"column":2},"end":{"line":107,"column":3}},"tags":["function"],"name":"isInstrumentableStatement","count":63},{"id":47,"loc":{"start":{"line":101,"column":19},"end":{"line":101,"column":34}},"tags":["statement","variable","line"],"count":63},{"id":48,"loc":{"start":{"line":102,"column":11},"end":{"line":106,"column":29}},"tags":["line","statement"],"count":63},{"id":49,"loc":{"start":{"line":102,"column":11},"end":{"line":105,"column":37}},"tags":["branch","logic"],"group":"102:11","count":63},{"id":50,"loc":{"start":{"line":106,"column":6},"end":{"line":106,"column":29}},"tags":["branch","logic"],"group":"102:11","count":0},{"id":51,"loc":{"start":{"line":102,"column":11},"end":{"line":104,"column":35}},"tags":["branch","logic"],"group":"102:11","count":63},{"id":52,"loc":{"start":{"line":105,"column":6},"end":{"line":105,"column":37}},"tags":["branch","logic"],"group":"102:11","count":0},{"id":53,"loc":{"start":{"line":102,"column":11},"end":{"line":103,"column":37}},"tags":["branch","logic"],"group":"102:11","count":63},{"id":54,"loc":{"start":{"line":104,"column":6},"end":{"line":104,"column":35}},"tags":["branch","logic"],"group":"102:11","count":0},{"id":55,"loc":{"start":{"line":102,"column":11},"end":{"line":102,"column":38}},"tags":["branch","logic"],"group":"102:11","count":63},{"id":56,"loc":{"start":{"line":103,"column":6},"end":{"line":103,"column":37}},"tags":["branch","logic"],"group":"102:11","count":0},{"id":57,"loc":{"start":{"line":117,"column":2},"end":{"line":137,"column":3}},"tags":["function"],"name":"instrument","count":172},{"id":58,"loc":{"start":{"line":121,"column":4},"end":{"line":126,"column":5}},"tags":["function"],"name":"marker","count":172},{"id":59,"loc":{"start":{"line":122,"column":13},"end":{"line":125,"column":8}},"tags":["line","statement"],"count":172},{"id":60,"loc":{"start":{"line":123,"column":13},"end":{"line":123,"column":26}},"tags":["line"],"count":172},{"id":61,"loc":{"start":{"line":128,"column":33},"end":{"line":130,"column":5}},"tags":["branch","line","if"],"group":"128:4","count":30},{"id":62,"loc":{"start":{"line":129,"column":6},"end":{"line":129,"column":76}},"tags":["statement","line"],"count":30},{"id":63,"loc":{"start":{"line":130,"column":36},"end":{"line":132,"column":5}},"tags":["branch","line","if"],"group":"128:4","count":79},{"id":64,"loc":{"start":{"line":131,"column":6},"end":{"line":131,"column":75}},"tags":["statement","line"],"count":79},{"id":65,"loc":{"start":{"line":131,"column":51},"end":{"line":131,"column":59}},"tags":["line"],"count":79},{"id":66,"loc":{"start":{"line":131,"column":61},"end":{"line":131,"column":70}},"tags":["line"],"count":79},{"id":67,"loc":{"start":{"line":132,"column":35},"end":{"line":136,"column":5}},"tags":["branch","line","if"],"group":"128:4","count":63},{"id":68,"loc":{"start":{"line":136,"column":5},"end":{"line":136,"column":5}},"tags":["branch","if"],"group":"128:4","count":0},{"id":69,"loc":{"start":{"line":133,"column":43},"end":{"line":135,"column":7}},"tags":["branch","line","if"],"group":"128:4","count":63},{"id":70,"loc":{"start":{"line":135,"column":7},"end":{"line":135,"column":7}},"tags":["branch","if"],"group":"128:4","count":0},{"id":71,"loc":{"start":{"line":134,"column":8},"end":{"line":134,"column":66}},"tags":["statement","line"],"count":63},{"id":72,"loc":{"start":{"line":145,"column":2},"end":{"line":150,"column":3}},"tags":["function"],"name":"visitStatement","count":63},{"id":73,"loc":{"start":{"line":146,"column":4},"end":{"line":149,"column":7}},"tags":["statement","line"],"count":63},{"id":74,"loc":{"start":{"line":147,"column":12},"end":{"line":147,"column":33}},"tags":["line"],"count":63},{"id":75,"loc":{"start":{"line":147,"column":13},"end":{"line":147,"column":24}},"tags":["line"],"count":63},{"id":76,"loc":{"start":{"line":147,"column":26},"end":{"line":147,"column":32}},"tags":["line"],"count":63},{"id":77,"loc":{"start":{"line":148,"column":11},"end":{"line":148,"column":24}},"tags":["line"],"count":63},{"id":78,"loc":{"start":{"line":159,"column":2},"end":{"line":165,"column":3}},"tags":["function"],"name":"visitFunction","count":23},{"id":79,"loc":{"start":{"line":160,"column":4},"end":{"line":164,"column":7}},"tags":["statement","line"],"count":23},{"id":80,"loc":{"start":{"line":161,"column":12},"end":{"line":161,"column":24}},"tags":["line"],"count":23},{"id":81,"loc":{"start":{"line":161,"column":13},"end":{"line":161,"column":23}},"tags":["line"],"count":23},{"id":82,"loc":{"start":{"line":162,"column":12},"end":{"line":162,"column":62}},"tags":["line"],"count":23},{"id":83,"loc":{"start":{"line":162,"column":27},"end":{"line":162,"column":44}},"tags":["branch","line","if"],"group":"162:12","count":16},{"id":84,"loc":{"start":{"line":162,"column":47},"end":{"line":162,"column":62}},"tags":["branch","line","if"],"group":"162:12","count":7},{"id":85,"loc":{"start":{"line":163,"column":11},"end":{"line":163,"column":24}},"tags":["line"],"count":23},{"id":86,"loc":{"start":{"line":175,"column":2},"end":{"line":224,"column":3}},"tags":["function"],"name":"visitSwitchStatement","count":3},{"id":87,"loc":{"start":{"line":176,"column":21},"end":{"line":176,"column":26}},"tags":["statement","variable","line"],"count":3},{"id":88,"loc":{"start":{"line":177,"column":4},"end":{"line":197,"column":7}},"tags":["statement","line"],"count":3},{"id":89,"loc":{"start":{"line":177,"column":30},"end":{"line":197,"column":5}},"tags":["function"],"name":"@177:30","count":9},{"id":90,"loc":{"start":{"line":178,"column":27},"end":{"line":180,"column":7}},"tags":["branch","line","if"],"group":"178:6","count":7},{"id":91,"loc":{"start":{"line":180,"column":7},"end":{"line":180,"column":7}},"tags":["branch","if"],"group":"178:6","count":2},{"id":92,"loc":{"start":{"line":179,"column":8},"end":{"line":179,"column":74}},"tags":["statement","line"],"count":7},{"id":93,"loc":{"start":{"line":181,"column":44},"end":{"line":187,"column":7}},"tags":["branch","line","if"],"group":"181:6","count":7},{"id":94,"loc":{"start":{"line":187,"column":7},"end":{"line":187,"column":7}},"tags":["branch","if"],"group":"181:6","count":2},{"id":95,"loc":{"start":{"line":182,"column":8},"end":{"line":186,"column":10}},"tags":["statement","line"],"count":7},{"id":96,"loc":{"start":{"line":189,"column":36},"end":{"line":191,"column":7}},"tags":["branch","line","if"],"group":"189:6","count":2},{"id":97,"loc":{"start":{"line":191,"column":7},"end":{"line":191,"column":7}},"tags":["branch","if"],"group":"189:6","count":7},{"id":98,"loc":{"start":{"line":190,"column":8},"end":{"line":190,"column":26}},"tags":["statement","line"],"count":2},{"id":99,"loc":{"start":{"line":192,"column":6},"end":{"line":196,"column":10}},"tags":["statement","line"],"count":9},{"id":100,"loc":{"start":{"line":193,"column":14},"end":{"line":193,"column":34}},"tags":["line"],"count":9},{"id":101,"loc":{"start":{"line":193,"column":15},"end":{"line":193,"column":23}},"tags":["line"],"count":9},{"id":102,"loc":{"start":{"line":193,"column":25},"end":{"line":193,"column":33}},"tags":["line"],"count":9},{"id":103,"loc":{"start":{"line":194,"column":13},"end":{"line":194,"column":27}},"tags":["line"],"count":9},{"id":104,"loc":{"start":{"line":195,"column":15},"end":{"line":195,"column":24}},"tags":["line"],"count":9},{"id":105,"loc":{"start":{"line":201,"column":21},"end":{"line":223,"column":5}},"tags":["branch","line","if"],"group":"201:4","count":1},{"id":106,"loc":{"start":{"line":223,"column":5},"end":{"line":223,"column":5}},"tags":["branch","if"],"group":"201:4","count":2},{"id":107,"loc":{"start":{"line":204,"column":20},"end":{"line":204,"column":37}},"tags":["statement","variable","line"],"count":1},{"id":108,"loc":{"start":{"line":205,"column":28},"end":{"line":210,"column":7}},"tags":["branch","line","if"],"group":"201:4","count":1},{"id":109,"loc":{"start":{"line":210,"column":7},"end":{"line":210,"column":7}},"tags":["branch","if"],"group":"201:4","count":0},{"id":110,"loc":{"start":{"line":206,"column":8},"end":{"line":209,"column":10}},"tags":["statement","line"],"count":1},{"id":111,"loc":{"start":{"line":212,"column":6},"end":{"line":222,"column":10}},"tags":["statement","line"],"count":1},{"id":112,"loc":{"start":{"line":213,"column":8},"end":{"line":220,"column":11}},"tags":["line"],"count":1},{"id":113,"loc":{"start":{"line":221,"column":8},"end":{"line":221,"column":30}},"tags":["line"],"count":1},{"id":114,"loc":{"start":{"line":214,"column":16},"end":{"line":214,"column":36}},"tags":["line"],"count":1},{"id":115,"loc":{"start":{"line":214,"column":17},"end":{"line":214,"column":25}},"tags":["line"],"count":1},{"id":116,"loc":{"start":{"line":214,"column":27},"end":{"line":214,"column":35}},"tags":["line"],"count":1},{"id":117,"loc":{"start":{"line":215,"column":15},"end":{"line":218,"column":11}},"tags":["line"],"count":1},{"id":118,"loc":{"start":{"line":216,"column":19},"end":{"line":216,"column":36}},"tags":["line"],"count":1},{"id":119,"loc":{"start":{"line":217,"column":17},"end":{"line":217,"column":34}},"tags":["line"],"count":1},{"id":120,"loc":{"start":{"line":219,"column":17},"end":{"line":219,"column":26}},"tags":["line"],"count":1},{"id":121,"loc":{"start":{"line":232,"column":2},"end":{"line":240,"column":3}},"tags":["function"],"name":"visitVariableDeclaration","count":40},{"id":122,"loc":{"start":{"line":233,"column":4},"end":{"line":239,"column":7}},"tags":["statement","line"],"count":40},{"id":123,"loc":{"start":{"line":233,"column":37},"end":{"line":239,"column":5}},"tags":["function"],"name":"@233:37","count":40},{"id":124,"loc":{"start":{"line":234,"column":28},"end":{"line":238,"column":7}},"tags":["branch","line","if"],"group":"234:6","count":39},{"id":125,"loc":{"start":{"line":238,"column":7},"end":{"line":238,"column":7}},"tags":["branch","if"],"group":"234:6","count":1},{"id":126,"loc":{"start":{"line":235,"column":8},"end":{"line":237,"column":11}},"tags":["statement","line"],"count":39},{"id":127,"loc":{"start":{"line":236,"column":16},"end":{"line":236,"column":49}},"tags":["line"],"count":39},{"id":128,"loc":{"start":{"line":236,"column":17},"end":{"line":236,"column":28}},"tags":["line"],"count":39},{"id":129,"loc":{"start":{"line":236,"column":30},"end":{"line":236,"column":40}},"tags":["line"],"count":39},{"id":130,"loc":{"start":{"line":236,"column":42},"end":{"line":236,"column":48}},"tags":["line"],"count":39},{"id":131,"loc":{"start":{"line":249,"column":2},"end":{"line":280,"column":3}},"tags":["function"],"name":"visitWhileLoop","count":2},{"id":132,"loc":{"start":{"line":250,"column":17},"end":{"line":250,"column":33}},"tags":["statement","variable","line"],"count":2},{"id":133,"loc":{"start":{"line":251,"column":18},"end":{"line":251,"column":27}},"tags":["statement","variable","line"],"count":2},{"id":134,"loc":{"start":{"line":260,"column":4},"end":{"line":279,"column":7}},"tags":["statement","line"],"count":2},{"id":135,"loc":{"start":{"line":266,"column":16},"end":{"line":266,"column":64}},"tags":["line"],"count":2},{"id":136,"loc":{"start":{"line":266,"column":17},"end":{"line":266,"column":25}},"tags":["line"],"count":2},{"id":137,"loc":{"start":{"line":266,"column":27},"end":{"line":266,"column":33}},"tags":["line"],"count":2},{"id":138,"loc":{"start":{"line":266,"column":35},"end":{"line":266,"column":46}},"tags":["line"],"count":2},{"id":139,"loc":{"start":{"line":266,"column":48},"end":{"line":266,"column":54}},"tags":["line"],"count":2},{"id":140,"loc":{"start":{"line":266,"column":56},"end":{"line":266,"column":63}},"tags":["line"],"count":2},{"id":141,"loc":{"start":{"line":267,"column":15},"end":{"line":267,"column":28}},"tags":["line"],"count":2},{"id":142,"loc":{"start":{"line":274,"column":16},"end":{"line":274,"column":51}},"tags":["line"],"count":2},{"id":143,"loc":{"start":{"line":274,"column":17},"end":{"line":274,"column":25}},"tags":["line"],"count":2},{"id":144,"loc":{"start":{"line":274,"column":27},"end":{"line":274,"column":33}},"tags":["line"],"count":2},{"id":145,"loc":{"start":{"line":274,"column":35},"end":{"line":274,"column":41}},"tags":["line"],"count":2},{"id":146,"loc":{"start":{"line":274,"column":43},"end":{"line":274,"column":50}},"tags":["line"],"count":2},{"id":147,"loc":{"start":{"line":275,"column":15},"end":{"line":275,"column":28}},"tags":["line"],"count":2},{"id":148,"loc":{"start":{"line":289,"column":2},"end":{"line":345,"column":3}},"tags":["function"],"name":"visitTryStatement","count":7},{"id":149,"loc":{"start":{"line":290,"column":18},"end":{"line":290,"column":27}},"tags":["statement","variable","line"],"count":7},{"id":150,"loc":{"start":{"line":291,"column":17},"end":{"line":291,"column":34}},"tags":["statement","variable","line"],"count":7},{"id":151,"loc":{"start":{"line":292,"column":20},"end":{"line":292,"column":74}},"tags":["statement","variable","line"],"count":7},{"id":152,"loc":{"start":{"line":293,"column":4},"end":{"line":293,"column":62}},"tags":["statement","line"],"count":7},{"id":153,"loc":{"start":{"line":294,"column":4},"end":{"line":296,"column":7}},"tags":["statement","line"],"count":7},{"id":154,"loc":{"start":{"line":297,"column":30},"end":{"line":299,"column":5}},"tags":["statement","variable","line"],"count":7},{"id":155,"loc":{"start":{"line":301,"column":29},"end":{"line":309,"column":5}},"tags":["branch","line","if"],"group":"301:4","count":6},{"id":156,"loc":{"start":{"line":309,"column":11},"end":{"line":320,"column":5}},"tags":["branch","line","if"],"group":"301:4","count":1},{"id":157,"loc":{"start":{"line":302,"column":22},"end":{"line":302,"column":46}},"tags":["statement","variable","line"],"count":6},{"id":158,"loc":{"start":{"line":303,"column":6},"end":{"line":303,"column":31}},"tags":["statement","line"],"count":6},{"id":159,"loc":{"start":{"line":304,"column":6},"end":{"line":304,"column":65}},"tags":["statement","line"],"count":6},{"id":160,"loc":{"start":{"line":305,"column":6},"end":{"line":308,"column":8}},"tags":["statement","line"],"count":6},{"id":161,"loc":{"start":{"line":310,"column":18},"end":{"line":310,"column":48}},"tags":["statement","variable","line"],"count":1},{"id":162,"loc":{"start":{"line":311,"column":6},"end":{"line":311,"column":42}},"tags":["statement","line"],"count":1},{"id":163,"loc":{"start":{"line":311,"column":27},"end":{"line":311,"column":30},"identifierName":"loc"},"tags":["line"],"count":1},{"id":164,"loc":{"start":{"line":311,"column":37},"end":{"line":311,"column":40},"identifierName":"loc"},"tags":["line"],"count":1},{"id":165,"loc":{"start":{"line":312,"column":6},"end":{"line":319,"column":9}},"tags":["statement","line"],"count":1},{"id":166,"loc":{"start":{"line":314,"column":10},"end":{"line":314,"column":27},"identifierName":"handlerExpression"},"tags":["line"],"count":1},{"id":167,"loc":{"start":{"line":315,"column":10},"end":{"line":317,"column":11}},"tags":["line"],"count":1},{"id":168,"loc":{"start":{"line":322,"column":18},"end":{"line":338,"column":5}},"tags":["statement","variable","line"],"count":7},{"id":169,"loc":{"start":{"line":326,"column":16},"end":{"line":326,"column":47}},"tags":["line"],"count":7},{"id":170,"loc":{"start":{"line":326,"column":17},"end":{"line":326,"column":25}},"tags":["line"],"count":7},{"id":171,"loc":{"start":{"line":326,"column":27},"end":{"line":326,"column":33}},"tags":["line"],"count":7},{"id":172,"loc":{"start":{"line":326,"column":35},"end":{"line":326,"column":46}},"tags":["line"],"count":7},{"id":173,"loc":{"start":{"line":327,"column":15},"end":{"line":327,"column":41}},"tags":["line"],"count":7},{"id":174,"loc":{"start":{"line":333,"column":16},"end":{"line":333,"column":47}},"tags":["line"],"count":7},{"id":175,"loc":{"start":{"line":333,"column":17},"end":{"line":333,"column":25}},"tags":["line"],"count":7},{"id":176,"loc":{"start":{"line":333,"column":27},"end":{"line":333,"column":33}},"tags":["line"],"count":7},{"id":177,"loc":{"start":{"line":333,"column":35},"end":{"line":333,"column":46}},"tags":["line"],"count":7},{"id":178,"loc":{"start":{"line":334,"column":15},"end":{"line":334,"column":25},"identifierName":"handlerLoc"},"tags":["line"],"count":7},{"id":179,"loc":{"start":{"line":340,"column":31},"end":{"line":342,"column":5}},"tags":["branch","line","if"],"group":"340:4","count":2},{"id":180,"loc":{"start":{"line":342,"column":11},"end":{"line":344,"column":5}},"tags":["branch","line","if"],"group":"340:4","count":5},{"id":181,"loc":{"start":{"line":341,"column":6},"end":{"line":341,"column":60}},"tags":["statement","line"],"count":2},{"id":182,"loc":{"start":{"line":343,"column":6},"end":{"line":343,"column":71}},"tags":["statement","line"],"count":5},{"id":183,"loc":{"start":{"line":343,"column":62},"end":{"line":343,"column":67},"identifierName":"guard"},"tags":["line"],"count":5},{"id":184,"loc":{"start":{"line":355,"column":2},"end":{"line":369,"column":3}},"tags":["function"],"name":"visitReturnStatement","count":20},{"id":185,"loc":{"start":{"line":356,"column":31},"end":{"line":364,"column":5}},"tags":["branch","line","if"],"group":"356:4","count":1},{"id":186,"loc":{"start":{"line":364,"column":11},"end":{"line":368,"column":5}},"tags":["branch","line","if"],"group":"356:4","count":19},{"id":187,"loc":{"start":{"line":357,"column":6},"end":{"line":363,"column":10}},"tags":["statement","line"],"count":1},{"id":188,"loc":{"start":{"line":358,"column":8},"end":{"line":361,"column":10}},"tags":["line"],"count":1},{"id":189,"loc":{"start":{"line":362,"column":8},"end":{"line":362,"column":37}},"tags":["line"],"count":1},{"id":190,"loc":{"start":{"line":359,"column":15},"end":{"line":359,"column":28}},"tags":["line"],"count":1},{"id":191,"loc":{"start":{"line":360,"column":16},"end":{"line":360,"column":37}},"tags":["line"],"count":1},{"id":192,"loc":{"start":{"line":360,"column":17},"end":{"line":360,"column":23}},"tags":["line"],"count":1},{"id":193,"loc":{"start":{"line":360,"column":25},"end":{"line":360,"column":36}},"tags":["line"],"count":1},{"id":194,"loc":{"start":{"line":365,"column":6},"end":{"line":367,"column":9}},"tags":["statement","line"],"count":19},{"id":195,"loc":{"start":{"line":366,"column":14},"end":{"line":366,"column":35}},"tags":["line"],"count":19},{"id":196,"loc":{"start":{"line":366,"column":15},"end":{"line":366,"column":21}},"tags":["line"],"count":19},{"id":197,"loc":{"start":{"line":366,"column":23},"end":{"line":366,"column":34}},"tags":["line"],"count":19},{"id":198,"loc":{"start":{"line":379,"column":2},"end":{"line":392,"column":3}},"tags":["function"],"name":"visitObjectProperty","count":9},{"id":199,"loc":{"start":{"line":380,"column":62},"end":{"line":391,"column":5}},"tags":["branch","line","if"],"group":"380:4","count":7},{"id":200,"loc":{"start":{"line":391,"column":5},"end":{"line":391,"column":5}},"tags":["branch","if"],"group":"380:4","count":2},{"id":201,"loc":{"start":{"line":380,"column":8},"end":{"line":380,"column":28}},"tags":["branch","logic"],"group":"380:8","count":7},{"id":202,"loc":{"start":{"line":380,"column":32},"end":{"line":380,"column":60}},"tags":["branch","logic"],"group":"380:8","count":2},{"id":203,"loc":{"start":{"line":381,"column":18},"end":{"line":381,"column":33}},"tags":["statement","variable","line"],"count":7},{"id":204,"loc":{"start":{"line":382,"column":20},"end":{"line":382,"column":37}},"tags":["statement","variable","line"],"count":7},{"id":205,"loc":{"start":{"line":383,"column":30},"end":{"line":387,"column":7}},"tags":["branch","line","if"],"group":"380:4","count":1},{"id":206,"loc":{"start":{"line":387,"column":7},"end":{"line":387,"column":7}},"tags":["branch","if"],"group":"380:4","count":6},{"id":207,"loc":{"start":{"line":384,"column":8},"end":{"line":386,"column":11}},"tags":["statement","line"],"count":1},{"id":208,"loc":{"start":{"line":385,"column":16},"end":{"line":385,"column":24}},"tags":["line"],"count":1},{"id":209,"loc":{"start":{"line":385,"column":17},"end":{"line":385,"column":23}},"tags":["line"],"count":1},{"id":210,"loc":{"start":{"line":388,"column":6},"end":{"line":390,"column":9}},"tags":["statement","line"],"count":7},{"id":211,"loc":{"start":{"line":389,"column":14},"end":{"line":389,"column":22}},"tags":["line"],"count":7},{"id":212,"loc":{"start":{"line":389,"column":15},"end":{"line":389,"column":21}},"tags":["line"],"count":7},{"id":213,"loc":{"start":{"line":402,"column":2},"end":{"line":410,"column":3}},"tags":["function"],"name":"visitArrayExpression","count":3},{"id":214,"loc":{"start":{"line":403,"column":38},"end":{"line":409,"column":5}},"tags":["branch","line","if"],"group":"403:4","count":3},{"id":215,"loc":{"start":{"line":409,"column":5},"end":{"line":409,"column":5}},"tags":["branch","if"],"group":"403:4","count":0},{"id":216,"loc":{"start":{"line":404,"column":6},"end":{"line":408,"column":9}},"tags":["statement","line"],"count":3},{"id":217,"loc":{"start":{"line":404,"column":35},"end":{"line":408,"column":7}},"tags":["function"],"name":"@404:35","count":6},{"id":218,"loc":{"start":{"line":405,"column":8},"end":{"line":407,"column":11}},"tags":["statement","line"],"count":6},{"id":219,"loc":{"start":{"line":406,"column":16},"end":{"line":406,"column":24}},"tags":["line"],"count":6},{"id":220,"loc":{"start":{"line":406,"column":17},"end":{"line":406,"column":23}},"tags":["line"],"count":6},{"id":221,"loc":{"start":{"line":420,"column":2},"end":{"line":437,"column":3}},"tags":["function"],"name":"visitLogicalExpression","count":4},{"id":222,"loc":{"start":{"line":421,"column":18},"end":{"line":421,"column":27}},"tags":["statement","variable","line"],"count":4},{"id":223,"loc":{"start":{"line":422,"column":17},"end":{"line":422,"column":65}},"tags":["statement","variable","line"],"count":4},{"id":224,"loc":{"start":{"line":424,"column":4},"end":{"line":436,"column":8}},"tags":["statement","line"],"count":4},{"id":225,"loc":{"start":{"line":426,"column":32},"end":{"line":430,"column":8}},"tags":["line"],"count":4},{"id":226,"loc":{"start":{"line":430,"column":10},"end":{"line":430,"column":14},"identifierName":"test"},"tags":["line"],"count":4},{"id":227,"loc":{"start":{"line":427,"column":14},"end":{"line":427,"column":33}},"tags":["line"],"count":4},{"id":228,"loc":{"start":{"line":427,"column":15},"end":{"line":427,"column":23}},"tags":["line"],"count":4},{"id":229,"loc":{"start":{"line":427,"column":25},"end":{"line":427,"column":32}},"tags":["line"],"count":4},{"id":230,"loc":{"start":{"line":428,"column":13},"end":{"line":428,"column":38}},"tags":["line"],"count":4},{"id":231,"loc":{"start":{"line":431,"column":32},"end":{"line":435,"column":8}},"tags":["line"],"count":4},{"id":232,"loc":{"start":{"line":435,"column":10},"end":{"line":435,"column":14},"identifierName":"test"},"tags":["line"],"count":4},{"id":233,"loc":{"start":{"line":432,"column":14},"end":{"line":432,"column":33}},"tags":["line"],"count":4},{"id":234,"loc":{"start":{"line":432,"column":15},"end":{"line":432,"column":23}},"tags":["line"],"count":4},{"id":235,"loc":{"start":{"line":432,"column":25},"end":{"line":432,"column":32}},"tags":["line"],"count":4},{"id":236,"loc":{"start":{"line":433,"column":13},"end":{"line":433,"column":39}},"tags":["line"],"count":4},{"id":237,"loc":{"start":{"line":448,"column":2},"end":{"line":498,"column":3}},"tags":["function"],"name":"visitConditional","count":9},{"id":238,"loc":{"start":{"line":453,"column":17},"end":{"line":457,"column":14}},"tags":["statement","variable","line"],"count":9},{"id":239,"loc":{"start":{"line":453,"column":17},"end":{"line":457,"column":6}},"tags":["branch","logic"],"group":"453:17","count":9},{"id":240,"loc":{"start":{"line":457,"column":10},"end":{"line":457,"column":14},"identifierName":"path"},"tags":["branch","logic"],"group":"453:17","count":0},{"id":241,"loc":{"start":{"line":453,"column":33},"end":{"line":457,"column":5}},"tags":["function"],"name":"@453:33","count":23},{"id":242,"loc":{"start":{"line":454,"column":13},"end":{"line":456,"column":78}},"tags":["line","statement"],"count":23},{"id":243,"loc":{"start":{"line":454,"column":13},"end":{"line":455,"column":23}},"tags":["branch","logic"],"group":"454:13","count":3},{"id":244,"loc":{"start":{"line":456,"column":9},"end":{"line":456,"column":77}},"tags":["branch","logic"],"group":"454:13","count":20},{"id":245,"loc":{"start":{"line":454,"column":13},"end":{"line":454,"column":48}},"tags":["branch","logic"],"group":"454:13","count":4},{"id":246,"loc":{"start":{"line":455,"column":8},"end":{"line":455,"column":23}},"tags":["branch","logic"],"group":"454:13","count":19},{"id":247,"loc":{"start":{"line":456,"column":9},"end":{"line":456,"column":27}},"tags":["branch","logic"],"group":"456:9","count":3},{"id":248,"loc":{"start":{"line":456,"column":31},"end":{"line":456,"column":77}},"tags":["branch","logic"],"group":"456:9","count":1},{"id":249,"loc":{"start":{"line":460,"column":18},"end":{"line":460,"column":27}},"tags":["statement","variable","line"],"count":9},{"id":250,"loc":{"start":{"line":462,"column":4},"end":{"line":467,"column":5}},"tags":["function"],"name":"tagBranch","count":17},{"id":251,"loc":{"start":{"line":463,"column":6},"end":{"line":463,"column":64}},"tags":["statement","line"],"count":17},{"id":252,"loc":{"start":{"line":464,"column":64},"end":{"line":466,"column":7}},"tags":["branch","line","if"],"group":"464:6","count":8},{"id":253,"loc":{"start":{"line":466,"column":7},"end":{"line":466,"column":7}},"tags":["branch","if"],"group":"464:6","count":9},{"id":254,"loc":{"start":{"line":464,"column":10},"end":{"line":464,"column":33}},"tags":["branch","logic"],"group":"464:10","count":8},{"id":255,"loc":{"start":{"line":464,"column":37},"end":{"line":464,"column":62}},"tags":["branch","logic"],"group":"464:10","count":9},{"id":256,"loc":{"start":{"line":465,"column":8},"end":{"line":465,"column":74}},"tags":["statement","line"],"count":8},{"id":257,"loc":{"start":{"line":469,"column":4},"end":{"line":469,"column":38}},"tags":["statement","line"],"count":9},{"id":258,"loc":{"start":{"line":470,"column":31},"end":{"line":472,"column":5}},"tags":["branch","line","if"],"group":"470:4","count":8},{"id":259,"loc":{"start":{"line":472,"column":5},"end":{"line":472,"column":5}},"tags":["branch","if"],"group":"470:4","count":1},{"id":260,"loc":{"start":{"line":471,"column":6},"end":{"line":471,"column":39}},"tags":["statement","line"],"count":8},{"id":261,"loc":{"start":{"line":474,"column":4},"end":{"line":478,"column":7}},"tags":["statement","line"],"count":9},{"id":262,"loc":{"start":{"line":475,"column":12},"end":{"line":475,"column":36}},"tags":["line"],"count":9},{"id":263,"loc":{"start":{"line":475,"column":13},"end":{"line":475,"column":21}},"tags":["line"],"count":9},{"id":264,"loc":{"start":{"line":475,"column":23},"end":{"line":475,"column":29}},"tags":["line"],"count":9},{"id":265,"loc":{"start":{"line":475,"column":31},"end":{"line":475,"column":35}},"tags":["line"],"count":9},{"id":266,"loc":{"start":{"line":476,"column":11},"end":{"line":476,"column":35}},"tags":["line"],"count":9},{"id":267,"loc":{"start":{"line":480,"column":73},"end":{"line":486,"column":5}},"tags":["branch","line","if"],"group":"480:4","count":5},{"id":268,"loc":{"start":{"line":480,"column":8},"end":{"line":480,"column":29}},"tags":["branch","logic"],"group":"480:8","count":5},{"id":269,"loc":{"start":{"line":480,"column":33},"end":{"line":480,"column":71}},"tags":["branch","logic"],"group":"480:8","count":4},{"id":270,"loc":{"start":{"line":481,"column":6},"end":{"line":485,"column":9}},"tags":["statement","line"],"count":5},{"id":271,"loc":{"start":{"line":482,"column":14},"end":{"line":482,"column":38}},"tags":["line"],"count":5},{"id":272,"loc":{"start":{"line":482,"column":15},"end":{"line":482,"column":23}},"tags":["line"],"count":5},{"id":273,"loc":{"start":{"line":482,"column":25},"end":{"line":482,"column":31}},"tags":["line"],"count":5},{"id":274,"loc":{"start":{"line":482,"column":33},"end":{"line":482,"column":37}},"tags":["line"],"count":5},{"id":275,"loc":{"start":{"line":483,"column":13},"end":{"line":483,"column":36}},"tags":["line"],"count":5},{"id":276,"loc":{"start":{"line":486,"column":39},"end":{"line":497,"column":5}},"tags":["branch","line","if"],"group":"480:4","count":1},{"id":277,"loc":{"start":{"line":497,"column":5},"end":{"line":497,"column":5}},"tags":["branch","if"],"group":"480:4","count":3},{"id":278,"loc":{"start":{"line":487,"column":6},"end":{"line":496,"column":8}},"tags":["statement","line"],"count":1},{"id":279,"loc":{"start":{"line":489,"column":16},"end":{"line":489,"column":32}},"tags":["line"],"count":1},{"id":280,"loc":{"start":{"line":489,"column":17},"end":{"line":489,"column":25}},"tags":["line"],"count":1},{"id":281,"loc":{"start":{"line":489,"column":27},"end":{"line":489,"column":31}},"tags":["line"],"count":1},{"id":282,"loc":{"start":{"line":490,"column":15},"end":{"line":493,"column":11}},"tags":["line"],"count":1},{"id":283,"loc":{"start":{"line":491,"column":19},"end":{"line":491,"column":36}},"tags":["line"],"count":1},{"id":284,"loc":{"start":{"line":492,"column":17},"end":{"line":492,"column":34}},"tags":["line"],"count":1},{"id":285,"loc":{"start":{"line":500,"column":2},"end":{"line":511,"column":3}},"tags":["function"],"name":"noInstrument","count":691},{"id":286,"loc":{"start":{"line":507,"column":6},"end":{"line":510,"column":5}},"tags":["branch","line","if"],"group":"501:4","count":1},{"id":287,"loc":{"start":{"line":510,"column":5},"end":{"line":510,"column":5}},"tags":["branch","if"],"group":"501:4","count":690},{"id":288,"loc":{"start":{"line":502,"column":6},"end":{"line":503,"column":31}},"tags":["branch","logic"],"group":"502:6","count":1},{"id":289,"loc":{"start":{"line":504,"column":6},"end":{"line":506,"column":7}},"tags":["branch","logic"],"group":"502:6","count":690},{"id":290,"loc":{"start":{"line":502,"column":6},"end":{"line":502,"column":15}},"tags":["branch","logic"],"group":"502:6","count":14},{"id":291,"loc":{"start":{"line":503,"column":6},"end":{"line":503,"column":31}},"tags":["branch","logic"],"group":"502:6","count":677},{"id":292,"loc":{"start":{"line":505,"column":8},"end":{"line":505,"column":70}},"tags":["function"],"name":"@505:8","count":14},{"id":293,"loc":{"start":{"line":508,"column":6},"end":{"line":508,"column":18}},"tags":["statement","line"],"count":1},{"id":294,"loc":{"start":{"line":509,"column":6},"end":{"line":509,"column":13}},"tags":["line","statement"],"count":1},{"id":295,"loc":{"start":{"line":513,"column":18},"end":{"line":542,"column":3}},"tags":["statement","variable","line"],"count":8},{"id":296,"loc":{"start":{"line":515,"column":29},"end":{"line":515,"column":42},"identifierName":"visitFunction"},"tags":["line"],"count":8},{"id":297,"loc":{"start":{"line":516,"column":24},"end":{"line":516,"column":37},"identifierName":"visitFunction"},"tags":["line"],"count":8},{"id":298,"loc":{"start":{"line":517,"column":18},"end":{"line":517,"column":31},"identifierName":"visitFunction"},"tags":["line"],"count":8},{"id":299,"loc":{"start":{"line":518,"column":17},"end":{"line":518,"column":30},"identifierName":"visitFunction"},"tags":["line"],"count":8},{"id":300,"loc":{"start":{"line":519,"column":23},"end":{"line":519,"column":45},"identifierName":"visitLogicalExpression"},"tags":["line"],"count":8},{"id":301,"loc":{"start":{"line":520,"column":27},"end":{"line":520,"column":43},"identifierName":"visitConditional"},"tags":["line"],"count":8},{"id":302,"loc":{"start":{"line":521,"column":20},"end":{"line":521,"column":39},"identifierName":"visitObjectProperty"},"tags":["line"],"count":8},{"id":303,"loc":{"start":{"line":522,"column":21},"end":{"line":522,"column":41},"identifierName":"visitArrayExpression"},"tags":["line"],"count":8},{"id":304,"loc":{"start":{"line":525,"column":25},"end":{"line":525,"column":38},"identifierName":"visitFunction"},"tags":["line"],"count":8},{"id":305,"loc":{"start":{"line":526,"column":25},"end":{"line":526,"column":49},"identifierName":"visitVariableDeclaration"},"tags":["line"],"count":8},{"id":306,"loc":{"start":{"line":529,"column":23},"end":{"line":529,"column":37},"identifierName":"visitStatement"},"tags":["line"],"count":8},{"id":307,"loc":{"start":{"line":530,"column":20},"end":{"line":530,"column":34},"identifierName":"visitStatement"},"tags":["line"],"count":8},{"id":308,"loc":{"start":{"line":531,"column":25},"end":{"line":531,"column":39},"identifierName":"visitStatement"},"tags":["line"],"count":8},{"id":309,"loc":{"start":{"line":532,"column":20},"end":{"line":532,"column":34},"identifierName":"visitStatement"},"tags":["line"],"count":8},{"id":310,"loc":{"start":{"line":533,"column":21},"end":{"line":533,"column":41},"identifierName":"visitReturnStatement"},"tags":["line"],"count":8},{"id":311,"loc":{"start":{"line":534,"column":18},"end":{"line":534,"column":35},"identifierName":"visitTryStatement"},"tags":["line"],"count":8},{"id":312,"loc":{"start":{"line":535,"column":20},"end":{"line":535,"column":34},"identifierName":"visitWhileLoop"},"tags":["line"],"count":8},{"id":313,"loc":{"start":{"line":536,"column":22},"end":{"line":536,"column":36},"identifierName":"visitWhileLoop"},"tags":["line"],"count":8},{"id":314,"loc":{"start":{"line":537,"column":17},"end":{"line":537,"column":33},"identifierName":"visitConditional"},"tags":["line"],"count":8},{"id":315,"loc":{"start":{"line":538,"column":21},"end":{"line":538,"column":41},"identifierName":"visitSwitchStatement"},"tags":["line"],"count":8},{"id":316,"loc":{"start":{"line":541,"column":11},"end":{"line":541,"column":23},"identifierName":"noInstrument"},"tags":["line"],"count":8},{"id":317,"loc":{"start":{"line":544,"column":2},"end":{"line":546,"column":5}},"tags":["statement","line"],"count":8},{"id":318,"loc":{"start":{"line":544,"column":31},"end":{"line":546,"column":3}},"tags":["function"],"name":"@544:31","count":168},{"id":319,"loc":{"start":{"line":545,"column":4},"end":{"line":545,"column":45}},"tags":["statement","line"],"count":168},{"id":320,"loc":{"start":{"line":549,"column":9},"end":{"line":568,"column":3}},"tags":["line","statement"],"count":8},{"id":321,"loc":{"start":{"line":550,"column":13},"end":{"line":567,"column":5}},"tags":["line"],"count":8},{"id":322,"loc":{"start":{"line":551,"column":6},"end":{"line":566,"column":7}},"tags":["function"],"name":"@551:6","count":37},{"id":323,"loc":{"start":{"line":553,"column":25},"end":{"line":555,"column":9}},"tags":["branch","line","if"],"group":"553:8","count":2},{"id":324,"loc":{"start":{"line":555,"column":9},"end":{"line":555,"column":9}},"tags":["branch","if"],"group":"553:8","count":35},{"id":325,"loc":{"start":{"line":554,"column":10},"end":{"line":554,"column":17}},"tags":["line","statement"],"count":2},{"id":326,"loc":{"start":{"line":556,"column":8},"end":{"line":562,"column":11}},"tags":["statement","line"],"count":35},{"id":327,"loc":{"start":{"line":557,"column":18},"end":{"line":557,"column":33}},"tags":["line"],"count":35},{"id":328,"loc":{"start":{"line":558,"column":19},"end":{"line":558,"column":21}},"tags":["line"],"count":35},{"id":329,"loc":{"start":{"line":559,"column":17},"end":{"line":559,"column":19}},"tags":["line"],"count":35},{"id":330,"loc":{"start":{"line":560,"column":16},"end":{"line":560,"column":18}},"tags":["line"],"count":35},{"id":331,"loc":{"start":{"line":561,"column":20},"end":{"line":561,"column":64}},"tags":["line"],"count":35},{"id":332,"loc":{"start":{"line":563,"column":8},"end":{"line":563,"column":38}},"tags":["statement","line"],"count":35},{"id":333,"loc":{"start":{"line":564,"column":8},"end":{"line":564,"column":26}},"tags":["statement","line"],"count":35},{"id":334,"loc":{"start":{"line":565,"column":8},"end":{"line":565,"column":54}},"tags":["statement","line"],"count":35}]}}
\No newline at end of file