为什么您应该知道语言服务器协议

在工具(客户端)和语言智能提供程序(服务器)之间使用语言服务器协议,将自动完成,转到定义,查找所有引用等功能集成到工具中。

来自语言服务器协议

换句话说,这是在编辑器和语言工具(例如linter,样式控件)之间进行通信的一种标准方法,通常来说,它需要检查源代码的所有内容。

从我的角度来看,这是一个改变规则的游戏,因为它可以重用所有级别的现有基础架构。 如果您现在是语言开发人员,则可以只构建一个语言服务器来支持许多编辑器 ,包括Visual Studio Code和Eclipse Che或Eclipse IDE。 如果要创建编辑器,则可以立即支持实现单个协议的多种语言。 如果您需要使用自己软件中的协议,那么已经有各种语言的库,例如PHP,Java或Haskell。

协议说明

Microsoft本身提供了典型会话的简单描述

  • 用户打开一个文档 。 编辑器通知语言服务器用户打开了一个文档( didOpen ),并且该文档已在内存中。
  • 用户编辑文档。 编辑器将有关文档更改( didChange )通知服务器。 语言服务器将分析此信息,并将发现的错误和警告( diagnostics )通知工具。
  • 用户请求一些特定的命令 。 用户要求符号的定义( definition ),当前光标位置的文本的完成( completion ),签名的帮助( signatureHelp )等。编辑器将正确的请求发送到服务器,服务器做出相应的响应。 然后,编辑者可以使用此信息来满足用户的要求。
  • 用户关闭文档 。 编辑器通知语言服务器用户关闭了一个文档( didClose)并且该文档不再在内存中。

观察结果

显然,在其存储库中有对该协议完整描述 。 它支持所有文本通用的请求,但以针对编程语言的方式支持。 例如,存在一个突出显示文档中的文本的请求( documentHighlight ),该documentHighlight可用于所有类型的文本,因为突出显示某些内容在许多情况下都是有用的。 但是LSP旨在通过专用于对符号的读/写访问的字段来更好地支持编程语言。 重要的是要记住,该协议仅支持文本表示,不能使用它对二进制代码进行操作。

尽管在设计时就考虑了源代码编辑器和本地开发,但是没有什么可以说它不能与远程服务和其他软件进行通信。 对于某些需要快速往返的功能(例如自动完成),延迟可能是个问题。 但是很容易想象它可以与MySQL Workbench等工具一起使用来检查SQL查询。

历史和当前实施

根据LSP历史,最初的灵感来自像Vim和Emacs这样的编辑器,它们使用恶魔来支持多种语言。 然后,一组开发人员创建了OmniSharp ,这是一组库工具,可简化在许多平台和编辑器中使用.NET语言的过程。 最终,Microsoft在这项工作的基础上建立了一个语言中立且依赖JSON-RPC的协议。 尽管一开始它主要用于短毛绒,但现在已扩展为可用于所有目的:重构,语法检查和代码完成。

除了前面提到的Visual Studio CodeEclipse CheEclipse IDE团队以外,还有对emacs和GNOME Builder的语言服务器协议支持。 这里有23种语言服务器的实现列表 ,您还可以看到不仅有编程语言,而且还有Swagger和AP​​I Blueprint的规范,例如API Elements。 您还可以在LangServer.org查找,在其中可以找到每种实现所支持的功能的更详细列表,例如代码完成,转到Definiton,查找引用…。

为什么开放

您永远不能指责Microsoft不了解效率,但是您可以指责它不关心开源。 当微软开始为开源做出贡献时,人们充满了怀疑和怀疑。 鉴于公司先前的某些声明和采取的行动,很难将其归咎于某人。 但是现在我们可以说该公司已经缴纳了会费。 它发布开放源代码软件,在开放源代码基础上构建,并创建旨在供所有人使用的组件。 这确实是一个巨大的变化。 在其创作中有Visual Studio Code ,它是开发人员最好的编辑器之一。 它成功的关键之一是智能组织和诸如语言服务器协议之类的创新。

微软为开源做出了贡献,因为它对企业有利。 它允许与其他公司合作,而无需太多的协调。 它仅通过支持每个人都可以在其上构建其软件和服务的通用平台来工作。

结论

如果您对语言开发感兴趣,那么您就会知道, 支持语言开发的工具对于创建成功的编程语言至关重要 。 语言服务器协议允许语言设计人员和工具开发人员使用一个简单的协议,在更多编辑器中支持新创建的内容。 即使您只是想创建用于静态代码分析的工具来帮助开发人员并简化您的生活,您也会发现将其提供给许多开发人员很有用。 还等什么呢? node中甚至有一个示例实现

翻译自: https://www.javacodegeeks.com/2017/02/know-language-server-protocol.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值