LSP 客户端编写指南

Guidance to writing LSP Client

我有一个个人编辑器,它实现了自己的 "protocol" 代码完成功能,我想切换到语言服务器协议以减轻一些开发负担。但是,我无法完全理解有关客户端实现的 LSP Documentation。它与服务器实现混在一起,找不到两者之间的明显区别。

很多在线文档(包括关于 SO 的问题)都围绕着 VSCode 扩展,我对这些扩展知之甚少而且没有帮助。

如果能帮助我开始编写一个只查询自动完成的简单客户端,我将不胜感激。我用 C++ 编写我的编辑器,如果有任何解释如何创建客户端的教程,我将不胜感激。我可以理解 Python、C、C#、Pure JavaScript、C++、PHP 和类似的语言,因此我可以轻松地学习这些语言的任何教程。

如果有任何不清楚的地方,请告诉我,以便我解释(这是我在 LSP 中的第一个 post :))

我已经成功编写了一个从服务器接收完成结果的客户端。这是(大约)它的作用:

  • 发送 initialize
  • 发送 initialized 通知
  • 发一个textDocument/didOpen

此时,您的服务器应该已准备好响应 textDocument/completion 请求。根据响应,您可能还需要使用 completionItem/resolve。然而,到目前为止,我从来不需要为我使用的服务器使用它。

祝你好运!

当然是 Mattie 引导我走向正确的方向。对我来说最困难的是理解 request/response。 LSP 有一个 very helpful page,名字很不幸(恕我直言)误导了我,"inspection"。事实证明这是 request/response.

上的一个很好的例子