UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

65 lines 2.96 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getFunctionsFromFolder = getFunctionsFromFolder; const typescript_1 = __importDefault(require("typescript")); const assert_1 = require("../../util/assert"); const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const doc_types_1 = require("./doc-types"); function collectHierarchyInformation(sourceFiles, options, fname) { const hierarchyList = []; const visit = (node, sourceFile) => { if (!node) { return; } if (typescript_1.default.isCallExpression(node) || typescript_1.default.isNewExpression(node)) { const name = node.expression.getText(sourceFile); if (!fname || fname.test(name)) { const comments = typescript_1.default.getLeadingCommentRanges(sourceFile.getText(sourceFile), node.getFullStart())?.map(c => { return (0, doc_types_1.removeCommentSymbolsFromTypeScriptComment)(sourceFile.getText(sourceFile).substring(c.pos, c.end).trim()); }); hierarchyList.push({ name: (0, doc_types_1.dropGenericsFromTypeName)(name), node, kind: 'function', comments, lineNumber: (0, doc_types_1.getStartLineOfTypeScriptNode)(node, sourceFile), source: sourceFile, arguments: node.arguments?.map(n => n) ?? [] }); } } typescript_1.default.forEachChild(node, child => visit(child, sourceFile)); }; sourceFiles.forEach(sourceFile => { visit(sourceFile, sourceFile); }); return hierarchyList; } /** * Inspect typescript source code for types and return a report. */ function getFunctionsFromFolder(options) { (0, assert_1.guard)(options.rootFolder !== undefined || options.files !== undefined, 'Either rootFolder or files must be provided'); const fileNames = [...options.files ?? []]; if (options.rootFolder) { for (const fileBuff of fs_1.default.readdirSync(options.rootFolder, { recursive: true })) { const file = fileBuff.toString(); if (file.endsWith('.ts')) { fileNames.push(path_1.default.join(options.rootFolder, file)); } } } const { files, program } = (0, doc_types_1.getTypeScriptSourceFiles)(fileNames); (0, assert_1.guard)(files.length > 0, () => `No source files found for ${JSON.stringify(fileNames)}`); const withProgram = { ...options, program }; const hierarchyList = collectHierarchyInformation(files, withProgram, options.fname); return { info: hierarchyList, program }; } //# sourceMappingURL=doc-functions.js.map