Práctica Espree logging
Resumen de lo aprendido
Creamos un AST del código con espree
y luego utilizamos estraverse
para
recorrer los nodos del árbol.
Cada vez que entramos en un nodo, comprobamos su tipo, y si es la definición de una función, procedemos a insertar código en él. Los tipos que buscamos son:
FunctionDeclaration
FunctionExpression
ArrowFunctionExpression
Una vez en el nodo, recogemos la información que necesitamos para construir el
mensage de console.log
(nombre de función, parámetros y número de línea) y creamos
el AST asociado al mismo. Luego concatenamos el cuerpo de dicho nodo al cuerpo
del nodo de la función.
Indicar los valores de los argumentos
Se ha modificado el código de logging-espree.js
para que el log también indique
los valores de los argumentos que se pasaron a la función.
Ejemplo:
function foo(a, b) {
var x = 'blah';
var y = (function (z) {
return z+3;
})(2);
}
foo(1, 'wut', 3);
function foo(a, b) {
console.log(`Entering foo(${ a }, ${ b })`);
var x = 'blah';
var y = function (z) {
console.log(`Entering <anonymous function>(${ z })`);
return z + 3;
}(2);
}
foo(1, 'wut', 3);
Commander.js
CLI conImplementadas opciones de ejecución con Commander:
Scripts
Retos: Funciones flecha & Número de línea
Utilizamos la opción loc
para poder obtener la línea donde se encuentran los
elementos del árbol más fácilmente.
Creamos la expresión del console.log
de manera que muestre el nombre de la
función, sus parámetros y la línea donde se encuentra la función.
Tests & Covering
Utilizamos c8
en lugar de nyc
ya que nyc
no soporta imports de ES Modules.
En nuestro caso, funciona de la misma forma y tiene el mismo efecto.
CI con GitHub Actions
Configuración de GitHub Actions:
Página de Actions: