Los árboles no son solo follaje: ASTs y uso práctico

Rate this content
Bookmark

Los ASTs son prevalentes en todo lo que hacemos. ESLint, Typescript, etc nos permiten sumergirnos en nuestro código fuente de una manera con la que podríamos no estar familiarizados. Echemos un vistazo a cómo algunas herramientas modernas utilizan ASTs para mejorar nuestras vidas como desarrolladores. Algunas de las herramientas a cubrir incluyen: TS-Morph, Typescript, TreeSitter y ESlint. Dependiendo del tiempo, puedo profundizar en varias herramientas y patrones para trabajar con ASTs y cómo pueden encajar en cualquier flujo de trabajo de desarrollador moderno.

FAQ

Un AST, o Árbol de Sintaxis Abstracta, es una estructura que representa las partes importantes de un código, omitiendo detalles menos relevantes como paréntesis o puntos y comas. Su función principal es facilitar la manipulación del código en diversas herramientas de desarrollo.

Los ASTs se utilizan en múltiples áreas como la compilación de código, por ejemplo, convertir TypeScript en JavaScript, el análisis de código mediante herramientas como ESLint, y la edición de código con herramientas como Prettier para formatear código automáticamente.

ESLint utiliza ASTs para permitir a los desarrolladores escribir reglas o extensiones personalizadas que ayuden a mantener los estándares de codificación y realizar análisis de código, mejorando la calidad y consistencia del software.

Herramientas como Babel, TypeScript, ESLint y Prettier utilizan ASTs para realizar tareas como compilación de código, análisis, formateo y más, mejorando la eficiencia y calidad del trabajo de los desarrolladores.

Prettier es una herramienta de formateo de código que descompone el código en un AST y luego lo reconstruye siguiendo un estilo estándar. Esto asegura que el código sea consistente y legible sin que los desarrolladores tengan que formatearlo manualmente.

TypeScript utiliza ASTs para transformar código TypeScript en JavaScript. Esto es parte del proceso de compilación donde el código es analizado, manipulado y luego generado en un formato que los navegadores pueden entender y ejecutar.

Tree sitter es una herramienta que soporta análisis de sintaxis para múltiples lenguajes y está integrada en editores como NeoVim. Escrito en C, es altamente portátil y puede incluso compilarse en wasm para usarse en navegadores, facilitando el desarrollo de IDEs o editores de texto online.

Chris Griffing
Chris Griffing
9 min
15 Nov, 2023

Comments

Sign in or register to post your comment.

Video Summary and Transcription

Los ASTs, o árboles de sintaxis abstracta, son utilizados por herramientas populares como Babel, TypeScript, ESlint y Prettier para mejorar la experiencia del desarrollador. Tienen varios casos de uso, incluyendo la compilación y el análisis de código. Las herramientas de edición y escritura pueden ser mejoradas usando ASTs, con ejemplos que incluyen el formateo con Prettier, las anotaciones de tipo en los editores de JetBrains y los mods de código para actualizaciones de marco. Ts-morph es una herramienta útil para las transformaciones de código, mientras que Tree Sitter es una herramienta portátil que soporta muchos idiomas y puede ser utilizada para construir IDEs o editores de texto en el navegador.

1. Introducción a los ASTs

Short description:

Hoy hablaré sobre los ASTs y cómo los árboles no son solo follaje. Los ASTs, o árboles de sintaxis abstracta, representan las partes importantes de nuestro código. Herramientas populares como Babel, TypeScript, ESlint y Prettier utilizan ASTs para mejorar la experiencia del desarrollador. Los ASTs tienen varios casos de uso, incluyendo la compilación y el análisis de código. ESLint, una herramienta basada en ASTs, se utiliza ampliamente para el análisis de código.

