El servidor de protocolo de idiomas ( LSP ) es una, abierta JSON-RPC basado en el protocolo para su uso entre los editores de código fuente o entornos de desarrollo integrado (IDE) y servidores que proporcionan la programación en lenguaje características específicas de. El objetivo del protocolo es permitir que el soporte del lenguaje de programación se implemente y distribuya independientemente de cualquier editor o IDE dado. [1]
Historia
LSP se desarrolló originalmente para Microsoft Visual Studio Code y ahora es 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. El protocolo es compatible y ha sido adoptado por las tres empresas. [2] [3] Su especificación está alojada y desarrollada en GitHub . [4]
Fondo
Los IDE modernos brindan a los desarrolladores funciones sofisticadas como finalización de código , refactorización , navegación a la definición de un símbolo, resaltado de sintaxis y marcadores de error y advertencia.
Por ejemplo, en un lenguaje de programación basado en texto, un programador puede querer cambiar el nombre de un método read
. El programador podría editar manualmente los archivos de código fuente respectivos y cambiar las apariciones apropiadas del nombre del método antiguo por el nuevo nombre, o en su lugar utilizar las capacidades de refactorización de un IDE para realizar todos los cambios necesarios automáticamente. Para poder soportar este estilo de refactorización, un IDE necesita una comprensión sofisticada del lenguaje de programación en el que está escrito el código fuente del programa . Una herramienta de programación sin dicha comprensión, por ejemplo, una que realice una búsqueda y reemplazo ingenua en su lugar. —Podría introducir errores. Al cambiar el nombre de un read
método, por ejemplo, la herramienta no debe reemplazar la coincidencia parcial en una variable que podría ser llamada readyState
, ni debe reemplazar la parte de un comentario de código que contiene la palabra "ya". Tampoco el cambio de nombre de una variable local read
, por ejemplo, debería terminar alterando variables con nombres idénticos en otros ámbitos .
Los compiladores o intérpretes convencionales para un lenguaje de programación específico generalmente no pueden proporcionar estos servicios de lenguaje , porque están escritos con el objetivo de transformar el código fuente en código objeto o ejecutar el código inmediatamente. Además, los servicios de lenguaje deben poder manejar código fuente que no esté bien formado , por ejemplo, porque el programador está en medio de la edición y aún no ha terminado de escribir una declaración, procedimiento u otra construcción. Además, los pequeños cambios en un archivo de código fuente que se realizan durante la escritura suelen cambiar la semántica del programa. Para proporcionar retroalimentación instantánea al usuario, la herramienta de edición debe poder evaluar muy rápidamente las consecuencias sintácticas y semánticas de una modificación específica. Por lo tanto, los compiladores e intérpretes ofrecen un pobre candidato para producir la información necesaria para que la consuma una herramienta de edición. [5]
Antes del diseño e implementación del Protocolo de servidor de idiomas para el desarrollo de Visual Studio Code, la mayoría de los servicios de idiomas generalmente estaban vinculados a un IDE u otro editor determinado. En ausencia del Protocolo de servidor de idiomas, los servicios de idiomas se implementan normalmente utilizando una API de extensión específica de la herramienta. Proporcionar el mismo servicio de idioma a otra herramienta de edición requiere un esfuerzo para adaptar el código existente para que el servicio pueda apuntar a las interfaces de extensión del segundo editor. [6]
El Protocolo de servidor de idiomas permite desacoplar los servicios de idiomas del editor para que los servicios puedan estar contenidos dentro de un servidor de idiomas de propósito general . Cualquier editor puede heredar un soporte sofisticado para muchos idiomas diferentes haciendo uso de los servidores de idiomas existentes. De manera similar, un programador involucrado en el desarrollo de un nuevo lenguaje de programación puede hacer que los servicios para ese lenguaje estén disponibles para las herramientas de edición existentes. [5] El uso de servidores de idiomas a través del Protocolo de servidor de idiomas también reduce la carga de las herramientas de edición para los proveedores, ya que los proveedores no necesitan desarrollar sus propios servicios de idiomas para los idiomas que el proveedor pretende admitir, siempre que el idioma Los servidores ya se han implementado. El protocolo de servidor de idiomas también permite la distribución y el desarrollo de servidores aportados por un tercero interesado, como los usuarios finales, sin la participación adicional del proveedor del compilador para el lenguaje de programación en uso o del proveedor del editor al que se está agregando soporte de idiomas. [ cita requerida ]
LSP no está restringido a lenguajes de programación. Se puede utilizar para cualquier tipo de lenguaje basado en texto, como especificaciones [7] o lenguajes específicos de dominio (DSL) . [8]
Resumen técnico
Cuando un usuario edita uno o más archivos de código fuente utilizando una herramienta habilitada para el protocolo del servidor de idiomas, la herramienta actúa como un cliente que consume los servicios de idiomas proporcionados por un servidor de idiomas . La herramienta puede ser un editor de texto o IDE y los servicios de idiomas pueden ser refactorización , finalización de código , etc.
El cliente informa al servidor sobre lo que está haciendo el usuario, por ejemplo, abrir un archivo, insertar un carácter en una posición de texto específica. El cliente también puede solicitar al servidor que realice un servicio de idioma, por ejemplo, que formatee un rango específico en el documento de texto. El servidor responde a la solicitud de un cliente con una respuesta adecuada. Por ejemplo, la solicitud de formato se responde mediante una respuesta que transfiere el texto formateado al cliente o mediante una respuesta de error que contiene detalles sobre el error.
El protocolo del servidor de idiomas define los mensajes que se intercambiarán entre el cliente y el servidor de idiomas. Son JSON-RPC precedidos por encabezados similares a HTTP. Los mensajes pueden provenir del servidor o del cliente.
El protocolo no establece ninguna disposición sobre cómo se transfieren las solicitudes, respuestas y notificaciones entre el cliente y el servidor. Por ejemplo, el cliente y el servidor podrían ser componentes dentro del mismo proceso intercambiando cadenas JSON a través de llamadas a métodos. También podrían ser diferentes procesos en la misma o en diferentes máquinas que se comunican a través de enchufes de red .
Registro
Un registro de servicios de idiomas global , alojado por la Fundación Eclipse, debería hacer que los servidores de idiomas estén disponibles públicamente. [9] Además, hay listas de implementaciones compatibles con LSP, mantenidas por la comunidad Langserver.org [10] o Microsoft. [11]
Referencias
- ^ Efftinge, Sven; Spönemann, Miro (11 de diciembre de 2016). "Explicación del protocolo del servidor de idiomas" . Fundación Eclipse . Consultado el 25 de abril de 2017 .
- ^ Krill, Paul (27 de junio de 2016). "El protocolo de servidor de idiomas respaldado por Microsoft se esfuerza por lograr la interoperabilidad del lenguaje y las herramientas" . InfoWorld . Consultado el 26 de abril de 2017 .
- ^ Handy, Alex (27 de junio de 2016). "Codenvy, Microsoft y Red Hat colaboran en Language Server Protocol" . Tiempos SD . Consultado el 26 de abril de 2017 .
- ^ "protocolo-servidor-lenguaje-microsoft" . GitHub . Consultado el 29 de marzo de 2021 .
- ^ a b Juárez, Seth (12 de mayo de 2016). "Anders Hejlsberg sobre la construcción del compilador moderno" . Microsoft . Consultado el 22 de febrero de 2017 .
- ^ Efftinge, Sven (diciembre de 2016). "Eclipse está aprendiendo nuevos protocolos" . Consultado el 26 de abril de 2017 .
- ^ Tomassetti, Gabriele (16 de febrero de 2017). "Por qué debería conocer el protocolo del servidor de idiomas" . Federico Tomassetti . Consultado el 8 de mayo de 2017 .
- ^ Neumann, Alexander (1 de junio de 2016). "Xtext 2.11 unterstützt Language Server Protocol" [Xtext 2.11 admite el protocolo de servidor de idiomas]. Desarrollador Heise (en alemán). Heise Medien . Consultado el 8 de mayo de 2017 .
- ^ Mohilo, Dominik (28 de junio de 2016). "Polyglott dank Language Server Protocol: Microsoft, Red Hat y Codenvy streben nach der universellen IDE" [Políglota gracias al Language Server Protocol: Microsoft, Red Hat y Codenvy se esfuerzan por lograr el IDE universal]. Jaxenter (en alemán). Software y medios de soporte . Consultado el 8 de mayo de 2017 .
- ^ "Langserver.org" . Langserver.org . Consultado el 8 de mayo de 2017 , a través de Sourcegraph.
- ^ Gamma, Erich (21 de enero de 2019). "Servidores de idiomas" . Microsoft . Consultado el 25 de enero de 2019 , a través de GitHub.
enlaces externos
- Página web oficial