Skills combine-code-review
Reviews Combine framework code for memory leaks, operator misuse, and error handling. Use when reviewing code with import Combine, AnyPublisher, @Published, PassthroughSubject, or CurrentValueSubject.
install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/anderskev/combine-code-review" ~/.claude/skills/openclaw-skills-combine-code-review && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/anderskev/combine-code-review" ~/.openclaw/skills/openclaw-skills-combine-code-review && rm -rf "$T"
manifest:
skills/anderskev/combine-code-review/SKILL.mdsource content
Combine Code Review
Quick Reference
| Issue Type | Reference |
|---|---|
| Publishers, Subjects, AnyPublisher | references/publishers.md |
| map, flatMap, combineLatest, switchToLatest | references/operators.md |
| AnyCancellable, retain cycles, [weak self] | references/memory.md |
| tryMap, catch, replaceError, Never | references/error-handling.md |
Review Checklist
- All
closures usesink
when self owns cancellable[weak self] - No
usage (useassign(to:on:self)
or sink)assign(to: &$property) - All AnyCancellables stored in Set or property (not discarded)
- Subjects exposed as
viaAnyPublishereraseToAnyPublisher() -
used correctly (not whenflatMap
needed)map + switchToLatest - Error handling inside
to keep main chain aliveflatMap -
followed bytryMap
to restore error typesmapError -
before UI updatesreceive(on: DispatchQueue.main) - PassthroughSubject for events, CurrentValueSubject for state
- Future wrapped in Deferred when used with retry
When to Load References
- Reviewing Subjects or publisher selection → publishers.md
- Reviewing operator chains or combining publishers → operators.md
- Reviewing subscriptions or memory issues → memory.md
- Reviewing error handling or try* operators → error-handling.md
Review Questions
- Are all subscriptions being retained? (Check for discarded AnyCancellables)
- Could any sink or assign create a retain cycle with self?
- Does flatMap need to be switchToLatest for search/autocomplete?
- What happens when this publisher fails? (Will it kill the main chain?)
- Are error types preserved or properly mapped after try* operators?