@eagleoutice/flowr
Version:
Static Dataflow Analyzer and Program Slicer for the R Programming Language
61 lines • 2.97 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.FlowrAnalyzerPackageVersionsNamespaceFilePlugin = exports.namespaceFileLog = void 0;
const flowr_analyzer_package_versions_plugin_1 = require("./flowr-analyzer-package-versions-plugin");
const semver_1 = require("semver");
const package_1 = require("./package");
const flowr_file_1 = require("../../context/flowr-file");
const log_1 = require("../../../util/log");
exports.namespaceFileLog = log_1.log.getSubLogger({ name: 'flowr-analyzer-package-versions-namespace-file-plugin' });
class FlowrAnalyzerPackageVersionsNamespaceFilePlugin extends flowr_analyzer_package_versions_plugin_1.FlowrAnalyzerPackageVersionsPlugin {
name = 'flowr-analyzer-package-version-namespace-file-plugin';
description = 'This plugin extracts package versions from R NAMESPACE files.';
version = new semver_1.SemVer('0.1.0');
process(ctx) {
const nmspcFiles = ctx.files.getFilesByRole(flowr_file_1.FileRole.Namespace);
if (nmspcFiles.length === 0) {
exports.namespaceFileLog.debug('No namespace file found, cannot extract package versions.');
}
else if (nmspcFiles.length > 1) {
exports.namespaceFileLog.warn(`Found ${nmspcFiles.length} namespace files, expected exactly one.`);
}
/** this will do the caching etc. for me */
const deps = nmspcFiles[0].content();
for (const pkg in deps) {
const info = deps[pkg];
ctx.deps.addDependency(new package_1.Package({
name: pkg,
namespaceInfo: info
}));
for (const exportedSymbol of info.exportedSymbols) {
ctx.deps.functionsContext.addFunctionInfo({
name: exportedSymbol,
packageOrigin: pkg,
isExported: true,
isS3Generic: false,
});
}
for (const exportedFunction of info.exportedFunctions) {
ctx.deps.functionsContext.addFunctionInfo({
name: exportedFunction,
packageOrigin: pkg,
isExported: true,
isS3Generic: false,
});
}
for (const [genericName, classes] of info.exportS3Generics.entries()) {
for (const s3TypeDispatch of classes) {
ctx.deps.functionsContext.addFunctionInfo({
name: genericName,
packageOrigin: pkg,
isExported: true,
isS3Generic: true,
s3TypeDispatch: s3TypeDispatch,
});
}
}
}
}
}
exports.FlowrAnalyzerPackageVersionsNamespaceFilePlugin = FlowrAnalyzerPackageVersionsNamespaceFilePlugin;
//# sourceMappingURL=flowr-analyzer-package-versions-namespace-file-plugin.js.map