Hola a todos. Mi nombre es Chris y hoy hablaré sobre los ASTs y cómo los árboles no son solo follaje. Primero, ¿quién soy? Transmito programación demasiado en Twitch, soy un YouTuber perezoso, y soy un ingeniero senior de front end en Fairwinds. En Fairwinds, podemos ayudarte a optimizar y gestionar tus clusters de Kubernetes a gran escala. Entonces, primero, ¿qué es un AST? Es un tipo de árbol de sintaxis. Los árboles de sintaxis concreta representan cada detalle de nuestro código. Eso significa los paréntesis, los corchetes, los puntos y comas, la indentación, todo. Los árboles de sintaxis abstracta en realidad representan las partes importantes de nuestro código. Entonces, si pensamos en una declaración if, la cláusula y el bloque son nodos separados pero aún relacionados y vinculados entre sí. Echemos un vistazo a una imagen que lo explica un poco más. Entonces, aquí tenemos un ejemplo de una secuencia de declaraciones. Dentro de esa secuencia de declaraciones vemos un bucle while y una declaración de retorno. Dentro del bucle while, vemos la condición y el cuerpo. Y dentro de la condición, vemos un operador de comparación y las cosas que se comparan. Todas estas cosas se ramifican y se unen, casi como un árbol genealógico, lo cual es bastante interesante. Algunas herramientas populares que la mayoría de nosotros usamos día a día son Babel, TypeScript, ESlint y Prettier. Todos estos utilizan ASTs para mejorar nuestra experiencia de desarrollador. Entonces, ¿qué están haciendo? ¿Cuáles son algunos casos de uso comunes para ellos? ¿Por qué querrías usar ASTs para escribir herramientas de desarrollo? Bueno, algunos casos de uso son la compilación, el análisis de código, las herramientas de edición tooling, y los mods de código. Para la compilación, podríamos pensar tal vez en TypeScript siendo convertido en JavaScript a través de TSC, que significa TypeScript Compiler. En el pasado, convertir ES6 en ES5 a través de Babel es una forma de hacerlo. Ahora usamos versiones más modernas de JavaScript en navegadores que aún no los soportan. Eso es lo que está haciendo Babel. Y técnicamente, Babel solía llamarse six-to-five cuando estaba limitado a ES6 y ES5. También tenemos JSX siendo convertido en React.createElement. Ese es otro paso del compilador. Y los compiladores en general para otros lenguajes, sabes, para convertir C en ensamblador. Esa es otra forma de compilar usando ASTs. Cuando pensamos en análisis de código, probablemente lo primero que pensamos es en ESLint. Pero hay algunas herramientas más antiguas como JSHint que no estaban basadas en AST. La razón por la que ESLint es la que todos nos importa y pensamos en estos días es porque es más fácil escribir una regla o una extensión para ESLint a través de ASTs en lugar de la forma en que JSHint lo hacía en el pasado.

2. Herramientas de edición y escritura con ASTs

Short description:

Para las herramientas de edición, podríamos considerar el formato con Prettier, las anotaciones de tipo en los editores de JetBrains, el resaltado de sintaxis con resaltado semántico en VS Code y los mods de código para actualizaciones de marco. La escritura de herramientas utilizando ASTs implica el uso de TypeScript (ts), unist, tsmorph y tree sitter. Unist proporciona una línea de base para otras herramientas como HAST, MDEST, ZAST, SAS, SCS y less. Ts-morph es útil para transformaciones de código como react-code-mod.

Para las herramientas de edición, podríamos considerar el formato. Prettier descompone nuestro código en un AST y lo reconstruye con la indentación estándar, donde van los corchetes, todas esas cosas de una manera puramente estándar que no tenemos que preocuparnos o hacer manualmente, lo cual es genial. Las anotaciones de tipo en los editores de JetBrains son realmente geniales. Así que podrías obtener los nombres de los argumentos de una función anotados. Si no estás pasando un objeto con props, si estás pasando argumentos ordenados, tener esos nombres es realmente agradable como una experiencia de desarrollador. También pueden anotar tipos inferidos cuando estás asignando una variable o un valor de retorno.

Otro aspecto realmente interesante de las herramientas de edición es el resaltado de sintaxis. Ten en cuenta que la mayoría de los resaltados de sintaxis se basan en gramáticas de texto, que son fundamentalmente expresiones regulares bajo el capó, pero VS Code incluye una característica llamada resaltado semántico que utiliza conocimientos de los servidores de lenguaje para varios lenguajes para darnos un resaltado un poco más preciso de lo que está pasando en nuestro código.

