@eagleoutice/flowr
Version:
Static Dataflow Analyzer and Program Slicer for the R Programming Language
47 lines (42 loc) • 1.88 kB
JavaScript
;
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