UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

70 lines 3.48 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 fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const post_processing_1 = require("../../post-processing"); const summarizer_1 = require("../../../../util/summarizer"); const time_1 = require("../../../../util/time"); const files_1 = require("../../../../util/files"); const arrays_1 = require("../../../../util/arrays"); function postProcess(featureRoot, info, outputPath, config) { const collected = {}; for (const [filepath, data] of info.entries()) { const value = data.values; for (const [key, val] of Object.entries(value)) { let get = collected[key]; if (!get) { get = (0, post_processing_1.emptySummarizedWithProject)(); collected[key] = get; } get.count.push(val); if (val > 0) { (0, post_processing_1.recordFilePath)(get, filepath, config); } } } const valuesOutStream = fs_1.default.createWriteStream(path_1.default.join(outputPath, 'values.csv')); valuesOutStream.write(`kind,unique-projects,unique-files,${(0, summarizer_1.summarizedMeasurement2CsvHeader)()}\n`); for (const [key, val] of Object.entries(collected)) { const data = val; const sum = (0, summarizer_1.summarizeMeasurement)(data.count); valuesOutStream.write(`${JSON.stringify(key)},${data.uniqueProjects.size},${data.uniqueFiles.size},${(0, summarizer_1.summarizedMeasurement2Csv)(sum)}\n`); } valuesOutStream.close(); // now we read all numeric values to get the top used magic numbers (per file) const valueMap = new Map(); (0, files_1.readLineByLineSync)(path_1.default.join(featureRoot, 'numeric.txt'), (line, lineNumber) => { if (line.length === 0) { return; } if (lineNumber % 2_500 === 0) { console.log(` [${(0, time_1.date2string)(new Date())}] Collecting numeric values ${lineNumber}`); } const [values, context] = JSON.parse(String(line)); const bag = (0, arrays_1.array2bag)(values); for (const [key, val] of bag.entries()) { let get = valueMap.get(key); if (!get) { get = { count: [], uniqueFiles: new Set(), uniqueProjects: new Set() }; valueMap.set(key, get); } get.count.push(val); if (val > 0) { get.uniqueFiles.add(context ?? ''); get.uniqueProjects.add(context?.split(path_1.default.sep)[config.projectSkip] ?? ''); } } }); const magicNumbersOutStream = fs_1.default.createWriteStream(path_1.default.join(outputPath, 'magic-numbers.csv')); magicNumbersOutStream.write(`num,unique-projects,unique-files,${(0, summarizer_1.summarizedMeasurement2CsvHeader)()}\n`); for (const [key, val] of valueMap.entries()) { const sum = (0, summarizer_1.summarizeMeasurement)(val.count); magicNumbersOutStream.write(`${JSON.stringify(key)},${val.uniqueProjects.size},${val.uniqueFiles.size},${(0, summarizer_1.summarizedMeasurement2Csv)(sum)}\n`); } magicNumbersOutStream.close(); } //# sourceMappingURL=post-process.js.map