Y finalmente, los mods de código. Así que piensa en las actualizaciones de marco. Hoy en día, no tenemos que hacer import React from React, y si tienes una base de código que está haciendo eso, si has actualizado tus empaquetadores o compiladores, es posible que ya no necesites hacer eso. Así que en su lugar, podríamos tener un mod de código de React que lo elimine automáticamente en toda la base de código en lugar de ir archivo por archivo, eliminando manualmente esas cosas. Otra opción es convertir la función dot bind this en una función de flecha, que es lo que un dot bind this para una función está haciendo bajo el capó, pero es solo azúcar sintáctica. Todas estas cosas son agradables para los autores de marcos y bibliotecas para implementar como cosas que nos ayudan a actualizar y mantenernos al día, porque no quieren tratar y lidiar con bugs para versiones antiguas de su marco de todos modos.

Entonces, ¿cómo podrías escribir algunas herramientas usando ASTs? ¿Cuáles son algunas herramientas o herramientas de escritura? Bueno, veamos ts, es decir, TypeScript. Veamos unist, tsmorph y tree sitter. Esos son los que realmente voy a profundizar. Así que ts es literalmente TypeScript. Solo importarías TypeScript, harías ts dot create source file a partir del fragmento de texto que tienes, y luego puedes iterar cada nodo dentro de ese árbol usando for-each-child, buscando el tipo de nodo que te interesa. Aquí, estoy buscando una declaración de clase A. Unist es muy interesante porque no hay un estándar para cómo los ASTs deben especificar props y cómo podemos entender qué partes del código son y qué tipo de nodo es, etc. Una cosa a recordar, sin embargo, es que unist no está destinado a ser autosuficiente, es una línea de base para que otras cosas la utilicen. Así, HAST para HTML, MDEST para Markdown, ZAST para XML, o SAS para CSS, SCS, y less. Todas estas herramientas añaden sus propias props a ese tipo de nodo que ayudan a darnos un poco más de información sobre qué está haciendo el código y más metadatos que podemos usar para manipular ese código o entenderlo mejor. Una cosa importante es que hay algo así como 32 funciones de utilidad escritas para unist, y probablemente haya incluso más. Todas estas funciones de utilidad pueden ser utilizadas para cualquier árbol de sintaxis compatible con unist, lo que significa que no tienes que escribir muchas de esas funciones de patrón de visitante a mano, lo cual es realmente genial. ts-morph es muy interesante porque es útil para las transformaciones de código. Piensa en mods de código como react-code-mod. Creo que react-code-mod usa JS code shift, pero podría estar equivocado al respecto. Pero aún así, ts-morph es algo que tengo experiencia

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Depuración Web Moderna
JSNation 2023JSNation 2023
29 min
Depuración Web Moderna
Top Content
Pocos desarrolladores disfrutan depurando, y la depuración puede ser compleja para las aplicaciones web modernas debido a los múltiples marcos, lenguajes y bibliotecas utilizados. Pero, las herramientas de desarrollo han avanzado mucho en facilitar el proceso. En esta charla, Jecelyn profundizará en el estado moderno de la depuración, las mejoras en DevTools y cómo puedes usarlas para depurar tus aplicaciones de manera confiable.
El Futuro de las Herramientas de Rendimiento
JSNation 2022JSNation 2022
21 min
El Futuro de las Herramientas de Rendimiento
Top Content
Nuestra comprensión del rendimiento y la experiencia del usuario ha evolucionado mucho a lo largo de los años. Las herramientas de desarrollo web necesitan evolucionar de manera similar para asegurarse de que sean centradas en el usuario, accionables y contextuales donde se refiere a las experiencias modernas. En esta charla, Addy te guiará a través de cómo Chrome y otros han estado pensando en este problema y qué actualizaciones han estado haciendo a las herramientas de rendimiento para reducir la fricción para construir grandes experiencias en la web.
TypeScript y React: Secretos de un matrimonio feliz
React Advanced Conference 2022React Advanced Conference 2022
21 min
TypeScript y React: Secretos de un matrimonio feliz
Top Content
TypeScript y React son inseparables. ¿Cuál es el secreto de su exitosa unión? Bastante código extrañamente extraño. Aprende por qué useRef siempre se siente extraño, cómo manejar los genéricos en los hooks personalizados y cómo los tipos de unión pueden transformar tus componentes.
Los tipos más útiles de React
React Day Berlin 2023React Day Berlin 2023
21 min
Los tipos más útiles de React
Top Content
No pensamos en React como si tuviera sus propios tipos. Pero los tipos de React son una parte fundamental del marco de trabajo - supervisados por el equipo de React, y coordinados con las principales lanzamientos de React.En esta charla de codificación en vivo, veremos todos los tipos que te has estado perdiendo. ¿Cómo obtienes el tipo de props de un componente? ¿Cómo sabes qué ref toma un componente? ¿Deberías usar React.FC? ¿Y qué pasa con JSX.Element?Te irás con un montón de ideas emocionantes para llevar a tus aplicaciones de React, y esperamos que con una nueva apreciación por las maravillas de React y TypeScript trabajando juntos.
Deja de Escribir tus Rutas
Vue.js London 2023Vue.js London 2023
30 min
Deja de Escribir tus Rutas
Cuanto más trabajas en una aplicación, más complicado se vuelve su enrutamiento y más fácil es cometer un error. "¿Se llamaba la ruta usuarios o usuario?", "¿Tenía un parámetro id o era userId?". Si solo TypeScript pudiera decirte cuáles son los nombres y parámetros posibles. Si solo no tuvieras que escribir una sola ruta más y dejar que un complemento lo haga por ti. En esta charla repasaremos lo que se necesitó para traer rutas automáticamente tipadas para Vue Router.
Haciendo Magia: Construyendo un Marco de Trabajo Primero-TypeScript
TypeScript Congress 2023TypeScript Congress 2023
31 min
Haciendo Magia: Construyendo un Marco de Trabajo Primero-TypeScript
Voy a profundizar en los internos de Nuxt para describir cómo hemos construido un marco de trabajo primero-TypeScript que está profundamente integrado con el IDE del usuario y la configuración de comprobación de tipos para ofrecer seguridad de tipo de pila completa de extremo a extremo, sugerencias para diseños, middleware y más, opciones de configuración de tiempo de ejecución tipadas e incluso enrutamiento tipado. Además, destacaré lo que más me emociona hacer en los días venideros y cómo TypeScript hace eso posible no solo para nosotros sino para cualquier autor de bibliotecas.

