UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

127 lines 6.28 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ConstantWikiLinkInfo = void 0; exports.makeDocContextForTypes = makeDocContextForTypes; const doc_types_1 = require("../doc-util/doc-types"); const path_1 = __importDefault(require("path")); const assert_1 = require("../../util/assert"); const doc_auto_gen_1 = require("../doc-util/doc-auto-gen"); const doc_files_1 = require("../doc-util/doc-files"); const doc_cli_option_1 = require("../doc-util/doc-cli-option"); function getNameFromElementIdOrRef(element) { if (typeof element === 'function') { return element.name; } else if (typeof element === 'object' && 'name' in element) { return element.name; } else { return element; } } exports.ConstantWikiLinkInfo = { 'flowr:npm': { url: doc_files_1.FlowrNpmRef, name: 'flowR on npm' }, 'flowr:github': { url: doc_files_1.FlowrGithubRef, name: 'flowR\'s GitHub' }, 'flowr:wiki': { url: doc_files_1.FlowrWikiBaseRef, name: 'flowR\'s wiki' }, 'flowr:docker': { url: doc_files_1.FlowrDockerRef, name: 'flowR\'s Docker Image' }, 'flowr:vscode': { url: doc_files_1.FlowrVsCode, name: 'flowR extension for VS Code' }, 'flowr:positron': { url: doc_files_1.FlowrPositron, name: 'flowR extension for Positron' }, 'flowr:rstudio-addin': { url: doc_files_1.FlowrRStudioAddin, name: 'flowR RStudio Addin' }, 'flowr:radapter': { url: doc_files_1.FlowrRAdapter, name: 'flowR R Adapter' }, 'flowr:benchmarks': { url: 'https://flowr-analysis.github.io/flowr/wiki/stats/benchmark', name: 'flowR benchmark page' }, 'flowr:docs': { url: 'https://flowr-analysis.github.io/flowr/docs', name: 'flowR code docs' }, 'flowr:zenodo': { url: 'https://zenodo.org/doi/10.5281/zenodo.13319290', name: 'flowR on Zenodo' }, }; /** * Creates a wiki context for generating documentation for code elements. * This context provides methods to create links, code snippets, and documentation for code elements. * @param shell - An optional RShell instance to retrieve the R version for the auto-generation header. * @param rootFolders - The root folder(s) of the code base to analyze. Defaults to flower's `src/` **and** `test/` folder. * @example * ```ts * const ctx = makeContextForTypes(); * const linkToFn = ctx.link('myFunction'); * const fnDoc = ctx.doc('myFunction'); * ``` */ function makeDocContextForTypes(shell, ...rootFolders) { if (rootFolders.length === 0) { rootFolders.push(path_1.default.resolve(__dirname, '../../../src'), path_1.default.resolve(__dirname, '../../../test/functionality')); } const { info, program } = (0, doc_types_1.getTypesFromFolder)({ rootFolder: rootFolders, typeNameForMermaid: undefined }); return { doc(element, filter) { return (0, doc_types_1.getDocumentationForType)(getNameFromElementIdOrRef(element), info, '', filter); }, link(element, fmt, filter) { (0, assert_1.guard)(filter?.file === undefined, 'filtering for files is not yet supported for link'); return (0, doc_types_1.shortLink)(getNameFromElementIdOrRef(element), info, fmt?.codeFont, fmt?.realNameWrapper, filter?.fuzzy, filter?.type); }, linkM(cls, element, fmt, filter) { const className = cls.prototype.constructor.name; const sep = (fmt?.hideClass) ? ':::' : '::'; const fullName = `${className}${sep}${String(element)}`; return this.link(fullName, fmt, filter); }, linkO(obj, element, fmt, filter) { const fullName = `${obj.name}::${String(element)}`; return this.link(fullName, fmt, filter); }, linkFile(element) { return (0, doc_types_1.shortLinkFile)(getNameFromElementIdOrRef(element), info); }, hierarchy(element, fmt, filter) { (0, assert_1.guard)(filter === undefined, 'ElementFilter is not yet supported for hierarchy'); return (0, doc_types_1.printHierarchy)({ program, info, root: getNameFromElementIdOrRef(element), ...fmt }); }, code(element, fmt, filter) { (0, assert_1.guard)(filter === undefined, 'ElementFilter is not yet supported for code'); return (0, doc_types_1.printCodeOfElement)({ program, info, ...fmt, }, getNameFromElementIdOrRef(element)); }, async header(filename, purpose) { const rVersion = (await shell?.usedRVersion())?.format(); return (0, doc_auto_gen_1.autoGenHeader)({ filename, purpose, rVersion }); }, mermaid(element, options) { return (0, doc_types_1.visualizeMermaidClassDiagram)(info, { typeNameForMermaid: getNameFromElementIdOrRef(element), ...options }); }, linkPage(pageName, linkText, segment) { let link; let text = linkText; if (pageName in exports.ConstantWikiLinkInfo) { const i = exports.ConstantWikiLinkInfo[pageName]; link = i.url; text ??= i.name; } else { link = `${doc_files_1.FlowrGithubRef}/${pageName.toLowerCase().replaceAll(' ', '-')}`; } text ??= pageName.split('/').pop() ?? pageName; return `[${text}](${link}${segment ? '#' + segment : ''})`; }, linkCode(path, lineNumber) { const lnk = lineNumber ? `${path.toString()}#L${lineNumber}` : path.toString(); return `[${path.toString()}](${encodeURIComponent(lnk)})`; }, cliOption(scriptName, optionName, withAlias = false, quote = true) { return (0, doc_cli_option_1.getCliLongOptionOf)(scriptName, optionName, withAlias, quote); }, replCmd(commandName, quote = true, showStar = false) { return (0, doc_cli_option_1.getReplCommand)(commandName, quote, showStar); } }; } //# sourceMappingURL=doc-context.js.map