Refactorización de código potenciada mediante Árboles de Sintaxis Abstracta

Rate this content
Bookmark

Cuando se refactorizan bases de código grandes, Encontrar y Reemplazar, incluso con expresiones regulares, solo puede llevarte hasta cierto punto. Cuando eso falla, no recurras a actualizaciones manuales dolorosas, en su lugar, utiliza Árboles de Sintaxis Abstracta (AST).

En esta sesión presentamos los AST y mostramos cómo se pueden utilizar para razonar / generar código. Saldrás con una mayor comprensión de cómo puedes actualizar automáticamente el código y nuevos conocimientos sobre cómo funcionan los linters de código en el fondo.

FAQ

Un AST (Árbol de Sintaxis Abstracta) es una representación jerárquica de la estructura de un programa que captura su sintaxis y semántica en una estructura tipo árbol. Se utiliza para analizar y transformar código de manera más eficiente, permitiendo operaciones como la generación de código, la refactorización y la optimización.

AG Grid utiliza ASTs para manejar y mantener grandes cantidades de ejemplos de código en React, transformando ejemplos de TypeScript a React mediante la manipulación de AST para automatizar y optimizar este proceso.

TypeScript proporciona información de tipo detallada que facilita la identificación y manipulación de nodos específicos dentro del AST, lo que es útil para generar código React y manejar tipado genérico a través de interfaces en AG Grid.

Ts-morph es un proyecto que envuelve las funciones del compilador de TypeScript con una abstracción de alto nivel, facilitando la escritura de lógicas para modificar código mediante AST. Se utiliza para introducir tipado genérico en interfaces y optimizar la manipulación de tipos en proyectos grandes.

Trabajar manualmente con AST puede ser tedioso y propenso a errores debido a la complejidad de los árboles de nodos. Herramientas como ts-morph y la automatización mediante scripts pueden simplificar y asegurar la manipulación de AST, haciendo el proceso más eficiente y menos propenso a errores.

AG Grid utiliza técnicas avanzadas para integrar el tipado genérico en sus componentes, permitiendo que los datos de usuario se reflejen en todas las interfaces de la aplicación, mejorando la autocompletación y verificación de tipos en tiempo de desarrollo.

Stephen Cooper
Stephen Cooper
29 min
02 Jun, 2023

Comments

Sign in or register to post your comment.

Video Summary and Transcription

Esta charla explora el poder de los Árboles de Sintaxis Abstracta (AST) en el desarrollo de software. Cubre el uso de AST en el mantenimiento de ejemplos de React, la automatización de la identificación de dependencias y la introducción de tipos genéricos. La charla también discute el uso de AST para razonar y generar código, así como su aplicación en la construcción de complementos de ESLint y modificaciones de código. Además, destaca recursos para explorar AST, probar scripts de AST y construir complementos de Babel.

1. Introducción a los AST

Short description:

Voy a hablarles sobre los AST y el poder que brindan. Comencemos.

Debería tener una introducción así todo el tiempo. Eso sería realmente bueno. Entonces, sí, como han escuchado, voy a hablarles sobre los AST, porque este es un tema que, antes de unirme a AG Grid, siempre me daba un poco de miedo, siempre un poco como, oh, no sé si sé cómo usarlos. Pero una vez que me adentré en ello, metí las manos en el asunto, me ensucié las manos, me di cuenta de que hay mucho poder al usarlos. Y eso es lo que quiero transmitirles hoy y tal vez ayudarles a comenzar su viaje con los AST. Así que comencemos.

2. Misión y tareas clave de AG Grid

Short description:

La misión para nosotros en AG Grid es construir la mejor cuadrícula de datos en JavaScript. Tenemos dos tareas clave: mantener ejemplos de React e introducir tipado genérico. Queremos proporcionar código que se ajuste a sus necesidades y garantizar una integración perfecta con TypeScript.

Entonces, la misión para nosotros en AG Grid es construir la mejor cuadrícula de datos en JavaScript. Y hay varias tareas que debemos realizar para lograrlo. Cuando me uní a la empresa hace dos años, había estas dos tareas clave que debían realizarse.

Necesitábamos mantener miles de ejemplos de React para que cuando consulte nuestra documentación, pueda ver, Quiero esta función, la quiero en React. Todavía estoy usando clases porque mi empresa aún no ha actualizado. O estoy usando hooks o estoy usando hooks con TypeScript. Queremos brindarle el código exactamente de la manera que desea consumirlo.

