SuperAPI AI 工具集

swift-concurrency-pro

测试与质量

查看项目

更新于 10-13 15:41

技能介绍

swift-concurrency-pro 是一个针对 Swift 并发代码的审查技能,来源于 199-biotechnologies/swiftui-claude-skills 技能集。其定位是在阅读、编写或审查 Swift 并发代码时,检查代码的正确性、现代 API 用法,以及常见的 async/await 陷阱,并检查是否符合项目约定。审查原则是只报告真实存在的问题,不吹毛求疵、不虚构问题。

审查流程 该技能提供了一套按顺序展开的审查流程,并配有对应的参考文件:

  1. 使用 references/hotspots.md 扫描已知危险模式,以确定优先检查的内容。
  2. 使用 references/new-features.md 检查是否有受 Swift 6.2 并发行为变化影响的地方。
  3. 使用 references/actors.md 验证 actor 用法,检查重入性与隔离正确性。
  4. 使用 references/structured.md 确保在适当场景优先使用结构化并发而非非结构化并发。
  5. 使用 references/unstructured.md 检查非结构化任务用法是否正确。
  6. 使用 references/cancellation.md 验证取消处理是否正确。
  7. 使用 references/async-streams.md 验证 async stream 与 continuation 的用法。
  8. 使用 references/bridging.md 检查同步与异步世界之间的桥接代码。
  9. 使用 references/interop.md 审查任何遗留并发迁移。
  10. 使用 references/bug-patterns.md 交叉核对常见失败模式。
  11. 若项目存在严格并发(strict-concurrency)错误,使用 references/diagnostics.md 将诊断映射到修复方案。
  12. 若审查测试,使用 references/testing.md 检查异步测试模式。
  13. 若只做部分审查,只加载相关的参考文件。

核心指令

  • 以 Swift 6.2 或更高版本、严格并发检查为目标。
  • 若代码跨多个 target 或 package,在假定行为应一致之前,先比较它们的并发构建设置。
  • 优先使用结构化并发(任务组)而非非结构化并发(Task {})。
  • 新代码优先使用 Swift 并发而非 Grand Central Dispatch。在底层代码、框架互操作,或队列与锁才是正确工具的、性能关键的同步工作中,GCD 仍然可接受,不要将这些标记为错误。
  • 若某个 API 同时提供 async/await 与基于闭包的变体,始终优先 async/await。
  • 未经询问,不要引入第三方并发框架。
  • 不要建议用 @unchecked Sendable 修复编译器错误。它会静默诊断而不修复底层竞态。应优先使用 actor、值类型或 sending 参数。唯一合法用途是用于内部有锁且可证明线程安全的类型。

输出格式 审查结果按文件组织。对每个问题:

  • 指出文件与相关行号。
  • 指明被违反的规则。
  • 展示简短的前后对比代码修复。
  • 跳过没有问题的文件。
  • 最后给出按优先级排序的总结,说明最应先做的高影响改动。

示例输出 DataLoader.swift 第 18 行:Actor 重入——状态可能在 await 期间发生变化。 修复前: actor Cache { var items: [String: Data] = [:]

func fetch(_ key: String) async throws -> Data {
    if items[key] == nil {
        items[key] = try await download(key)
    }
    return items[key]!
}

} 修复后: actor Cache { var items: [String: Data] = [:]

func fetch(_ key: String) async throws -> Data {
    if let existing = items[key] { return existing }
    let data = try await download(key)
    items[key] = data
    return data
}

} 第 34 行:应使用 withTaskGroup,而不是在循环中创建任务。 修复前: for url in urls { Task { try await fetch(url) } } 修复后: try await withThrowingTaskGroup(of: Data.self) { group in for url in urls { group.addTask { try await fetch(url) } }

for try await result in group {
    process(result)
}

} 总结:

  • 正确性(高):第 18 行的 actor 重入 bug 可能导致重复下载与强制解包崩溃。
  • 结构(中):第 34 行循环中的非结构化任务会丢失取消传播。

参考文件

  • references/hotspots.md:代码审查的 Grep 目标,列出已知危险模式及各自需要检查的内容。
  • references/new-features.md:改变审查建议的 Swift 6.2 变更,包括默认 actor 隔离、隔离 conformance、调用方 actor 的异步行为、@concurrent、Task.immediate、任务命名与优先级提升。
  • references/actors.md:Actor 重入、共享状态标注、全局 actor 推断与隔离模式。
  • references/structured.md:任务组优先于循环、丢弃型任务组、并发上限。
  • references/unstructured.md:Task 与 Task.detached 的区别,以及何时 Task {} 属于代码异味。
  • references/cancellation.md:取消传播、协作式检查、错误的取消模式。
  • references/async-streams.md:AsyncStream 工厂、continuation 生命周期、背压。
  • references/bridging.md:checked continuation、包装遗留 API、@unchecked Sendable。
  • references/interop.md:从 GCD、Mutex/锁、完成处理器、委托与 Combine 迁移。
  • references/bug-patterns.md:常见并发失败模式及其修复。
  • references/diagnostics.md:严格并发编译器错误、协议 conformance 修复及可能的补救措施。
  • references/testing.md:使用 Swift Testing 的异步测试策略、竞态检测、避免基于时序的测试。

限制与说明 该技能面向 Swift 并发代码审查,以 Swift 6.2+ 为基准,其具体运行方式、安装命令、收费模式与平台支持在所提供的资料中暂未提供。