mirror of
https://github.com/realm/SwiftLint.git
synced 2026-06-06 20:18:40 +00:00
* Migrate AccessibilityLabelForImageRule from SourceKit to SwiftSyntax \## Summary Fix `.accessibilityElement(children:)` exemption logic where the previous implementation incorrectly exempted images with `.combine` when only `.ignore` should exempt children. \## Improvements Based on OSSCheck Results \### New Violations (Legitimately Detected) - `Image(uiImage:)` and `Image(nsImage:)` calls providing contextual content - Previously missed by SourceKit's pattern matching limitations - These represent real accessibility issues requiring labels \### Fixed Violations (False Positives Removed) - Images inside Button/NavigationLink labels (containers handle accessibility) - Images in custom components with proper accessibility context - System icons incorrectly flagged when already accessible \## Key Technical Improvements - **Comprehensive detection** of all Image initializer types - **Better context awareness** through syntax tree traversal - **Accurate `.accessibilityElement(children:)` behavior** (`.ignore` exempts, `.combine`/`.contain` do not) - **Reduced false positives** while catching real accessibility issues \## Regression Test Examples Added comprehensive examples demonstrating the migration benefits: \### Non-Triggering (Reduced False Positives) - Images in `Button`/`NavigationLink` labels with accessibility context - Images in containers with `.accessibilityElement(children: .ignore)` - Complex hierarchies where container accessibility handles children - Various Image initializer types in proper accessible contexts \### Triggering (Improved Detection) - `Image(uiImage:)` and `Image(nsImage:)` providing contextual content - Images in containers with `.combine`/`.contain` that don't exempt - Status icons, favicons, and background images needing labels * Update changelog