语言服务器协议

语言服务器协议(LSP)是一种开放的 JSON-RPC 标准,用于使代码编辑器和 IDE 能够与编译器、解释器和其他可编程引擎进行通信。

这一协议的出现大大扩展了轻量级编辑器的功能,使其能够提供接近IDE的编程体验,如语法高亮、代码补全和自动重构。


历史背景

早期的 IDE 实现

在 LSP 出现之前,各大 IDE编辑器通常会各自实现编译器和解释器的支持方式,导致功能不一,缺乏一致性。不同 IDE 对语言支持的广度、深度和质量差异显著,无法提供统一的体验。

LSP 的提出

微软主导了 LSP 的开发和推广,通过标准化编程语言的支持,满足了各种代码编辑器和开发者的需求。LSP 于 2016 年首次由微软在 Visual Studio Code(VSCode)中引入,随后迅速被主流编辑器(如 EmacsSublime Text)广泛采用。

随着协议的广泛应用,许多不同语言的开发者都为各类编辑器编写了相应的 LSP 服务端程序,从而使更多编辑器获得跨语言的开发支持。


功能支持

LSP 支持多种编程功能的标准化实现,使编辑器能够轻松集成复杂的代码处理功能,包括:


影响

对开源和闭源开发工具的影响

LSP 的出现改变了传统编辑器和 IDE 之间的竞争格局,打破了各自封闭的实现模式。通过 LSP,不同 IDE 可以共享同样的语言支持工具,大大降低了重复开发的成本,使功能拓展更加高效。

它使得轻量级文本编辑器(如 Vim 和 Visual Studio Code)能够支持多语言开发功能,从而在一定程度上取代传统的大型 IDE。

跨语言的统一支持

LSP 提供了统一的接口,使得开发者只需编写一次 LSP 服务器,即可在支持 LSP 的任意编辑器中使用,大幅提升开发效率。

对 Emacs 社区的影响

LSP 的标准化对 Emacs 等开源编辑器是巨大的胜利。Emacs 用户可以直接使用语言服务器提供的高级功能,获得类似于闭源 IDE 的高级功能体验,减少了开源编辑器与商业 IDE 之间的功能差距。


发展与未来

业界支持

LSP 获得了广泛的行业支持,包括 JetBrains 等传统 IDE 开发商,以及 VIM、Emacs 等经典编辑器的开发者社区。它已成为现代编辑器与编程语言工具支持的一项重要标准。

潜在拓展

未来,LSP 有可能进一步扩展,支持更多语言特性(例如代码格式化、文档生成等),并可能在云端开发环境中提供更强的支持。


工作原理

语言服务器作为一个独立的进程运行,开发工具使用语言协议通过JSON-RPC与服务器进行通信。以下是在常规编辑会话中工具和语言服务器通信的示例:

Pasted image 20230914004706.png

当用户使用不同的编程语言时,开发工具通常为每种编程语言启动一个语言服务器。以下示例展示了用户在处理Java和SASS文件的会话。

Pasted image 20230914004911.png

网络资源


本文作者:Maeiee

本文链接:语言服务器协议

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!