VSCode使用LSP进行Swift开发

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

内容简介:目前支持的语言汇总在这里,下图只截出了部分,维护者有民间组织,微软,还有正牌。比如对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:

同步更新在我的简书。


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

查看所有标签

猜你喜欢:

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

深入理解 Flask

深入理解 Flask

[美]Jack Stouffer / 苏丹 / 电子工业出版社 / 2016-7-1 / 79.00

Flask 是一种具有平缓学习曲线和庞大社区支持的微框架,利用它可以构建大规模的web应用。学习上手Flask非常轻松,但要深入理解却并不容易。 本书从一个简单的Flask应用开始,通过解决若干实战中的问题,对一系列进阶的话题进行了探讨。书中使用MVC(模型-视图-控制器)架构对示例应用进行了转化重构,以演示如何正确地组织应用代码结构。有了可扩展性强的应用结构之后,接下来的章节使用Flask......一起来看看 《深入理解 Flask》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

SHA 加密
SHA 加密

SHA 加密工具