UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

108 lines 5.69 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.postProcess = postProcess; const common_syntax_probability_1 = require("../../common-syntax-probability"); const post_processing_1 = require("../../post-processing"); const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const numbers_1 = require("../../../../util/numbers"); const summarizer_1 = require("../../../../util/summarizer"); function addToList(data, dataAccess, filepath, config) { data.count.push(dataAccess); if (dataAccess > 0) { (0, post_processing_1.recordFilePath)(data, filepath, config); } } function summarizeForBracket(dataAccess, data, filepath, config) { for (const [key, val] of Object.entries(dataAccess)) { const numericKey = Number(key); const get = data.get(numericKey) ?? (0, common_syntax_probability_1.emptyCommonSyntaxTypeCounts)(() => []); if (typeof val === 'bigint' || typeof val === 'string') { // it is for argument 0 const sumGet = get; const numericVal = (0, numbers_1.bigint2number)(val); sumGet.count.push(numericVal); if (numericVal > 0) { (0, post_processing_1.recordFilePath)(sumGet, filepath, config); } } else { (0, common_syntax_probability_1.appendCommonSyntaxTypeCounter)(get, val); } data.set(numericKey, get); } } function writeSingleOrDoubleEmpty(outputPath, key, name, vals) { const out = fs_1.default.createWriteStream(path_1.default.join(outputPath, `data-access-type-${key}-${name}.csv`)); // name is for fields like number etc. to allow to group multiple entries out.write(`kind,unique-projects,unique-files,${(0, summarizer_1.summarizedMeasurement2CsvHeader)()}\n`); out.write(`"0",${vals.uniqueProjects.size},${vals.uniqueFiles.size},${(0, summarizer_1.summarizedMeasurement2Csv)((0, summarizer_1.summarizeMeasurement)(vals.count))}\n`); out.close(); } function writeSingleOrDoubleBrackets(data, outputPath, key) { for (const [name, vals] of data.entries()) { // the 0 column if ('uniqueProjects' in vals) { writeSingleOrDoubleEmpty(outputPath, key, name, vals); } else { // non-0-column const out = fs_1.default.createWriteStream(path_1.default.join(outputPath, `data-access-type-${key}-${name}.csv`)); // name is for fields like number etc. to allow to group multiple entries out.write(`kind,name,${(0, summarizer_1.summarizedMeasurement2CsvHeader)()}\n`); for (const [entryName, values] of Object.entries(vals)) { if (Array.isArray(values)) { out.write(`${JSON.stringify(entryName)},"",${(0, summarizer_1.summarizedMeasurement2Csv)((0, summarizer_1.summarizeMeasurement)(values.flat()))}\n`); } else { for (const [keyName, keyValue] of Object.entries(values)) { out.write(`${JSON.stringify(entryName)},${JSON.stringify(keyName)},${(0, summarizer_1.summarizedMeasurement2Csv)((0, summarizer_1.summarizeMeasurement)(keyValue.flat()))}\n`); } } } out.close(); } } } /** * */ function postProcess(featureRoot, info, outputPath, config) { const summarize = { singleBracket: new Map(), doubleBracket: new Map(), chainedOrNestedAccess: (0, post_processing_1.emptySummarizedWithProject)(), longestChain: (0, post_processing_1.emptySummarizedWithProject)(), deepestNesting: (0, post_processing_1.emptySummarizedWithProject)(), byName: (0, post_processing_1.emptySummarizedWithProject)(), bySlot: (0, post_processing_1.emptySummarizedWithProject)() }; // initialize the special 0 summarize.singleBracket.set(0, (0, post_processing_1.emptySummarizedWithProject)()); summarize.doubleBracket.set(0, (0, post_processing_1.emptySummarizedWithProject)()); for (const [filepath, value] of info.entries()) { const dataAccess = value.dataAccess; addToList(summarize.chainedOrNestedAccess, dataAccess.chainedOrNestedAccess, filepath, config); addToList(summarize.longestChain, dataAccess.longestChain, filepath, config); addToList(summarize.deepestNesting, dataAccess.deepestNesting, filepath, config); addToList(summarize.byName, dataAccess.byName, filepath, config); addToList(summarize.bySlot, dataAccess.bySlot, filepath, config); summarizeForBracket(dataAccess.singleBracket, summarize.singleBracket, filepath, config); summarizeForBracket(dataAccess.doubleBracket, summarize.doubleBracket, filepath, config); } const metaOut = fs_1.default.createWriteStream(path_1.default.join(outputPath, 'data-access-meta.csv')); metaOut.write(`kind,unique-projects,unique-files,${(0, summarizer_1.summarizedMeasurement2CsvHeader)()}\n`); for (const [key, value] of Object.entries(summarize)) { const data = value; if ('uniqueProjects' in data) { metaOut.write(`${JSON.stringify(key)},${data.uniqueProjects.size},${data.uniqueFiles.size},${(0, summarizer_1.summarizedMeasurement2Csv)((0, summarizer_1.summarizeMeasurement)(data.count))}\n`); continue; } writeSingleOrDoubleBrackets(data, outputPath, key); } metaOut.close(); } //# sourceMappingURL=post-process.js.map