@alu0100901214/espree-logging-module
Version:
Es un programa para parsear un fragmento de código.
50 lines (43 loc) • 1.69 kB
JavaScript
const escodegen = require('escodegen');
const espree = require('espree');
const estraverse = require('estraverse');
const {version, description} = require('../package.json');
const fs = require('fs');
module.exports = { addLogging };
check = false;
/**
* Add console.log in every Function.
* @param {string} code String with the code.
* @returns {string} Return the string with the console.log inserted.
*/
function addLogging(code, regexPattern) {
var ast = espree.parse(code,{ecmaVersion: espree.latestEcmaVersion, loc: true});
estraverse.traverse(ast, {
enter: function(node, parent) {
if (node.type === 'FunctionDeclaration' ||
node.type === 'FunctionExpression' ||
node.type === 'ArrowFunctionExpression') {
if (regexPattern != null){
if(node.id != null){
if(regexPattern.test(node.id.name))
addBeforeCode(node);
}
}else{
addBeforeCode(node);
}
}
}
});
return escodegen.generate(ast);
}
/**
* Add logs to an AST node.
* @param {object} node An AST node with the function, the console.log will be added inside.
*/
function addBeforeCode(node) {
const name = node.id ? node.id.name : '<anonymous function>';
const parameters = node.params.map(param => `\$\{${param.name}\}`);
const beforeCode = `console.log(\`Entering ${name}(${parameters}) at line ${node.loc.start.line}\`);`;
const beforeNodes = espree.parse(beforeCode, {ecmaVersion:6} ).body;
node.body.body = beforeNodes.concat(node.body.body);
}