swift-concurrency-pro by twostraws/swift-concurrency-agent-skill
npx skills add https://github.com/twostraws/swift-concurrency-agent-skill --skill swift-concurrency-pro审查 Swift 并发代码的正确性、现代 API 使用情况以及是否符合项目约定。仅报告真正的问题——不要吹毛求疵或捏造问题。
审查流程:
references/hotspots.md 扫描已知的危险模式,以确定检查的优先级。references/new-features.md 检查最新的 Swift 6.2 并发行为。references/actors.md 验证 actor 的重入性和隔离正确性。references/structured.md 确保在适当的情况下优先使用结构化并发而非非结构化并发。references/unstructured.md 检查非结构化任务使用的正确性。references/cancellation.md 验证是否正确处理了取消操作。references/async-streams.md 验证异步流和延续的使用。references/bridging.md 检查同步和异步世界之间的桥接代码。广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
references/interop.md 审查任何遗留的并发迁移。references/bug-patterns.md 对照常见的故障模式进行交叉检查。references/diagnostics.md 将诊断信息映射到修复方案。references/testing.md 检查异步测试模式。如果进行部分审查,仅加载相关的参考文件。
Task {})。async/await 和基于闭包的变体,始终优先选择 async/await。@unchecked Sendable 来修复编译器错误。它会抑制诊断信息而不解决潜在的竞争条件。应优先使用 actor、值类型或 sending 参数。唯一合理的用途是用于内部加锁且可证明是线程安全的类型。按文件组织发现的问题。对于每个问题:
跳过没有问题的文件。最后,按优先级总结需要首先进行的最有影响力的更改。
示例输出:
第 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)
}
}
示例结束。
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 工厂、延续生命周期、背压。references/bridging.md - 受检查的延续、包装遗留 API、@unchecked Sendable。references/interop.md - 从 GCD 迁移、Mutex/锁、完成处理程序、委托和 Combine。references/bug-patterns.md - 常见的并发故障模式及其修复方法。references/diagnostics.md - 严格并发编译器错误、协议一致性修复和可能的补救措施。references/testing.md - 使用 Swift Testing 的异步测试策略、竞态检测、避免基于时间的测试。每周安装量
1.7K
代码仓库
GitHub Stars
248
首次出现
2026年3月11日
安全审计
安装于
codex1.7K
opencode1.7K
github-copilot1.7K
gemini-cli1.7K
kimi-cli1.7K
amp1.7K
Review Swift concurrency code for correctness, modern API usage, and adherence to project conventions. Report only genuine problems - do not nitpick or invent issues.
Review process:
references/hotspots.md to prioritize what to inspect.references/new-features.md.references/actors.md.references/structured.md.references/unstructured.md.references/cancellation.md.references/async-streams.md.references/bridging.md.references/interop.md.references/bug-patterns.md.references/diagnostics.md.references/testing.md.If doing a partial review, load only the relevant reference files.
Task {}).async/await and closure-based variants, always prefer async/await.@unchecked Sendable to fix compiler errors. It silences the diagnostic without fixing the underlying race. Prefer actors, value types, or sending parameters instead. The only legitimate use is for types with internal locking that are provably thread-safe.Organize findings by file. For each issue:
Skip files with no issues. End with a prioritized summary of the most impactful changes to make first.
Example output:
Line 18: Actor reentrancy – state may have changed across theawait.
// 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
}
}
Line 34: UsewithTaskGroup instead of creating tasks in a loop.
// 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)
}
}
End of example.
references/hotspots.md - Grep targets for code review: known-dangerous patterns and what to check for each.references/new-features.md - Swift 6.2 changes that alter review advice: default actor isolation, isolated conformances, caller-actor async behavior, @concurrent, Task.immediate, task naming, and priority escalation.references/actors.md - Actor reentrancy, shared-state annotations, global actor inference, and isolation patterns.references/structured.md - Task groups over loops, discarding task groups, concurrency limits.references/unstructured.md - Task vs Task.detached, when Task {} is a code smell.references/cancellation.md - Cancellation propagation, cooperative checking, broken cancellation patterns.Weekly Installs
1.7K
Repository
GitHub Stars
248
First Seen
Mar 11, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
codex1.7K
opencode1.7K
github-copilot1.7K
gemini-cli1.7K
kimi-cli1.7K
amp1.7K
React 组合模式指南:Vercel 组件架构最佳实践,提升代码可维护性
102,200 周安装
references/async-streams.md - AsyncStream factory, continuation lifecycle, back-pressure.references/bridging.md - Checked continuations, wrapping legacy APIs, @unchecked Sendable.references/interop.md - Migrating from GCD, Mutex/locks, completion handlers, delegates, and Combine.references/bug-patterns.md - Common concurrency failure modes and their fixes.references/diagnostics.md - Strict-concurrency compiler errors, protocol conformance fixes, and likely remedies.references/testing.md - Async test strategy with Swift Testing, race detection, avoiding timing-based tests.