VSCode使用LSP进行Swift开发

栏目: Swift · 发布时间: 7年前

内容简介:目前支持的语言汇总在这里,下图只截出了部分,维护者有民间组织,微软,还有正牌。比如对swift的支持就是Apple维护的官网上有段介绍LSP是如何工作的。

LSP 的全称是 Language Server Protocol ,是微软推出的一项标准化协议,旨在用来统一开发 工具Language Server 之前的通信。它支持语言的 自动补全、定义跳转、查看定义、查看引用、lint、语法高亮 等等。在这之前,各种IDE都需要自己实现一套类似的东西,显得比较重复。借助于 LSP ,开发工具只要按规则接入该协议,便可以享受到各种语言提供的服务。

目前支持的语言汇总在这里,下图只截出了部分,维护者有民间组织,微软,还有正牌。比如对swift的支持就是Apple维护的 sourcekit-lsp

VSCode使用LSP进行Swift开发

LSP如何工作

官网上有段介绍LSP是如何工作的。

client和server之前使用 JSONRPC 进行通信,采用 request-response 的方式,如下图。

VSCode使用LSP进行Swift开发

主要步骤:

  1. 用户打开文档,client发起 textDocument/didOpen 请求,并带上参数。这时文件内容保存在内存中。
  2. 用户编辑文档,client发起 textDocument/didChange 请求,然后server会发回 textDocument/publishDiagnostics 响应,会分析出error和warning。client根据这些error和warning进行对应的UI显示。
  3. 用户执行跳转到符号定义,client发起 textDocument/definition ,server返回相关的位置信息。
  4. 用户关闭文档,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。

VSCode使用LSP进行Swift开发

安装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插件

该插件的作用是让 VSCodeSourceKit-LSP 之间可以进行通信。

  1. 进入到sourceKit-lsp下面的 Editors/vscode/ 目录

    cd Editors/vscode/
    复制代码
  2. 执行 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
复制代码
  1. 安装 sourcekit-lsp-vscode-dev.vsix
code --install-extension out/sourcekit-lsp-vscode-dev.vsix
复制代码

首先要在VSCode中安装 code 命令, cmd+shift+p ,输入shell command,然后安装code命令。如图所示。

VSCode使用LSP进行Swift开发

重启VSCode。

  1. 配置sourcekit-lsp

使用快捷键 cmd, (或者preference-->settings),进入 settings 页面,搜索 sourcekit-lspToolChain Path 中填入 SOURCEKIT_TOOLCHAIN_PATH

VSCode使用LSP进行Swift开发

以上就配置完成了。

最后,打开一个swift的xcode工程,鼠标停留在关键字上,会展示出具体的定义。如下图。

VSCode使用LSP进行Swift开发

另外, 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:

同步更新在我的简书。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Automate This

Automate This

Christopher Steiner / Portfolio / 2013-8-9 / USD 25.95

"The rousing story of the last gasp of human agency and how today's best and brightest minds are endeavoring to put an end to it." It used to be that to diagnose an illness, interpret legal docume......一起来看看 《Automate This》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

html转js在线工具
html转js在线工具

html转js在线工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具