Changes
- Fix quadratic diagnostic accumulation when parsing large activity logs (#263). Join diagnostic continuation lines once, accumulate locations without repeatedly copying dictionaries, flatten notices without rebuilding growing arrays, and use a set for Clang-warning title lookup.
- Preserve diagnostic contents, notice ordering, and duplicate-location behavior without truncating output or introducing input limits. Public APIs and serialization formats are unchanged.
Performance
Synthetic release-build benchmarks on an Apple M3 Pro, macOS 26.3, Apple Swift 6.4; median parser-only elapsed time across three runs per revision:
| Workload | Before | After |
|---|---|---|
| One diagnostic with 40,000 × 1 KiB continuation lines | 30.508 s | 2.522 s |
| 40,000 distinct diagnostic locations | 53.349 s | 0.154 s |
| 60,000 notices | 18.464 s | 0.068 s |
| 40,000 Clang warnings, a duplicate title, and an unmatched note | 11.142 s | 0.156 s |
See #263 for raw samples, reproduction steps, and compatibility tests. These measure the affected parser paths rather than end-to-end activity-log processing.
The parser change passed macOS, Linux, and SwiftLint CI.
Full changelog: v0.2.49...v0.2.50