UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

45 lines 2.65 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.InspectRecursionQueryDefinition = void 0; const ansi_1 = require("../../../util/text/ansi"); const joi_1 = __importDefault(require("joi")); const inspect_recursion_query_executor_1 = require("./inspect-recursion-query-executor"); const node_id_1 = require("../../../r-bridge/lang-4.x/ast/model/processing/node-id"); const slice_query_parser_1 = require("../../../cli/repl/parser/slice-query-parser"); const range_1 = require("../../../util/range"); function inspectRecLineParser(output, line, _config) { const criteria = (0, slice_query_parser_1.sliceCriteriaParser)(line[0]); return { query: { type: 'inspect-recursion', filter: criteria }, rCode: criteria ? line[1] : line[0] }; } exports.InspectRecursionQueryDefinition = { executor: inspect_recursion_query_executor_1.executeRecursionQuery, asciiSummarizer: async (formatter, processed, queryResults, result) => { const out = queryResults; result.push(`Query: ${(0, ansi_1.bold)('inspect-recursion', formatter)} (${out['.meta'].timing.toFixed(0)}ms)`); for (const [r, v] of Object.entries(out.recursive)) { const node = (await processed.normalize()).idMap.get(node_id_1.NodeId.normalize(r)); const loc = node ? range_1.SourceLocation.fromNode(node) : undefined; result.push(` - Function ${(0, ansi_1.bold)(r, formatter)} (${range_1.SourceLocation.format(loc)}) is ${v ? '' : 'not '}recursive`); } return true; }, fromLine: inspectRecLineParser, schema: joi_1.default.object({ type: joi_1.default.string().valid('inspect-recursion').required().description('The type of the query.'), filter: joi_1.default.array().items(joi_1.default.string().required()).optional().description('If given, only function definitions that match one of the given slicing criteria are considered. Each criterion can be either `line:column`, `line@variable-name`, or `$id`, where the latter directly specifies the node id of the function definition to be considered.') }).description('Either returns all function definitions alongside whether they are recursive, or just those matching the filters.'), flattenInvolvedNodes: (queryResults) => { const out = queryResults; return Object.keys(out.recursive).filter(id => out.recursive[id]); } }; //# sourceMappingURL=inspect-recursion-query-format.js.map