一个基于开放 语言服务器协议 的 Swift 实现。语言服务器协议用于工具(客户端)和语言智能提供者(服务器)之间,以将诸如自动完成、跳转到定义、查找所有引用等功能集成到工具中。
目前,此实现被 Swift for Visual Studio Code 使用。
Apple Swift version 4.1 (swiftlang-902.0.48 clang-902.0.37.1)
)% cd <path-to-clone>
% make debug
或使用 Xcode
% cd <path-to-clone>
% make xcodeproj
% cd <path-to-clone>
% make test
语言服务器本身依赖于语言服务器客户端与之交互。 此服务器已被开发为与 Visual Studio Code 配合使用。 但应该注意的是,任何实现了该协议的客户端应该都可以工作,因此也会被支持。
本节提供了一个使用 Visual Studio Code 客户端以交互方式调试语言服务器的工作流程示例。 这些说明分为两个部分。 第一部分解释了如何生成和配置用于调试的 Xcode 项目。 第二部分解释了如何配置 Visual Studio Code 插件以使用调试可执行文件。
在包含此存储库克隆的目录中使用 SwiftPM 生成一个 Xcode 项目。
% git clone https://github.com/RLovelett/langserver-swift.git
% cd langserver-swift
% make xcodeproj
由于语言服务器客户端(例如,VSCode)实际上会启动语言服务器,因此需要告知 LLDB 等待应用程序启动。 这可以在 Xcode 中打开生成的项目后进行配置。 见下面的截图。
下一步是构建可执行文件并启动 LLDB。 这两个步骤都可以通过转到“Product > Run”或键盘快捷键 ⌘R 来执行。 构建完成后,Xcode 应报告类似“Waiting to attach to LanguageServer : LanguageServer”的内容。
最后一步是确定 TARGET_BUILD_DIR
。 这用于在下一节中告诉 VSCode 扩展调试语言服务器的位置。
从当前工作目录包含先前由 SwiftPM 生成的 Xcode 项目的终端,您可以从 xcodebuild
获取此信息。
% xcodebuild -project langserver-swift.xcodeproj -target "LanguageServer" -showBuildSettings | grep "TARGET_BUILD_DIR"
TARGET_BUILD_DIR = /Users/ryan/Library/Developer/Xcode/DerivedData/langserver-swift-gellhgzzpradfqbgjnbtkvzjqymv/Build/Products/Debug
或者使用 make
% make print_target_build_dir
记下此值,稍后会用到。
在 Visual Studio Code 中打开包含 Visual Studio Code 扩展克隆的目录。
% git clone https://github.com/RLovelett/vscode-swift.git
% code .
启动 TypeScript 编译器或构建任务(例如,⇧⌘B 或 Tasks: Run Build Task)。
现在打开 src/extension.ts
并为调试可执行文件提供 TARGET_BUILD_DIR
的值。 更改应类似于以下补丁。
diff --git a/src/extension.ts b/src/extension.ts
index b5ad751..7970ae1 100644
--- a/src/extension.ts
+++ b/src/extension.ts
@@ -13,7 +13,7 @@ export function activate(context: ExtensionContext) {
.get("languageServerPath", "/usr/local/bin/LanguageServer");
let run: Executable = { command: executableCommand };
- let debug: Executable = run;
+ let debug: Executable = { command: "${TARGET_BUILD_DIR}/LanguageServer" };
let serverOptions: ServerOptions = {
run: run,
debug: debug
注意: 确保 ${TARGET_BUILD_DIR}
填充了您在 Xcode 部分中生成的值。 它不是环境变量,因此不会被评估。
完成此操作后,您应该能够打开 VSCode 调试器并选择 Launch Extension
。 这应该以调试模式启动语言服务器 (Xcode/Swift) 和扩展 (VScode/TypeScript)。
一个建议是在 handle.swift
中设置一个断点,因为这很可能是服务器陷入麻烦的地方。
me.lovelett.langserver-swift
子系统记录到 Console.app
。 可以在那里查找原始语言服务器 JSON-RPC 消息。