UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

47 lines (42 loc) 1.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getCfg = getCfg; exports.printCfg = printCfg; exports.printCFGCode = printCFGCode; const cfg_1 = require("../../util/cfg/cfg"); const default_pipelines_1 = require("../../core/steps/pipeline/default-pipelines"); const retriever_1 = require("../../r-bridge/retriever"); const time_1 = require("../../util/time"); const doc_files_1 = require("./doc-files"); const cfg_2 = require("../../util/mermaid/cfg"); const doc_code_1 = require("./doc-code"); async function getCfg(parser, code) { const result = await (0, default_pipelines_1.createDataflowPipeline)(parser, { request: (0, retriever_1.requestFromInput)(code) }).allRemainingSteps(); const cfg = (0, cfg_1.extractCFG)(result.normalize, result.dataflow.graph); return { info: cfg, ast: result.normalize, dataflow: result.dataflow }; } function printCfg(cfg, ast, prefix = 'flowchart TD\n') { return ` ${(0, doc_code_1.codeBlock)('mermaid', (0, cfg_2.cfgToMermaid)(cfg, ast, prefix))} `; } async function printCFGCode(parser, code, { showCode = true, openCode = false, prefix = 'flowchart BT\n' } = {}) { const now = performance.now(); const res = await getCfg(parser, code); const duration = performance.now() - now; const metaInfo = `The analysis required _${(0, time_1.printAsMs)(duration)}_ (including the dataflow analysis, normalization, and parsing with the [${parser.name}](${doc_files_1.FlowrWikiBaseRef}/Engines) engine) within the generation environment.`; return '\n\n' + printCfg(res.info, res.ast, prefix) + (showCode ? ` <details${openCode ? ' open' : ''}> <summary style="color:gray">R Code of the CFG</summary> ${metaInfo} ${(0, doc_code_1.codeBlock)('r', code)} </details> ` : '\n(' + metaInfo + ')\n\n'); } //# sourceMappingURL=doc-cfg.js.map