1.1.1 • Published 1 year ago

@alu0101436784/espree-logging v1.1.1

Weekly downloads
-
License
-
Repository
-
Last release
1 year ago

Open in Codespaces

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);

CLI con Commander.js

Implementadas opciones de ejecución con Commander:

commander ejemplo

Scripts

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.

funcion addLogging

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.

funcion addBeforeCode

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.

coverage tests

CI con GitHub Actions

Configuración de GitHub Actions:

ci github actions

Página de Actions:

ci github actions