语言服务器协议:在编辑器启动时同步

language server protocol: sync at editor start-up

我正在为 LSP 实现客户端和服务器端。

我想尽可能严格地遵守协议。

当我启动我的编辑器(客户端)时,它应该通知服务器本地代码库现在是什么样子,(一个 git sha 加上自最近的共同祖先以来的一些变化,)这样服务器就可以在我例如转到定义。

你是如何在 LSP 中做到这一点的?

我知道我可以为自 most-recent-common-ancestor 以来发生变化的每个文档发送 textDocument/didChange

但是服务器如何将其当前的 git SHA 发送给客户端,而客户端如何将最近的共同祖先发送给服务器?据我所知,此信息是必需的,但不是 Langserver 协议的一部分。

LSP 目前的设计假设 LSP 客户端和服务器都可以访问同一文件系统 - 对于这种 "sync" 操作是不必要的。它也不对 SCM 或 Git 做任何假设(这是公平的,因为大多数编写的代码不一定在 Git 存储库中)。

您可以向协议添加扩展,让客户端(IDE 或编辑器)在启动时发送项目的 "snapshot",但它会成为服务器和客户端特定的集成,减少使用LSP的价值。