Workshops on related topic

React, TypeScript y TDD
React Advanced Conference 2021React Advanced Conference 2021
174 min
React, TypeScript y TDD
Top Content
Featured WorkshopFree
Paul Everitt
Paul Everitt
ReactJS es extremadamente popular y, por lo tanto, ampliamente soportado. TypeScript está ganando popularidad y, por lo tanto, cada vez más soportado.

¿Los dos juntos? No tanto. Dado que ambos cambian rápidamente, es difícil encontrar materiales de aprendizaje precisos.

¿React+TypeScript, con los IDEs de JetBrains? Esa combinación de tres partes es el tema de esta serie. Mostraremos un poco sobre mucho. Es decir, los pasos clave para ser productivo, en el IDE, para proyectos de React utilizando TypeScript. En el camino, mostraremos el desarrollo guiado por pruebas y enfatizaremos consejos y trucos en el IDE.
Mejores Prácticas y Consejos Avanzados de TypeScript para Desarrolladores de React
React Advanced Conference 2022React Advanced Conference 2022
148 min
Mejores Prácticas y Consejos Avanzados de TypeScript para Desarrolladores de React
Top Content
Featured Workshop
Maurice de Beijer
Maurice de Beijer
¿Eres un desarrollador de React tratando de obtener los máximos beneficios de TypeScript? Entonces esta es la masterclass para ti.En esta masterclass interactiva, comenzaremos desde lo básico y examinaremos los pros y contras de las diferentes formas en que puedes declarar componentes de React usando TypeScript. Después de eso, pasaremos a conceptos más avanzados donde iremos más allá de la configuración estricta de TypeScript. Aprenderás cuándo usar tipos como any, unknown y never. Exploraremos el uso de predicados de tipo, guardias y comprobación exhaustiva. Aprenderás sobre los tipos mapeados incorporados, así como cómo crear tus propias utilidades de mapa de tipo nuevo. Y comenzaremos a programar en el sistema de tipos de TypeScript usando tipos condicionales e inferencia de tipos.
Consejos y Trucos Profundos de TypeScript
Node Congress 2024Node Congress 2024
83 min
Consejos y Trucos Profundos de TypeScript
Top Content
Workshop
Josh Goldberg
Josh Goldberg
TypeScript tiene un sistema de tipos poderoso con todo tipo de características sofisticadas para representar estados de JavaScript salvajes y extravagantes. Pero la sintaxis para hacerlo no siempre es sencilla, y los mensajes de error no siempre son precisos al decirte qué está mal. Vamos a profundizar en cómo funcionan muchas de las características más poderosas de TypeScript, qué tipos de problemas del mundo real resuelven, y cómo dominar el sistema de tipos para que puedas escribir código TypeScript verdaderamente excelente.
Practica Técnicas de TypeScript Construyendo una Aplicación con Componentes de Servidor React
TypeScript Congress 2023TypeScript Congress 2023
131 min
Practica Técnicas de TypeScript Construyendo una Aplicación con Componentes de Servidor React
Workshop
Maurice de Beijer
Maurice de Beijer
En esta masterclass práctica, Maurice te guiará personalmente a través de una serie de ejercicios diseñados para empoderarte con una profunda comprensión de los Componentes de Servidor React y el poder de TypeScript. Descubre cómo optimizar tus aplicaciones, mejorar el rendimiento y desbloquear nuevas posibilidades.
 
