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.

This talk has been presented at React Summit 2023, check out the latest edition of this React Conference.

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 2022React Advanced 2022
25 min
Una Guía del Comportamiento de Renderizado de React
Top Content
This transcription provides a brief guide to React rendering behavior. It explains the process of rendering, comparing new and old elements, and the importance of pure rendering without side effects. It also covers topics such as batching and double rendering, optimizing rendering and using context and Redux in React. Overall, it offers valuable insights for developers looking to understand and optimize React rendering.
Concurrencia en React, Explicada
React Summit 2023React Summit 2023
23 min
Concurrencia en React, Explicada
Top Content
React 18's concurrent rendering, specifically the useTransition hook, optimizes app performance by allowing non-urgent updates to be processed without freezing the UI. However, there are drawbacks such as longer processing time for non-urgent updates and increased CPU usage. The useTransition hook works similarly to throttling or bouncing, making it useful for addressing performance issues caused by multiple small components. Libraries like React Query may require the use of alternative APIs to handle urgent and non-urgent updates effectively.
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
Today's Talk discusses the importance of managing technical debt through refactoring practices, prioritization, and planning. Successful refactoring requires establishing guidelines, maintaining an inventory, and implementing a process. Celebrating success and ensuring resilience are key to building a strong refactoring culture. Visibility, support, and transparent communication are crucial for addressing technical debt effectively. The team's responsibilities, operating style, and availability should be transparent to product managers.
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
This Talk discusses the importance of refactoring in software development and engineering. It introduces a framework called the three pillars of refactoring: practices, inventory, and process. The Talk emphasizes the need for clear practices, understanding of technical debt, and a well-defined process for successful refactoring. It also highlights the importance of visibility, reward, and resilience in the refactoring process. The Talk concludes by discussing the role of ownership, management, and prioritization in managing technical debt and refactoring efforts.
De Monolito a Micro-Frontends
React Advanced 2022React Advanced 2022
22 min
De Monolito a Micro-Frontends
Top Content
Microfrontends are considered as a solution to the problems of exponential growth, code duplication, and unclear ownership in older applications. Transitioning from a monolith to microfrontends involves decoupling the system and exploring options like a modular monolith. Microfrontends enable independent deployments and runtime composition, but there is a discussion about the alternative of keeping an integrated application composed at runtime. Choosing a composition model and a router are crucial decisions in the technical plan. The Strangler pattern and the reverse Strangler pattern are used to gradually replace parts of the monolith with the new application.
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
Top Content
Daniel Rowe discusses building a TypeScript-first framework at TypeScript Congress and shares his involvement in various projects. Nuxt is a progressive framework built on Vue.js, aiming to reduce friction and distraction for developers. It leverages TypeScript for inference and aims to be the source of truth for projects. Nuxt provides type safety and extensibility through integration with TypeScript. Migrating to TypeScript offers long-term maintenance benefits and can uncover hidden bugs. Nuxt focuses on improving existing tools and finds inspiration in frameworks like TRPC.

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