mcpField
S
swift-concurrency-pro

swift-concurrency-pro

github.com/twostraws测试与质量57712.1k 次安装23 周前更新
代码仓库

关于 swift-concurrency-pro

swift-concurrency-pro 是用于审查 Swift 并发代码的 Agent 技能,面向代码审查和并发迁移工作。它依据一组主题参考资料检查正确性、现代 API 用法和项目约定,并要求仅报告真实问题。

主要功能

  1. 01检查 Actor 隔离与重入
  2. 02评估结构化并发及任务用法
  3. 03检查取消与异步流处理
  4. 04审查同步与异步桥接
  5. 05对照严格并发诊断与测试

适用场景

  1. 01审查 Swift 并发代码变更
  2. 02迁移旧有并发实现
  3. 03排查严格并发编译错误

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/twostraws/swift-concurrency-agent-skill --skill swift-concurrency-pro

安装后在 Claude Code 中输入/swift-concurrency-pro确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

.claude-plugin/
plugin.json
agents/
openai.yaml
assets/
swift-concurrency-pro-icon.svg
references/
actors.md
async-streams.md
bridging.md
bug-patterns.md
cancellation.md
diagnostics.md
hotspots.md
interop.md
new-features.md
structured.md
testing.md
unstructured.md

详细介绍

审查 Swift 并发代码的正确性、现代 API 用法以及是否遵循项目约定。只报告确实存在的问题——不要吹毛求疵或臆造问题。

审查流程:

  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 验证异步流和 continuation 的用法。
  8. 使用 references/bridging.md 检查同步与异步环境之间的桥接代码。
  9. 使用 references/interop.md 审查任何旧版并发迁移。
  10. 对照 references/bug-patterns.md 检查常见故障模式。
  11. 如果项目存在严格并发检查错误,使用 references/diagnostics.md 将诊断信息对应到修复方案。
  12. 如果在审查测试,使用 references/testing.md 检查异步测试模式。

如果只进行部分审查,仅加载相关的参考文件。

核心指引

  • 以 Swift 6.2 或更高版本及严格并发检查为目标。
  • 如果代码跨越多个目标或软件包,在认定其行为应当一致之前,先比较它们的并发构建设置。
  • 优先使用结构化并发(任务组),而非非结构化并发(Task {})。
  • 新代码优先使用 Swift 并发,而非 Grand Central Dispatch。GCD 仍适用于底层代码、框架互操作,或队列和锁更合适的性能关键型同步工作——不要将这些情况标记为错误。
  • 如果某个 API 同时提供 async/await 和基于闭包的变体,始终优先使用 async/await。
  • 未经事先询问,不要引入第三方并发框架。
  • 不要建议使用 @unchecked Sendable 来修复编译器错误。它会压制诊断信息,却没有解决底层竞态。应优先使用 Actor、值类型或 sending 参数。唯一合理的用途是用于内部通过锁实现且可证明线程安全的类型。

输出格式

按文件整理发现。对于每个问题:

  1. 写明文件和相关行号。
  2. 指出违反的规则。
  3. 展示简短的修改前/修改后代码。

跳过没有问题的文件。最后按优先级总结最值得先处理的更改。

输出示例:

DataLoader.swift

第 18 行:Actor 重入——在 await 期间,状态可能已发生变化。

// Before
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]!
    }
}

// After
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,而不是在循环中创建任务。

// Before
for url in urls {
    Task { try await fetch(url) }
}

// After
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)
    }
}
总结
  1. 正确性(高): 第 18 行的 Actor 重入漏洞可能导致重复下载和强制解包崩溃。
  2. 结构(中): 第 34 行的非结构化任务会失去取消传播。

示例结束。

参考资料

  • references/hotspots.md - 代码审查的 Grep 目标:已知的危险模式,以及每种模式需要检查的内容。
  • references/new-features.md - 会改变代码审查建议的 Swift 6.2 变更:默认 Actor 隔离、隔离一致性、调用方 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 - 严格并发编译器错误、协议一致性修复和可能的解决方法。
  • references/testing.md - 使用 Swift Testing 的异步测试策略、竞态检测、避免基于计时的测试。

评论

支持 Markdown