16 de Junio, 2019

LSP y Vim

Llevo ya unos años usando syntastic en vim, especialmente en Python (y algo en Go, porque he programado menos en este lenguaje). Lo que hace este plug-in es analizar la sintaxis de nuestro código con diferentes herramientas según trabajamos (normalmente al guardar el documento), y nos muestra en la barra lateral si hay errores o warnings.

Es como compilar según programamos, y a mi personalmente me ha servido mucho para mejorar mi python porque esos warnings te enseñan casi sin esfuerzo a escribir código siguiendo la guía de estilo de python (el PEP8). Aunque últimamente estoy volviéndome muy fan de herramientas que dan formato a nuestro código automáticamente, pero esto ya es historia para otra anotación ;).

Analizar el código así tiene ventajas, pero evidentemente tiene un coste, porque cada vez que se guarda el fichero, hay que ejecutar la herramienta que hace el trabajo. En general hablamos de milisegundos, y desde hace un tiempo vim hace esto de forma asíncrona (de fondo, sin bloqueos).

Hasta que empiezas a programar en Scala y tienes el problema de los tiempos de arranque de la máquina virtual de Java :(.

La verdad es que syntastic es una pasada, pero ha costado tiempo añadir soporte para muchos lenguajes y herramientas, y está disponible solo para vim.

Aquí es donde entra Language Server Protocol, que es una propuesta de Microsoft para estandarizar un protocolo para proporcionar la misma funcionalidad que syntastic nos da, y mucho más.

La idea es que ejecutamos un cliente de LSP en nuestro editor, sea cual sea, que se comunicará con un servidor que proporciona la funcionalidad necesaria para el lenguaje en el que estamos desarrollando.

De esta forma los servidores son independientes del editor, y al ser una arquitectura cliente/servidor, no es necesario esperar a que las herramientas arranquen, con lo que la lentitud al arrancar de la máquina virtual de Java es irrelevante (o incluso el análisis de grandes ficheros en python si usamos una herramienta pesada como pylint).

Aparte del análisis hay otras funcionalidades, como acceder a la documentación, auto-completar código semánticamente, refactorizar código (por ejemplo: renombrar variables), etc; todo dependiendo de lo que soporte el cliente y el servidor (LSP es bastante grande).

Ahora mismo hay una buena lista de servidores, y he encontrado un cliente muy fácil de instalar y que funciona muy bien en vim: LanguageClient-neovim.

En python es muy fácil instalar python-language-server y, aunque hace más o menos lo mismo que syntastic, es un poco más rápido y da algunas cosas extra que pueden ser bastante útiles.

Al final todo esto es lo mismo que se puede conseguir en un IDE pesado, pero me parece genial poder contar con estas ayudas en mi editor favorito.

Anotación por Juan J. Martínez, clasificada en: vim, programming.

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Algunas anotaciones relacionadas: