您的位置 首页 > 德语词汇

diagnostics是什么意思、读音 VSCode 建议你启用 gopls,它到底是个什么东东?

老铁们,大家好,相信还有很多朋友对于diagnostics是什么意思、读音和VSCode 建议你启用 gopls,它到底是个什么东东?的相关问题不太懂,没关系,今天就由我来为大家分享分享diagnostics是什么意思、读音以及VSCode 建议你启用 gopls,它到底是个什么东东?的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

diagnostics是什么意思、读音 VSCode 建议你启用 gopls,它到底是个什么东东?

LSP,全称LanguageServerProtocol,即语言服务器协议,这是微软创建的一个协议(目前已有Codenvy,RedHat和Sourcegraph等公司一起支持它的发展)。定义了在编辑器或IDE中与语言服务器之间使用的协议,该语言服务器提供诸如自动完成,转到定义,查找所有引用等语言功能。语言服务器索引格式(LSIF,其发音类似于“elseif”)的目标是支持开发工具或WebUI中的富代码导航,而不需要源代码的本地副本。

目前该协议得到了编辑器和语言社区的广泛支持。

LSP的官方网站:https://microsoft.github.io/language-server-protocol/,GitHub地址:https://github.com/Microsoft/language-server-protocol。目前最新版本(2020-09-06):3.15。

为编程语言添加诸如自动完成、转到定义或鼠标悬停出现文档之类的功能需要付出大量的努力。传统上,这项工作必须为每个开发工具重复进行,因为每个工具为实现相同的特性提供不同的api。

语言服务器(LanguageServer)旨在提供特定语言的智能功能,并通过支持进程间通讯协议与开发工具进行通信。

语言服务器协议(LSP)背后的思想是为这些服务器和开发工具的通信方式提供标准化协议支持。通过这种方式,可以在多个开发工具中重用单个LanguageServer,而这些工具反过来可以用最少的工作支持多种语言。

例如,之前需要为VSCode构建Go插件、为SublimeText构建Go插件、为Vim构建Go插件、为Sourcegraph构建Go插件,很多重复的工作。现在,对于每种语言,LSP允许语言社区将精力集中在一个高性能语言服务器上,这个服务器可以提供代码完成,悬停文档提示、跳转到定义、查找引用等功能,而编辑器和客户端社区可以专注于构建一个单一的、高性能的、直观的和惯用的扩展,这个扩展可以与任何语言服务器通信,即时提供深入的语言支持。

LSP是语言提供商和工具供应商的双赢!

语言服务器(LanguageServer)作为单独的进程运行,开发工具在LSP基础上通过JSON-RPC与服务器通信。下面是一个开发工具和语言服务器在进行编辑时如何通信的例子:

图片来自LSP官网,演示了协议如何在文档引用(uri)和文档位置级别与语言服务器通信。这些数据类型与编程语言无关,适用于所有编程语言。

看一个具体的“textDocument/definition”示例,以Go语言为例,请求如下:

{\n"jsonrpc":"2.0",\n"id":1,\n"method":"textDocument/definition",\n"params":{\n"textDocument":{\n"uri":"/Users/xuxinhua/project/golang/lsp/use.go"\n},\n"position":{\n"line":3,\n"character":12\n}\n}\n}\n

对此请求的响应:

{\n"jsonrpc":"2.0",\n"id":1,\n"result":{\n"uri":"/Users/xuxinhua/project/golang/lsp/provide.go",\n"range":{\n"start":{\n"line":0,\n"character":4\n},\n"end":{\n"line":0,\n"character":11\n}\n}\n}\n}\n

如果你想要开发一个LanguageServer,可以看官方的协议规范。

经过上面对LSP的介绍,你应该猜到gopls(读音:goplease)是什么了吧?!没错,gopls是LSP的一个语言端(Server)实现,是针对Go语言的LSP实现。

在LSP官网列出了相关的实现,包括三个部分。

其中Go语言的实现有两个:(Sourcegraph的不再维护,因为集中维护一个会更好)

在另一个由Sourcegraph维护的网站https://langserver.org/中,不但列出了实现LSP的语言,而且给出了它们对协议的实现完整性。

也就是说gopls是Go官方维护的、对LSP的实现,即一个Go语言的官方LanguageServer

包括VSCode、SublimeText、Atom、Emacs、Vim和Eclipse等很多开发工具。在上文提到的两个网站都有列出。

为了方便开发,还有一些LSP的SDK可以使用。具体可以查看:https://microsoft.github.io/language-server-protocol/implementors/sdks/。

首先说明下,目前gopls还不是稳定版本,处于alpha状态,所以VSCode默认没有启用它。项目地址:https://github.com/golang/tools/tree/master/gopls。

当前gopls的工作重点是确保稳定性(期待发布1.0版本),之前一直受诟骂的是资源占用,目前已经好太多了。

有如下编辑器支持gopls,你可以根据自己喜爱的编辑器查看相应的安装、配置说明。

玩转VSCode的文章会详细介绍在VSCode中使用gopls。同时,后续在VSCode开发其他语言项目时,也会介绍相应语言的LSP。

#32394:https://github.com/golang/go/issues/32394

#35721:https://github.com/golang/go/issues/35721

#29202:https://github.com/golang/go/issues/29202

#32877:https://github.com/golang/go/issues/32877

VSCode:https://github.com/golang/tools/blob/master/gopls/doc/vscode.md

Vim/NeovimVim/Neovim:https://github.com/golang/tools/blob/master/gopls/doc/vim.md

Emacs:https://github.com/golang/tools/blob/master/gopls/doc/emacs.md

Acme:https://github.com/golang/tools/blob/master/gopls/doc/acme.md

SublimeText:https://github.com/golang/tools/blob/master/gopls/doc/subl.md

Atom:https://github.com/golang/tools/blob/master/gopls/doc/atom.md

关于diagnostics是什么意思、读音和VSCode 建议你启用 gopls,它到底是个什么东东?的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023