UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

56 lines 1.67 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.executeLocationMapQuery = executeLocationMapQuery; const log_1 = require("../../../util/log"); const fileIdRegex = /^(?<file>.*(\.[rR]))-/; function fuzzyFindFile(node, idMap) { if (node?.info.file) { return node.info.file; } else if (node?.info.id) { const file = fileIdRegex.exec(String(node.info.id)); if (file && file.groups?.file.trim()) { return file.groups?.file.trim(); } } else if (node?.info.parent) { const parent = idMap.get(node.info.parent); if (parent) { return fuzzyFindFile(parent, idMap); } } return '<inline>'; } function executeLocationMapQuery({ ast, dataflow: { graph } }, queries) { if (queries.length !== 1) { log_1.log.warn('Id-Map query expects only up to one query, but got', queries.length); } const start = Date.now(); const locationMap = { files: {}, ids: {} }; let count = 0; const inverseMap = new Map(); for (const file of graph.sourced) { locationMap.files[count] = file; inverseMap.set(file, count); count++; } for (const [id, node] of ast.idMap.entries()) { if (node.location) { const file = fuzzyFindFile(node, ast.idMap); locationMap.ids[id] = [ inverseMap.get(file) ?? -1, node.location ]; } } return { '.meta': { timing: Date.now() - start }, map: locationMap }; } //# sourceMappingURL=location-map-query-executor.js.map