El Protocolo de Servidor de Lenguaje (LSP, por sus siglas en inglés) es un estándar abierto basado en JSON-RPC diseñado para facilitar la comunicación entre los editores de código fuente o entornos de desarrollo integrados (IDE) y los servidores que proporcionan herramientas de "inteligencia de lenguaje".
¿Qué es el LSP?
El objetivo principal del LSP es permitir que el soporte para lenguajes de programación se implemente y distribuya de manera independiente del editor o IDE utilizado. Esto significa que las funcionalidades avanzadas, como el completado de código, el resaltado de sintaxis, la marcación de advertencias y errores, y las rutinas de refactorización, no necesitan ser programadas específicamente para cada editor.
Historia y Origen
El LSP fue desarrollado originalmente para Microsoft Visual Studio Code y posteriormente se convirtió en un estándar abierto. El 27 de junio de 2016, Microsoft anunció una colaboración con Red Hat y Codenvy para estandarizar la especificación del protocolo, la cual se desarrolla y aloja actualmente en GitHub.
El Problema que Resuelve el LSP
Los IDEs modernos ofrecen funciones sofisticadas que requieren un entendimiento profundo del lenguaje de programación. Por ejemplo, al renombrar un método, una herramienta simple de búsqueda y reemplazo podría introducir errores al modificar palabras similares en comentarios o variables en otros ámbitos. Para evitar esto, el IDE necesita comprender la semántica del lenguaje.
Tradicionalmente, los compiladores o intérpretes no eran aptos para estas tareas porque su objetivo es transformar el código en código objeto o ejecutarlo inmediatamente. Además, los servicios de lenguaje deben manejar código que no está bien formado (mientras el programador escribe) y responder instantáneamente a cambios mínimos.
La Fragmentación de los Servicios de Lenguaje
Antes del LSP, la mayoría de los servicios de lenguaje estaban ligados a un IDE específico mediante APIs de extensión. Para llevar el mismo soporte a otro editor, era necesario adaptar el código a las interfaces de extensión de ese segundo editor, lo que generaba un problema de redundancia y esfuerzo excesivo.
Beneficios del Protocolo
- Desacoplamiento: Permite separar los servicios de lenguaje del editor.
- Interoperabilidad: Cualquier editor puede heredar soporte para múltiples lenguajes utilizando servidores de lenguaje existentes.
- Reducción de Carga: Los desarrolladores de editores no necesitan crear sus propios servicios de lenguaje desde cero.
- Soporte de Terceros: Facilita que terceros, y usuarios finales, contribuyan al desarrollo de servidores de lenguaje sin necesidad de involucrar al proveedor del compilador o del editor.
Funcionamiento Técnico
Cuando un usuario edita archivos utilizando una herramienta compatible con LSP, el editor actúa como un cliente que consume los servicios de un servidor de lenguaje.
Intercambio de Mensajes
El cliente informa al servidor sobre las acciones del usuario, como abrir un archivo o insertar un lado de texto. El servidor responde a las solicitudes del cliente, como formatear un rango de texto o proporcionar sugerencias de completado. Los mensajes se intercambian mediante JSON-RPC, precedidos por encabezados similares a los de HTTP.
Versatilidad
El LSP no se limita únicamente a los lenguajes de programación; puede ser utilizado para cualquier tipo de lenguaje basado en texto, incluyendo especificaciones o lenguajes de dominio específico (DSL).

