your_img

lsp-ui es un paquete que nos ayuda mostrando información útil sobre el servidor de lenguaje en nuestra interfaz. Voy a ver como configurarlo un poco para ver que utilidad nos puede dar.

En los ejemplos veremos imágenes del servidor de lenguaje de Scala que es lo que estoy configurando ahora mismo.

¿Qué es LSP?

LSP es un protocolo que sirve para comunicar servidores de lenguaje con editores, lo cual nos da en los editores las mismas o similares funcionalidades que ya existían en los IDEs, como por ejemplo navegación entre código, resaltado de sintaxis, comprobación de errores en tiempo real, refactorización …

Antiguamente para poder tener estas características teníamos que tener un modo (plugin) para cada uno de los lenguajes que usásemos, con su configuración, atajos de teclado, etc. Con este cambio solo necesitamos tener el modo LSP que se conectará al servidor de lenguaje que corresponda y tendremos todas las funcionalidades que nos de ese servidor, que por cierto, ese servidor será común entre todos los editores que soportan LSP.

Como no es el tema que quiero tratar en este post no voy a entrar mas en detalle, solo añado que LSP es lo mejor que le ha pasado a Emacs en los últimos años y diría que se podría decir lo mismo para otros editores como Vim

Aquí dejo un par de enlaces con mas información, uno de la Wikipedia y otro de la página de Microsoft .

¿Qué es lsp-ui?

lsp-ui es un modo de emacs que nos crea una interfaz, una UI (User Interface) por encima de LSP, dándonos información en tiempo real del código en el que nos encontramos, como firmas de funciones, acciones que podemos realizar sobre el cursor y documentación relacionada.

Esto es mas o menos lo que estamos acostumbrados a ver en los IDEs mas comunes y ahora lo tenemos en emacs con una configuración mínima.

Instalación

Para la instalación lo mejor es ir a la web del proyecto , apenas son 2 líneas, pero estará mas actualizado que este post.

Configuración

Para ir viendo los ejemplos no los voy a meter en mi fichero de configuración, lo que voy a hacer es ir evaluándolos con M-: para ir viendo en tiempo real como funciona y si merece la pena añadirlo a posteriori en mi fichero de configuración.

Toda la configuración está en la web oficial, pero como quiero probarlo yo mismo aprovecho y lo documento.

lsp-ui-sideline

El sideline es la información que se va a mostrar al final de la propia linea en la que estamos trabajando, por defecto cuando programo con PHP lo tengo desconectado porque me resulta un poco incómodo, sobre todo porque aparece demasiado a la derecha, pero en Scala con el tema del tipado creo que mas que útil va a acabar siendo necesario, así que vamos a ver que ofrece y como activarlo o desactivarlo

Para que todo funcione tenemos que tener el modo lsp-ui-sideline activado para ello ejecutamos M-x lsp-ui-sideline-mode

Apunte rápido

Todo lo que voy a ir metiendo son funciones en lisp para setear variables, con algo así como (setq variable valor) este valor puede ser t para true, activar, y nil, nulo, para desactivar. Como ya he dicho antes las voy a evaluar en mi caso directamente en el buffer de scala, si las queréis dejar activas para todos los buffer de Scala tendréis que añadirlo a la configuración de lsp-ui

  • lsp-ui-sideline-show-diagnostics: Nos sirve para mostrar un diagnostico en tiempo real en el caso de que haya fallado algo (setq lsp-ui-sideline-show-diagnostics t)

Este puede ser muy útil y lo voy a activar en mi modo lsp-ui

  • lsp-ui-sideline-show-hover: Muestra información sobre el objeto o la línea en el que se encuentre el cursor, esto es configurable.

También útil, por ahora lo meteré en mi configuración.

  • lsp-ui-sideline-show-code-actions: Muestra las acciones que podemos ejecutar en la posición actual del cursor. (setq lsp-ui-sideline-show-code-actions t)

Este también lo configuraré por defecto.

Hay mas opciones que no voy a cambiar, dejaré las que vienen por defecto, como el delay para que pinte la información o la forma de pintarla. Para mas opciones lo mejor es la leer la documentación oficial.

Y así es como quiero dejarlo:

Apunte rápido

Como podéis ver no he tocado nada de scala, ni modos ni nada, así que este paquete y su configuración nos valdría para cualquier lenguaje que tengamos con su servidor de lenguaje correspondiente.