# ast-types

# Objetivos

Construya un paquete npm y publíquelo en GitHub Registry con ámbito @ULL-ESIT-PL-2122 y nombre el nombre del repo asignado.

El módulo además de exportar la función spread provee un ejecutable spread que se llama así:

spread input.js output.js
1

el cual realiza una traducción del operador es6 ... a versiones anteriores de JS sobre input.js dejando la salida en output.js. Tiene una solución en la sección Translating the ES6 spread operator ... to ES5 de estos apuntes.

Una parte de los conceptos y habilidades a adquirir con esta práctica se explican en la sección Creating and publishing a node.js module en GitHub y en NPM. Léala con detenimiento antes de hacer esta práctica.

# Pruebas

Deberá añadir pruebas usando Mocha y Chai o Jest. Repase las secciones Testing with Mocha and Chai y Jest. Añada un estudio de covering. See the notes in covering. Añada CI con GitHub Actions.

# Informe y Documentación

Documente el módulo incorporando un README.md: Como se instala, como se usa el ejecutable, como se carga la librería, etc.

Use GitHub Pages en el directorio docs.

No haga el informe de la práctica en el README.md sino que utilice el generador estático Vuepress (opens new window) para hacer el informe.

Para el despliegue (opens new window) del informe puede

  • mover los ficheros generados por VuePress del directorio src/.vuepress/dist/ al directorio docs/).

  • Recuerde poner base en su Vuepress config.js con el nombre de su repo. Algo así:

    module.exports = {
      title: 'Lab ast-types Report',
      base: '/ast-types-casiano-rodriguez-leon-alumno5/',
      ...
    }
    
    1
    2
    3
    4
    5
  • Añada un fichero con nombre .nojekyll (opens new window) en su directorio docs/.

La documentación de la API de la función exportada usando JsDoc la puede dejar accesible en el despliegue (directorio docs/api) o puede tratar de integrarla con Vuepress JsDoc Plugin (opens new window).

Añada el informe de Covering también (directorio docs/covering o similar).

# Challenge: SpreadElements inside an ArrayExpression

With ES6 spread syntax it is easy to create a new array using an existing array:

let parts = ['shoulders', 'knees'];
let lyrics = ['head', ...parts, 'and', 'toes'];
//  ["head", "shoulders", "knees", "and", "toes"]
1
2
3

The same can be done in former versions of JS using Array.concat:

> parts = ['shoulders', 'knees'];
> lyrics = [].concat('head', parts, 'and', 'toes')
[ 'head', 'shoulders', 'knees', 'and', 'toes' ] // makes a shallow copy of parts
1
2
3

But can be achieved with other strategies.

Extend your translator to cover this use of the spread operator inside an ArrayExpression.

Publish it and update the version following the Semantic Versioning rules.

# References

# ast-types

# ASTs Anatomy

# Packages

# Testing

# Documentation

# Semantic versioning and npm

Grading Rubric#

#Labs

  1. Task GitHub-AluXXXX Form
  2. Lab GitHub Campus Expert
  3. Lab GitHub Project Board
  4. Lab GitPod and Visual Studio Code
  5. Lab IAAS
  6. Lab Espree Logging
  7. Lab Hello Compilers
  8. Lab Constant Folding
  9. Lab ast-types
  10. Lab egg-parser
  11. Lab Lexer Generator
  12. Lab The Egg Interpreter
  13. Lab Adding OOP to the Egg Parser
  14. Lab Extending the Egg Interpreter
  15. Lab TFA: Final Project PL
  16. Task Training Exam for PL

Comments#

Last Updated: 10 months ago