Durante la masterclass, realizarás:
- Maximizar la mantenibilidad y escalabilidad del código con prácticas avanzadas de TypeScript
- Desatar los beneficios de rendimiento de los Componentes de Servidor React, superando enfoques tradicionales
- Potenciar tu TypeScript con el poder de los Tipos Mapeados
- Hacer tus tipos TypeScript más seguros con Tipos Opacos
- Explorar el poder de los Tipos de Plantillas Literales al usar Tipos Mapeados
 
Maurice estará virtualmente a tu lado, ofreciendo una guía completa y respondiendo a tus preguntas mientras navegas por cada ejercicio. Al final de la masterclass, habrás dominado los Componentes de Servidor React, armado con un nuevo arsenal de conocimientos de TypeScript para potenciar tus aplicaciones React.
 
No pierdas esta oportunidad de elevar tu experiencia en React a nuevas alturas. Únete a nuestra masterclass y desbloquea el potencial de los Componentes de Servidor React con TypeScript. Tus aplicaciones te lo agradecerán.
Tipos avanzados de TypeScript para diversión y confiabilidad
TypeScript Congress 2022TypeScript Congress 2022
116 min
Tipos avanzados de TypeScript para diversión y confiabilidad
Workshop
Maurice de Beijer
Maurice de Beijer
Si estás buscando sacar el máximo provecho de TypeScript, este masterclass es para ti! En este masterclass interactivo, exploraremos el uso de tipos avanzados para mejorar la seguridad y previsibilidad de tu código TypeScript. Aprenderás cuándo usar tipos como unknown o never. Exploraremos el uso de predicados de tipo, guardias y verificación exhaustiva para hacer tu código TypeScript más confiable tanto en tiempo de compilación como en tiempo de ejecución. Aprenderás sobre los tipos mapeados incorporados, así como cómo crear tus propias utilidades de mapeo de tipos. Y comenzaremos a programar en el sistema de tipos de TypeScript utilizando tipos condicionales e inferencia de tipos.
¿Estás familiarizado con los conceptos básicos de TypeScript y quieres profundizar? Entonces únete a mí con tu computadora portátil en este masterclass avanzado e interactivo para aprender todos estos temas y más.
Puedes encontrar las diapositivas, con enlaces, aquí: http://theproblemsolver.nl/docs/ts-advanced-workshop.pdf
Y el repositorio que utilizaremos está aquí: https://github.com/mauricedb/ts-advanced
Dominando Node.js Test Runner
TestJS Summit 2023TestJS Summit 2023
78 min
Dominando Node.js Test Runner
Workshop
Marco Ippolito
Marco Ippolito
Node.js test runner es moderno, rápido y no requiere bibliotecas adicionales, pero entenderlo y usarlo bien puede ser complicado. Aprenderás a utilizar Node.js test runner a su máximo potencial. Te mostraremos cómo se compara con otras herramientas, cómo configurarlo y cómo ejecutar tus pruebas de manera efectiva. Durante la masterclass, haremos ejercicios para ayudarte a sentirte cómodo con el filtrado, el uso de afirmaciones nativas, la ejecución de pruebas en paralelo, el uso de CLI y más. También hablaremos sobre trabajar con TypeScript, hacer informes personalizados y la cobertura de código.