Y luego, el segundo es que nos encanta TypeScript. Queremos introducir el tipado genérico en todo nuestro producto. Entonces, si nos proporciona una interfaz para los datos de su fila, queremos que eso se refleje en todas nuestras interfaces para que obtenga una autocompletación y verificación de tipos excelentes. Entonces, la pregunta es, ¿cómo voy a hacer esto? Esto es lo que vemos.

QnA

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

Una Guía del Comportamiento de Renderizado de React
React Advanced Conference 2022React Advanced Conference 2022
25 min
Una Guía del Comportamiento de Renderizado de React
Top Content
React es una biblioteca para "renderizar" UI a partir de componentes, pero muchos usuarios se encuentran confundidos acerca de cómo funciona realmente el renderizado de React. ¿Qué significan términos como "renderizado", "reconciliación", "Fibers", y "committing"? ¿Cuándo ocurren los renderizados? ¿Cómo afecta el Contexto al renderizado, y cómo las bibliotecas como Redux causan actualizaciones? En esta charla, aclararemos la confusión y proporcionaremos una base sólida para entender cuándo, por qué, y cómo React renderiza. Veremos: - Qué es realmente el "renderizado" - Cómo React encola los renderizados y el comportamiento de renderizado estándar - Cómo se utilizan las claves y los tipos de componentes en el renderizado - Técnicas para optimizar el rendimiento del renderizado - Cómo el uso del contexto afecta al comportamiento del renderizado - Cómo las bibliotecas externas se integran en el renderizado de React
Concurrencia en React, Explicada
React Summit 2023React Summit 2023
23 min
Concurrencia en React, Explicada
Top Content
¡React 18! ¡Funciones concurrentes! Tal vez ya hayas probado las nuevas APIs como useTransition, o tal vez solo hayas oído hablar de ellas. Pero, ¿sabes cómo React 18 logra las mejoras de rendimiento que trae consigo? En esta charla, echemos un vistazo bajo el capó de las características de rendimiento de React 18: - Cómo React 18 reduce el tiempo que tu página permanece congelada (también conocido como TBT) - Qué sucede exactamente en el hilo principal cuando ejecutas useTransition() - Cuál es la trampa con las mejoras (¡no hay torta gratis!), y por qué Vue.js y Preact se negaron rotundamente a lanzar algo similar
Un Marco para Gestionar la Deuda Técnica
TechLead Conference 2023TechLead Conference 2023
35 min
Un Marco para Gestionar la Deuda Técnica
Top Content
Seamos realistas: la deuda técnica es inevitable y reescribir tu código cada 6 meses no es una opción. La refactorización es un tema complejo que no tiene una solución única para todos. Las aplicaciones de frontend son particularmente sensibles debido a los frecuentes cambios de requisitos y flujos de usuario. Nuevas abstracciones, patrones actualizados y limpieza de esas viejas funciones - todo suena genial en papel, pero a menudo falla en la práctica: los todos se acumulan, los tickets terminan pudriéndose en el backlog y el código legado aparece en cada rincón de tu base de código. Por lo tanto, un proceso de refactorización continua es la única arma que tienes contra la deuda técnica.En los últimos tres años, he estado explorando diferentes estrategias y procesos para refactorizar el código. En esta charla describiré los componentes clave de un marco para abordar la refactorización y compartiré algunos de los aprendizajes acumulados en el camino. Espero que esto te ayude en tu búsqueda de mejorar la calidad del código de tus bases de código.

