Actualmente, Dart Code contiene una gran cantidad de código que se asigna desde la API del servidor de análisis a la API de VS Code. Dado que las API de VS Code son específicas de Code, este código es muy específico y no se puede volver a utilizar. Si insertamos este código en una implementación de LSP, entonces podría ser compartido por otros editores que implementen LSP (por ejemplo, Visual Studio tiene soporte de vista previa para él).
Para consumir LSP en VS Code, crea una extensión como de costumbre y luego usa el paquete vscode-languageclient
para crear un adaptador para que VS Code lo use para comunicarse con su servidor. El cliente puede generar el proceso o recibir una función que devuelva un proceso o un conjunto de flujos de entrada/salida ( ver aquí ).
Para Dart Code, necesitaríamos poder comunicarnos con el servidor para solicitudes personalizadas adicionales a las que admite el LSP, lo que se puede hacer con mensajes personalizados .
Nota: "La extensión LSP de Visual Studio solo se puede instalar en el canal de vista previa de Visual Studio. No debe usar la vista previa con fines de producción".
Para consumir LSP en Visual Studio, debe crear una extensión normal (que actualmente tiene la extensión de vista previa de LSP como una dependencia) y luego usar el paquete NuGet Microsoft.VisualStudio.LanguageServer.Client
para crear un adaptador para que Visual Studio se comunique con su servidor.
Según lo anterior, sería necesario que haya una pequeña cantidad de TypeScript para obtener VS Code (y una pequeña cantidad de C# si se hace lo mismo en Visual Studio) para conectarse a una implementación de LSP. Este código es relativamente menor y es solo para generar el servidor y pasarlo al IDE. Los IDE deben anunciar sus capacidades al servidor y comunicarse directamente.
Hay varias maneras posibles de hacer esto:
Además, otros IDE como Atom o Eclipse admiten el LSP.
Si ofrece soporte LSP estándar, mi equipo podría intentar integrar Flutter en el IDE de Eclipse. Creo que el soporte de diversas herramientas sería muy beneficioso para la adaptación de Flutter.
Por cierto, hay un repositorio natebosch/dart_language_server en GitHub mantenido por @natebosch. Parece razonablemente activo.
@rcjsuen Sí, eso es lo que he estado usando para mis experimentos (he enviado algunos PR esta semana) :-)
Se realizó una investigación y comencé a agregar LSP al servidor de análisis de Dart. El progreso se sigue aquí:
https://github.com/dart-lang/sdk/blob/master/pkg/analysis_server/tool/lsp_spec/README.md
No creo que necesitemos más este tema. El complemento de VS Code puede pasar al protocolo LSP en el futuro una vez que sea compatible con todo lo que necesitamos (ya sea a través de solicitudes oficiales o solicitudes personalizadas) para evitar activar dos copias del servidor.
Comentario más útil
Además, otros IDE como Atom o Eclipse admiten el LSP.
Si ofrece soporte LSP estándar, mi equipo podría intentar integrar Flutter en el IDE de Eclipse. Creo que el soporte de diversas herramientas sería muy beneficioso para la adaptación de Flutter.