UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

62 lines 3.08 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ProvenanceQueryDefinition = void 0; exports.fdefBoundaryParser = fdefBoundaryParser; const ansi_1 = require("../../../util/text/ansi"); const time_1 = require("../../../util/text/time"); const joi_1 = __importDefault(require("joi")); const slice_query_parser_1 = require("../../../cli/repl/parser/slice-query-parser"); const provenance_query_executor_1 = require("./provenance-query-executor"); const df_helper_1 = require("../../../dataflow/graph/df-helper"); /** * Checks whether the given argument represents a fdef boundary with an `f` suffix. */ function fdefBoundaryParser(argument) { const endBracket = argument.indexOf(')'); return argument[endBracket + 1] === 'f'; } function provenanceQueryLineParser(output, line, _config) { const criterion = (0, slice_query_parser_1.sliceCriteriaParser)(line[0]); const stopFdef = fdefBoundaryParser(line[0]); if (!criterion || criterion.length !== 1) { output.stderr(output.formatter.format('Invalid provenance query format, a single slicing criterion must be given in the form "(criterion1)"', { color: 1 /* Colors.Red */, effect: ansi_1.ColorEffect.Foreground, style: 1 /* FontStyles.Bold */ })); return { query: [] }; } return { query: [{ type: 'provenance', criterion: criterion[0], restrictFdef: stopFdef }], rCode: line[1] }; } exports.ProvenanceQueryDefinition = { executor: provenance_query_executor_1.executeProvenanceQuery, asciiSummarizer: async (formatter, analyzer, queryResults, result) => { const out = queryResults; const df = await analyzer.dataflow(); result.push(`Query: ${(0, ansi_1.bold)('provenance', formatter)} (${(0, time_1.printAsMs)(out['.meta'].timing, 0)})`); for (const [key, obj] of Object.entries(out.results)) { result.push(` ╰ Provenance for ${key}`); const dfg = df_helper_1.Dataflow.reduceGraph(df.graph, new Set(obj)); result.push(` ╰ [Mermaid Url](${df_helper_1.Dataflow.visualize.mermaid.url(dfg)})`); } return true; }, fromLine: provenanceQueryLineParser, schema: joi_1.default.object({ type: joi_1.default.string().valid('provenance').required().description('The type of the query.'), criterion: joi_1.default.string().required().description('The slicing criterion to use.'), restrictFdef: joi_1.default.boolean().required().description('Whether to stop on fdef boundaries.') }).description('Provenance query definition'), flattenInvolvedNodes: (queryResults) => { const flattened = []; const out = queryResults; for (const obj of Object.values(out.results)) { flattened.push(...obj); } return flattened; } }; //# sourceMappingURL=provenance-query-format.js.map