Y si alguna de estas verificaciones falla, simplemente retornamos en defy para indicar que el refactor no se puede aplicar aquí. Luego, la respuesta se envía de vuelta al editor, que realiza una traducción análoga para agregar esas refactorizaciones a la lista de sugerencias. El editor ahora desplegó la lista de acciones de código y mostró al usuario cómo podrían mejorar su código. Eligieron la mejor acción de todas, la de variable en línea, y enviamos otra solicitud a tserver. Las acciones de código son un ejemplo de un comando de tserver que ocurre en dos etapas. En getApplicableRefactors solo notificamos a los editores qué refactorizaciones se pueden aplicar, pero no les decimos cómo. Las refactorizaciones pueden parecer especiales aquí, pero hay otras operaciones con dos pasos que ya has utilizado mucho. Las completaciones son otro ejemplo. Volvamos al controlador de esta refactorización. Cuando se le pide que aplique la acción, nuevamente solicitará al compilador el nodo que se está inlineando, las referencias a él, así como la expresión con la que reemplazaremos la variable. Luego actualiza todas las referencias para usar el valor en lugar del identificador de la variable. Y finalmente, se deshace de la variable que ya no se usa. Después de que el editor lee y traduce la respuesta, finalmente se aplica el refactor. Ahora que eres experto en TS Server, impresiona al editor y a los mantenedores de TypeScript la próxima vez que encuentres un error y crea un problema en GitHub. Di que al aplicar la acción de código, la línea modificada está desplazada en uno. Sin más contexto, esto es un error del servidor de lenguaje. Además, si es un error del servidor, podrías reproducir el problema en otro editor. Como otro escenario, di que al hacer clic en la bombilla, la lista mostrada tiene elementos duplicados. Esto es un error del editor. Si realmente quieres lucir como un profesional, incluso puedes echar un vistazo a los registros del servidor de TS o configurar el nivel de traza de TypeScript en verbose en VS Code para ver qué exactamente está recibiendo y devolviendo el servidor. Eso ayudará a identificar dónde van mal las cosas.
aplicar aquí. Luego, la respuesta se envía de vuelta al editor, que realiza una traducción análoga para agregar esas refactorizaciones a la lista de sugerencias.
¡Y fantástico! El editor ahora desplegó la lista de acciones de código y mostró al usuario cómo podrían mejorar su código. Eligieron la mejor acción de todas, la de variable en línea, y enviamos otra solicitud a tserver.
En este punto, es posible que te preguntes, ¿por qué necesitamos hablar con tserver nuevamente? Esto se debe a que las acciones de código son un ejemplo de un comando de tserver que ocurre en dos etapas. En getApplicableRefactors solo notificamos a los editores qué refactorizaciones se pueden aplicar, pero no les decimos cómo. Esto se debe a que no queremos calcular todas las modificaciones de archivo necesarias para las refactorizaciones si ni siquiera vas a hacer clic en ellas. Solo cuando realmente se selecciona la refactorización, el editor le pedirá a tsserver que aplique el elemento elegido.
Las refactorizaciones pueden parecer especiales aquí. Pero hay otras operaciones con dos pasos que ya has utilizado mucho. Las completaciones son otro ejemplo, es posible que tengas un elemento de completado con un objeto exportado desde otro archivo. Si se selecciona, no solo se modificará la línea completada, TypeScript también actualizará tus importaciones para asegurarse de que la nueva referencia sea válida. Ya sabes cómo funciona, el editor registra una selección, que luego el cliente de TypeScript mapeará de nuevo a la refactorización que recibió en la solicitud anterior. A partir de eso, construye los argumentos de los comandos siguiendo el protocolo de TypeScript. Y cuando recibe el resultado, devuelve las ediciones del espacio de trabajo, que incluyen modificaciones de archivos, adiciones y eliminaciones que implica la refactorización.
Volviendo al controlador de esta refactorización. Cuando se le pide que aplique la acción, nuevamente solicitará al compilador el nodo que se está inlineando, las referencias a él, así como la expresión con la que reemplazaremos la variable. Luego actualiza todas las referencias para usar el valor en lugar del identificador de la variable. Y finalmente, se deshace de la variable que ya no se usa. ¡Y ta-da! Después de que el editor lee y traduce la respuesta, finalmente se aplica el refactor.
Ahora que eres experto en TS Server, impresiona al editor y a los mantenedores de TypeScript la próxima vez que encuentres un error y crea un problema en GitHub. Di que al aplicar la acción de código, la línea modificada está desplazada en uno. Sin más contexto, me atrevería a decir que esto es un error del servidor de lenguaje, ya que al final del día el editor está aplicando ciegamente el cambio que el servidor le indicó que hiciera. Además, si es un error del servidor, podrías reproducir el problema en otro editor, así que también puedes intentar eso. Como otro escenario, di que al hacer clic en la bombilla, la lista mostrada tiene elementos duplicados. Esto es un poco más difícil de determinar, pero por mi experiencia, supondría que esto es un error del editor, ya que es el responsable de consultar a los proveedores de acciones de código, combinar los resultados y mostrarlos en la interfaz de usuario. Como una historia divertida, uno de los primeros errores que solucioné en Microsoft fue la duplicación de entradas de autocompletado en Visual Studio. Fue una experiencia fascinante, pero ligeramente traumática. Si realmente quieres lucir como un profesional, incluso puedes echar un vistazo a los registros del servidor de TS o configurar el nivel de traza de TypeScript en verbose en VS Code para ver qué exactamente está recibiendo y devolviendo el servidor. Eso ayudará a identificar dónde van mal las cosas.
Comments