Luchando contra la Deuda Técnica con la Refactorización Continua
React Day Berlin 2022React Day Berlin 2022
29 min
Luchando contra la Deuda Técnica con la Refactorización Continua
Top Content
Afrontémoslo: la deuda técnica es inevitable y reescribir tu código cada 6 meses no es una opción. La refactorización es un tema complejo que no tiene una solución única para todos. Las aplicaciones de Frontend son particularmente sensibles debido a los frecuentes cambios de requisitos y flujos de usuario. Nuevas abstracciones, patrones actualizados y limpieza de esas viejas funciones - todo suena genial en papel, pero a menudo falla en la práctica: los todos se acumulan, los tickets terminan pudriéndose en el backlog y el código legado aparece en cada rincón de tu base de código. Por lo tanto, un proceso de refactorización continua es la única arma que tienes contra la deuda técnica. En los últimos tres años, he estado explorando diferentes estrategias y procesos para refactorizar el código. En esta charla describiré los componentes clave de un marco para abordar la refactorización y compartiré algunos de los aprendizajes acumulados en el camino. Espero que esto te ayude en tu búsqueda de mejorar la calidad del código de tus bases de código.
De Monolito a Micro-Frontends
React Advanced Conference 2022React Advanced Conference 2022
22 min
De Monolito a Micro-Frontends
Top Content
Muchas empresas en todo el mundo están considerando adoptar Micro-Frontends para mejorar la agilidad empresarial y la escala, sin embargo, hay muchas incógnitas cuando se trata de cómo se ve en la práctica el camino de migración. En esta charla, discutiré los pasos necesarios para migrar con éxito una aplicación React monolítica a una arquitectura de frontend más modular y desacoplada.
Dentro de Fiber: la descripción general en profundidad que querías para TLDR
React Summit 2022React Summit 2022
27 min
Dentro de Fiber: la descripción general en profundidad que querías para TLDR
Quiero proporcionar una descripción general en profundidad de los conceptos importantes detrás de la reconciliación. Luego exploraremos cómo React utiliza el algoritmo y repasaremos algunas palabras mágicas que escuchamos mucho, como coroutines, continuations, fibers, generators, algebraic effects y veremos cómo se relacionan con React.js.

Workshops on related topic

Consejos sobre React Hooks que solo los profesionales conocen
React Summit Remote Edition 2021React Summit Remote Edition 2021
177 min
Consejos sobre React Hooks que solo los profesionales conocen
Top Content
Featured Workshop
Maurice de Beijer
Maurice de Beijer
La adición de la API de hooks a React fue un cambio bastante importante. Antes de los hooks, la mayoría de los componentos tenían que ser basados en clases. Ahora, con los hooks, estos son a menudo componentes funcionales mucho más simples. Los hooks pueden ser realmente simples de usar. Casi engañosamente simples. Porque todavía hay muchas formas en las que puedes equivocarte con los hooks. Y a menudo resulta que hay muchas formas en las que puedes mejorar tus componentes con una mejor comprensión de cómo se puede usar cada hook de React.Aprenderás todo sobre los pros y los contras de los diversos hooks. Aprenderás cuándo usar useState() versus useReducer(). Veremos cómo usar useContext() de manera eficiente. Verás cuándo usar useLayoutEffect() y cuándo useEffect() es mejor.
Diseñando Pruebas Efectivas con la Biblioteca de Pruebas de React
React Summit 2023React Summit 2023
151 min
Diseñando Pruebas Efectivas con la Biblioteca de Pruebas de React
Top Content
Featured Workshop
Josh Justice
Josh Justice
La Biblioteca de Pruebas de React es un gran marco para las pruebas de componentes de React porque responde muchas preguntas por ti, por lo que no necesitas preocuparte por esas preguntas. Pero eso no significa que las pruebas sean fáciles. Todavía hay muchas preguntas que tienes que resolver por ti mismo: ¿Cuántas pruebas de componentes debes escribir vs pruebas de extremo a extremo o pruebas de unidad de nivel inferior? ¿Cómo puedes probar una cierta línea de código que es difícil de probar? ¿Y qué se supone que debes hacer con esa persistente advertencia de act()?
En esta masterclass de tres horas, presentaremos la Biblioteca de Pruebas de React junto con un modelo mental de cómo pensar en el diseño de tus pruebas de componentes. Este modelo mental te ayudará a ver cómo probar cada bit de lógica, si debes o no simular dependencias, y ayudará a mejorar el diseño de tus componentes. Te irás con las herramientas, técnicas y principios que necesitas para implementar pruebas de componentes de bajo costo y alto valor.
Tabla de contenidos- Los diferentes tipos de pruebas de aplicaciones de React, y dónde encajan las pruebas de componentes- Un modelo mental para pensar en las entradas y salidas de los componentes que pruebas- Opciones para seleccionar elementos DOM para verificar e interactuar con ellos- El valor de los mocks y por qué no deben evitarse- Los desafíos con la asincronía en las pruebas de RTL y cómo manejarlos
Requisitos previos- Familiaridad con la construcción de aplicaciones con React- Experiencia básica escribiendo pruebas automatizadas con Jest u otro marco de pruebas unitarias- No necesitas ninguna experiencia con la Biblioteca de Pruebas de React- Configuración de la máquina: Node LTS, Yarn
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