UNPKG

@eagleoutice/flowr-dev

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

64 lines 3.28 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.normalizeHashCommand = exports.normalizeStarCommand = exports.normalizeCommand = void 0; const ast_1 = require("../../../util/mermaid/ast"); const ansi_1 = require("../../../util/text/ansi"); const core_1 = require("../core"); const repl_clipboard_1 = require("./repl-clipboard"); const defaultmap_1 = require("../../../util/collections/defaultmap"); const r_project_1 = require("../../../r-bridge/lang-4.x/ast/model/nodes/r-project"); function formatInfo(out, type, meta) { return out.formatter.format(`Copied ${type} to clipboard (normalize: ${meta['.meta'].timing + 'ms'}).`, { color: 7 /* Colors.White */, effect: ansi_1.ColorEffect.Foreground, style: 3 /* FontStyles.Italic */ }); } exports.normalizeCommand = { description: 'Get mermaid code for the normalized AST of R code', isCodeCommand: true, usageExample: ':normalize', aliases: ['n'], script: false, argsParser: (args) => (0, core_1.handleString)(args), fn: async ({ output, analyzer }) => { const result = await analyzer.normalize(); const mermaid = (0, ast_1.normalizedAstToMermaid)(result.ast); await repl_clipboard_1.ReplClipboard.print(output, mermaid, formatInfo(output, 'mermaid url', result)); } }; exports.normalizeStarCommand = { description: 'Returns the URL to mermaid.live', isCodeCommand: true, usageExample: ':normalize*', aliases: ['n*'], script: false, argsParser: (args) => (0, core_1.handleString)(args), fn: async ({ output, analyzer }) => { const result = await analyzer.normalize(); const mermaid = (0, ast_1.normalizedAstToMermaidUrl)(result.ast); await repl_clipboard_1.ReplClipboard.print(output, mermaid, formatInfo(output, 'mermaid url', result)); } }; exports.normalizeHashCommand = { description: 'Returns summarization stats for the normalized AST', isCodeCommand: true, usageExample: ':normalize#', aliases: ['n#'], script: false, argsParser: (args) => (0, core_1.handleString)(args), fn: async ({ output, analyzer }) => { const result = await analyzer.normalize(); const counts = new defaultmap_1.DefaultMap(() => 0); let total = 0; const files = result.ast.files.length; r_project_1.RProject.visitAst(result.ast, n => { counts.set(n.type, counts.get(n.type) + 1); total++; }); const num = (s, pad = 0) => output.formatter.format(s.toString().padStart(pad, ' '), { color: 6 /* Colors.Cyan */, effect: ansi_1.ColorEffect.Foreground }); output.stdout(output.formatter.format('Calculated in ' + result['.meta'].timing + 'ms', { color: 7 /* Colors.White */, effect: ansi_1.ColorEffect.Foreground, style: 3 /* FontStyles.Italic */ })); output.stdout(`${num(total)} nodes total over ${num(files)} file(s)`); const longestType = counts.keys().map(p => p.toString().length).reduce((a, b) => Math.max(a, b), 0); for (const [type, count] of counts.entries().toArray().sort((a, b) => b[1] - a[1])) { output.stdout(` ${(type + ':').padEnd(longestType + 1, ' ')} ${num(count, 7)}`); } } }; //# sourceMappingURL=repl-normalize.js.map