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