UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

61 lines 2.97 kB
"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