Visual Studio Code 的 Swift 扩展

随着 Swift 被部署到更多平台,Swift 也能在更多平台上进行开发变得至关重要。Visual Studio Code 的 Swift 扩展为 Swift 开发提供了一个跨平台解决方案,支持 macOS、Linux 和 Windows。

动机

由于在非 Apple 平台上缺乏一流的集成开发环境,Swift 在 Apple 生态系统之外的扩展受到了阻碍。如果您在 Linux 或 Windows 上进行开发,则没有 Xcode。

在此之前,已经有一些独立的组件构成了开发环境,例如 Apple 的 SourceKit-LSP 项目,以及在使用 CodeLLDB 扩展时对 Swift 版本的 LLDB 的支持,但没有东西将它们全部整合在一起。

Swift 服务器工作组 (SSWG) 认为需要一个更完整的解决方案。SSWG 推出的 Visual Studio Code 的 Swift 扩展将许多这些组件整合到一个软件包中,所有东西都预先配置好,可以立即使用。

功能

该扩展主要面向 Swift 包管理器 (SwiftPM) 项目。它由许多已有的组件以及一些新的组件组成,所有这些组件都整合到一个连贯的软件包中。

预配置的开发环境

Visual Studio Code 使用许多 JSON 配置文件来设置您的开发环境。Swift 扩展将为您的 SwiftPM 项目自动生成这些文件,因此您无需手动设置它们。当您加载一个项目时,该扩展会为项目中的所有内容创建构建任务,以及 Package.swift 中任何可执行文件的调试和发布版本。它还将为所有可执行文件的调试和发布版本创建调试器启动配置。

软件包依赖关系视图

该扩展提供了一个软件包依赖关系视图,其中显示了所有软件包依赖关系的列表以及您正在使用的版本。可以展开该视图,以便您可以检查每个依赖项的内容。右键单击菜单允许您查看该软件包的仓库,以及将依赖项替换为您计算机本地的版本。标题栏中的按钮为您的软件包添加了 resolve、update 和 reset 操作。

Package dependency view

SourceKit-LSP 集成

语言服务器协议 (LSP) 是一种标准,用于在 Visual Studio Code 等源代码编辑器中提供符号完成和跳转到定义等语言功能。通过 Apple 的 SourceKit-LSP 实现,LSP 兼容的编辑器可以使用 Swift 支持。Swift 扩展管理 SourceKit-LSP 服务器的运行,以便为 Swift 和 C/C++ 源文件提供这些语言功能。

Symbol completion

调试器

通过 CodeLLDB 调试器扩展提供调试器。与 LLDB 集成的所有繁重工作都由 CodeLLDB 完成。Swift 扩展通过在启动时为您的项目可执行文件创建调试启动配置来提供与 CodeLLDB 的集成。它还将 CodeLLDB 配置为使用 Swift 版本的 LLDB。

测试资源管理器

测试资源管理器提供了一个类似于 Xcode Tests UI 的用户界面。该 UI 包含一个树状视图,包括所有测试目标,以及这些目标中包含的每个 XCTestCase 类和这些类中包含的每个单独的测试。测试可以在调试器外部或调试器中运行。您可以运行单个测试,或按类或测试目标过滤正在运行的测试,或者只运行所有测试。UI 会随着测试成功或失败而更新。

Text explorer view

多项目工作区

Visual Studio Code 允许您创建工作区,其中包含多个工作区文件夹,每个文件夹都有自己的 SwiftPM 项目。Swift 扩展还支持工作区文件夹的子文件夹中的 SwiftPM 项目。这使得您可以拥有文件夹结构,其中一个较大项目的多个组件都在一个根文件夹下,例如,一个包含许多示例项目的仓库,或一组 Swift Lambdas。这允许将混合语言项目包含在一个文件夹结构中,例如包含 HTML、Javascript 和 Swift 驱动的后端的 Web 项目。

在容器内开发

Remote - Containers 扩展允许您在 Docker 容器内运行 Visual Studio Code,以便在该容器内编译和测试您的代码。它可以与 Swift 扩展一起使用,以测试/调试您的 Swift 代码。如果您在 macOS 上开发但部署到 Linux,这尤其有用,因为 Linux 和 macOS 性能或功能上的差异可以尽早被发现。

您还可以将容器支持与 nightly Swift Docker 镜像结合使用,以测试新的 Swift 功能,而无需安装新的操作系统或 Xcode 版本。

未来

该扩展包括我们最初计划的核心功能集,但我们尚未完成,并将继续扩展我们已有的功能。虽然最初的大部分工作是由 SSWG 完成的,但这是一个社区项目,我们很高兴邀请任何有兴趣贡献的人参与。

如果您觉得缺少或损坏了某些内容,请添加一个 Issue。如果您可以贡献时间来构建新功能或修复错误,请联系我们。