内容简介:目前支持的语言汇总在这里,下图只截出了部分,维护者有民间组织,微软,还有正牌。比如对swift的支持就是Apple维护的官网上有段介绍LSP是如何工作的。
LSP
的全称是 Language Server Protocol
,是微软推出的一项标准化协议,旨在用来统一开发 工具 与 Language Server
之前的通信。它支持语言的 自动补全、定义跳转、查看定义、查看引用、lint、语法高亮
等等。在这之前,各种IDE都需要自己实现一套类似的东西,显得比较重复。借助于 LSP
,开发工具只要按规则接入该协议,便可以享受到各种语言提供的服务。
目前支持的语言汇总在这里,下图只截出了部分,维护者有民间组织,微软,还有正牌。比如对swift的支持就是Apple维护的 sourcekit-lsp 。
LSP如何工作
官网上有段介绍LSP是如何工作的。
client和server之前使用 JSONRPC
进行通信,采用 request-response
的方式,如下图。
主要步骤:
- 用户打开文档,client发起
textDocument/didOpen
请求,并带上参数。这时文件内容保存在内存中。 - 用户编辑文档,client发起
textDocument/didChange
请求,然后server会发回textDocument/publishDiagnostics
响应,会分析出error和warning。client根据这些error和warning进行对应的UI显示。 - 用户执行跳转到符号定义,client发起
textDocument/definition
,server返回相关的位置信息。 - 用户关闭文档,client发起
textDocument/didClose
请求,文件内容更新到磁盘。
下面来看下具体的request和response,以 textDocument/definition
来举例。
request: 其主要参数是 method
, params
。params会带上当前的文件信息,要查询定义的符号信息(第几行,第几个字符)
{ "jsonrpc": "2.0", "id" : 1, "method": "textDocument/definition", "params": { "textDocument": { "uri": "file:///p%3A/mseng/VSCode/Playgrounds/cpp/use.cpp" }, "position": { "line": 3, "character": 12 } } } 复制代码
response: 响应包括符号定义的文件位置,符号的起始和终止位置。
{ "jsonrpc": "2.0", "id": 1, "result": { "uri": "file:///p%3A/mseng/VSCode/Playgrounds/cpp/provide.cpp", "range": { "start": { "line": 0, "character": 4 }, "end": { "line": 0, "character": 11 } } } } 复制代码
LSP定义
LSP中定义了很多 method
,用来区分不同事件。
如 initialize
,是client发给server的第一个请求。 Shutdown
,关闭请求。 textDocument/definition
,查看符号定义的请求。 ...
其 详细定义文档 在这里。
VSCode中安装swift LSP
众所周知,VSCode是一款功能强大的编辑器,其提供了非常丰富的插件来支持各种语言的开发,并且它是众多编辑器中率先支持 LSP
的。
Swift For LSP
还在早期开发的阶段,因此并没有提供安装包或者插件。所以目前我们只能手动下载安装。步骤如下:
安装XCode
这步应该可以略过。
安装VSCode
这步应该也可以略过。
安装最新swift toolChain
到Swift.org下载最新的主干包,安装好之后,到XCode->Preferences->Components选择刚安装的toolchain。
安装node和npm
由于VSCode的插件都是用js/ts来写的,所以需要js的运行环境。推荐使用直接下载安装包来安装。
验证是否装好了,可以执行以下命令
nmp --version 复制代码
编译并安装SourceKit-LSP
clone仓库:
git clone https://github.com/apple/sourcekit-lsp.git 复制代码
跳转到sourcekit-lsp目录:
cd sourcekit-lsp 复制代码
编译:
swift build 复制代码
编译成功后,会在 .build/debug
找到二进制文件。我们将其移到 /usr/local/bin
目录下,以便可以直接使用。
mv .build/debug/sourcekit-lsp /usr/local/bin 复制代码
这个命令会启动lsp的进程。
sourcekit-lsp 复制代码
安装SourceKit-LSP插件
该插件的作用是让 VSCode
与 SourceKit-LSP
之间可以进行通信。
-
进入到sourceKit-lsp下面的
Editors/vscode/
目录cd Editors/vscode/ 复制代码
-
执行
npm run createDevPackage
npm run createDevPackage 复制代码
如果在这步遇到 npm ERR! 404 Not Found: flatmap-stream@0.1.1
的问题,可以尝试删除lock文件,清除缓存试试。
rm package-lock.json npm cache clean --force 复制代码
- 安装
sourcekit-lsp-vscode-dev.vsix
code --install-extension out/sourcekit-lsp-vscode-dev.vsix 复制代码
首先要在VSCode中安装 code
命令, cmd+shift+p
,输入shell command,然后安装code命令。如图所示。
重启VSCode。
- 配置sourcekit-lsp
使用快捷键 cmd,
(或者preference-->settings),进入 settings
页面,搜索 sourcekit-lsp
, ToolChain Path
中填入 SOURCEKIT_TOOLCHAIN_PATH
。
以上就配置完成了。
最后,打开一个swift的xcode工程,鼠标停留在关键字上,会展示出具体的定义。如下图。
另外, SouceKit-LSP
也是支持 Sublime Text
的,具体配置可以参照 sublime-text配置 。
Suorcekit-LSP支持的特性
目前,因为它还在早期开发中,支持的功能还不是很多,相信以后会越来越完善。
Feature | Status | Notes |
---|---|---|
Swift | :white_check_mark: | |
C/C++/ObjC | :x: | clangd is not available in the recommended toolchain. You can try out C/C++/ObjC support by building clangd from source and putting it in PATH . |
Code completion | :white_check_mark: | |
Quick Help (Hover) | :white_check_mark: | |
Diagnostics | :white_check_mark: | |
Fix-its | :x: | |
Jump to Definition | :white_check_mark: | |
Find References | :white_check_mark: | |
Background Indexing | :x: | Build project to update the index usingIndexing While Building |
Workspace Symbols | :x: | |
Refactoring | :x: | |
Formatting | :x: | |
Folding | :x: | |
Syntax Highlighting | :x: | Not currently part of LSP. |
Document Symbols | :x: |
同步更新在我的简书。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 流程篇 | 避免 evalString 进行回调,使用 JSB 进行手动绑定
- 使用python进行短信轰炸
- 使用 Docker 进行交叉编译
- 使用 Gomock 进行单元测试
- 使用容器Docker进行开发
- 使用DeepLab进行语义分割
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深入理解 Flask
[美]Jack Stouffer / 苏丹 / 电子工业出版社 / 2016-7-1 / 79.00
Flask 是一种具有平缓学习曲线和庞大社区支持的微框架,利用它可以构建大规模的web应用。学习上手Flask非常轻松,但要深入理解却并不容易。 本书从一个简单的Flask应用开始,通过解决若干实战中的问题,对一系列进阶的话题进行了探讨。书中使用MVC(模型-视图-控制器)架构对示例应用进行了转化重构,以演示如何正确地组织应用代码结构。有了可扩展性强的应用结构之后,接下来的章节使用Flask......一起来看看 《深入理解 Flask》 这本书的介绍吧!