@eagleoutice/flowr
Version:
Static Dataflow Analyzer and Program Slicer for the R Programming Language
70 lines • 3.48 kB
JavaScript
;
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