Atualmente, o Dart Code contém muito código que mapeia da API do servidor de análise para a API do VS Code. Como as APIs do VS Code são específicas do Code, esse código é muito específico e não reutilizável. Se enviarmos esse código para uma implementação de LSP, ele poderá ser compartilhado por outros editores que implementem o LSP (por exemplo, o Visual Studio tem suporte de visualização para ele).
Para consumir o LSP no VS Code, você cria uma extensão normalmente e, em seguida, usa o pacote vscode-languageclient
para criar um adaptador para o VS Code usar para se comunicar com seu servidor. O cliente pode gerar o processo ou receber uma função que retorna um processo ou um conjunto ou fluxos de entrada/saída ( veja aqui ).
Para o código Dart, precisaríamos poder nos comunicar com o servidor para solicitações personalizadas adicionais ao que o LSP suporta, o que pode ser feito com mensagens personalizadas .
Observação: "A extensão Visual Studio LSP só pode ser instalada no canal de visualização do Visual Studio. Você não deve usar a visualização para fins de produção."
Para consumir o LSP no Visual Studio, você criaria uma extensão normalmente (que atualmente tem a extensão de visualização do LSP como uma dependência) e, em seguida, usaria o pacote NuGet Microsoft.VisualStudio.LanguageServer.Client
para criar um adaptador para o Visual Studio se comunicar com seu servidor.
Com base no exposto, seria necessário haver uma pequena quantidade de TypeScript para obter o VS Code (e uma pequena quantidade de C# se fizer o mesmo no Visual Studio) para se conectar a uma implementação de LSP. Esse código é relativamente pequeno e serve apenas para gerar o servidor e passar para o IDE. Os próprios IDEs devem anunciar seus recursos ao servidor e se comunicar diretamente.
Existem várias maneiras possíveis de fazer isso:
Além disso, outros IDEs como Atom ou Eclipse suportam o LSP.
Se você oferecesse suporte LSP padrão, minha equipe poderia tentar integrar o Flutter ao Eclipse IDE. Acredito que o suporte a diversas ferramentas seria muito benéfico para a adaptação do Flutter.
A propósito, existe um repositório natebosch/dart_language_server no GitHub mantido por @natebosch. Parece razoavelmente ativo.
@rcjsuen Sim, é isso que tenho usado para meus experimentos (enviei alguns PRs esta semana) :-)
A investigação foi feita e comecei a adicionar o LSP ao servidor de análise do Dart. O progresso é acompanhado aqui:
https://github.com/dart-lang/sdk/blob/master/pkg/analysis_server/tool/lsp_spec/README.md
Acho que não precisamos mais desse assunto. O plug-in do VS Code pode migrar para o protocolo LSP no futuro, uma vez que suporte tudo o que precisamos (por meio de solicitações oficiais ou solicitações personalizadas) para evitar a criação de duas cópias do servidor.
Comentários muito úteis
Além disso, outros IDEs como Atom ou Eclipse suportam o LSP.
Se você oferecesse suporte LSP padrão, minha equipe poderia tentar integrar o Flutter ao Eclipse IDE. Acredito que o suporte a diversas ferramentas seria muito benéfico para a adaptação do Flutter.