Danny Mösch
d78a766b47
Document only values set by users without processing them
2026-05-29 22:31:46 +02:00
Danny Mösch
5525b43e37
Rename option to convey its purpose more clearly ( #6673 )
2026-05-27 17:20:56 -04:00
Danny Mösch
792032480e
Support SwiftLint on Windows ( #6636 )
...
Co-authored-by: Saleem Abdulrasool <compnerd@compnerd.org >
Co-authored-by: Roman Lavrov <roman.lavrov@thebrowser.company >
2026-05-27 22:02:06 +02:00
Danny Mösch
33430347e8
Support access level modifiers on imports in unused_imports ( #6631 )
...
Co-authored-by: Copilot <copilot@github.com >
2026-05-06 03:06:56 -04:00
Danny Mösch
767d780c59
Taint variables in tuples ( #6629 )
2026-05-06 06:43:24 +02:00
Danny Mösch
ceef663aaa
Track type member declarations optionally ( #6596 )
2026-04-15 21:58:40 +02:00
Nadeem Ali
949cfe9889
Add new variable_shadowing rule ( #6568 )
...
Co-authored-by: Danny Mösch <danny.moesch@icloud.com >
2026-04-13 14:14:17 -04:00
Rodion Ivashkov
a7878fcd67
Ignore case patterns in multiline_call_arguments ( #6444 )
...
Co-authored-by: Danny Mösch <danny.moesch@icloud.com >
2026-04-11 08:40:43 +02:00
Eduard Miniakhmetov
c40896d3ad
Add new invisible_characters rule ( #6424 )
...
Co-authored-by: Miniakhmetov Eduard <eminiakhmetov@sportmasterlab.net >
2026-04-07 14:06:59 +02:00
Nadeem Ali
2b91a5a691
Add detection of leading-dot to optional_data_string_conversion rule ( #6372 )
...
Co-authored-by: Danny Mösch <danny.moesch@icloud.com >
2026-03-30 08:35:37 +00:00
Danny Mösch
99ec4923d8
Use effective ACL in discouraged_default_parameter rule ( #6563 )
2026-03-27 21:25:37 +01:00
theamodhshetty
6dc566b7a5
Add underscore-prefixed option to unused_parameter rule ( #6509 )
2026-03-05 16:46:53 -05:00
William Laverty
87bfcc6832
Add disallow_default_parameter opt-in rule ( #6506 )
...
Co-authored-by: Danny Mösch <danny.moesch@icloud.com >
2026-03-05 16:22:21 -05:00
William Laverty
afae448953
Skip @TestState variables in quick_discouraged_call rule ( #6514 )
2026-03-05 04:01:08 -05:00
Danny Mösch
cc3b22c128
Open new scope only for trailing closures ( #6492 )
2026-02-13 17:32:27 +01:00
Danny Mösch
6de2cc9587
Use SwiftSyntax 6.4 pre-release 2026-01-20 ( #6447 )
2026-01-21 00:00:37 +01:00
Danny Mösch
9a634bc8a0
Retain async initializers in actors in async_without_await ( #6436 )
2026-01-14 17:01:50 -05:00
Copilot
7a9186a39b
Ignore override declarations in async_without_await rule ( #6417 )
...
Co-authored-by: Danny Mösch <danny.moesch@icloud.com >
2026-01-07 20:26:30 +01:00
Danny Mösch
cb578f4629
Use stack to track nested closures ( #6411 )
2026-01-05 10:50:41 +01:00
Danny Mösch
21ff90f564
Keep escaping autoclosure passed on ( #6394 )
2025-12-27 09:49:34 -05:00
Danny Mösch
c09e3bbe34
Taint branches of tainted ternary expressions ( #6393 )
2025-12-26 22:49:21 +01:00
Danny Mösch
154e47e481
Keep closures assigned to wildcard variables as non-escaping ( #6392 )
2025-12-25 23:03:47 +01:00
Danny Mösch
32c33c2588
Re-enable redundant_self rule ( #6368 )
2025-12-07 08:11:08 -05:00
Danny Mösch
2e87be0398
Infer name of parent rule in configurations ( #6363 )
2025-12-01 14:15:00 -05:00
Rodion Ivashkov
31cdc24101
Add new multiline_call_arguments rule ( #6223 )
...
Co-authored-by: Danny Mösch <danny.moesch@icloud.com >
2025-11-30 18:16:11 -05:00
Saleem Abdulrasool
e526fdef94
Repair GenerationTests on Windows ( #6354 )
2025-11-28 09:04:17 +01:00
Jared Grubb
e57a2d4860
Do not trigger override_in_extension inside @implementation ( #6339 )
2025-11-15 12:26:10 +00:00
Danny Mösch
d74b8726bc
Improve @escaping tracking recognizing local variable assignments ( #6341 )
2025-11-15 11:42:57 +01:00
Danny Mösch
97579b5dcf
Add new unneeded_escaping rule ( #6337 )
2025-11-14 18:54:51 +01:00
Tony Ngo
837a90621b
Add new unneeded_throws_rethrows rule ( #6069 )
...
Co-authored-by: Danny Mösch <danny.moesch@icloud.com >
2025-11-03 17:39:31 +01:00
Copilot
038135e14d
Enable prefer_key_path rule ( #6331 )
...
Co-authored-by: SimplyDanny <16365760+SimplyDanny@users.noreply.github.com >
2025-10-31 16:58:41 +00:00
Danny Mösch
70a2e6ceac
Add new incompatible_concurrency_annotation rule ( #6290 )
2025-10-20 15:11:10 -04:00
Nandhini Subramani
a0414c919d
Ignore @concurrent functions in async_without_await rule ( #6284 )
2025-10-08 19:06:56 +02:00
Danny Mösch
4065fc8437
Enable upcoming feature MemberImportVisibility ( #6286 )
2025-10-08 08:12:05 +02:00
Danny Mösch
0e2198d086
Exclude function types from async_without_await rule analysis ( #6258 )
2025-09-27 19:10:30 +02:00
Danny Mösch
5e6e59f212
Rewrite quick_discouraged_call rule with SwiftSyntax ( #6237 )
2025-09-06 14:10:38 +02:00
Rodion Ivashkov
91b26549c4
Add function_name_whitespace rule to validate and autocorrect spacing around function names ( #6156 )
...
Co-authored-by: Danny Mösch <danny.moesch@icloud.com >
2025-08-30 10:40:44 -04:00
Danny Mösch
77050e8c40
Enable a fully statically linked Linux executable ( #6211 )
...
If SwiftLint is built from this state using the Swift SDK, we'll get a
large self-contained Linux executable that runs without loading SourceKit.
It can do that by disabling any rule that requires SourceKit.
With `SWIFTLINT_DISABLE_SOURCEKIT` set on a normally (dynamically linked)
binary, the behavior is the same. That's different from the previously
reported more serious warnings.
2025-08-30 10:02:38 -04:00
Matt Thompson
2cfb4c2068
Apply private_swiftui_state rule to ViewModifier types ( #6200 )
2025-08-23 12:05:49 +02:00
Copilot
8bb69b064a
Add include_variables option to non_optional_string_data_conversion rule ( #6172 )
...
Co-authored-by: Danny Mösch <danny.moesch@icloud.com >
2025-08-02 17:49:58 -04:00
Danny Mösch
c1ffdfe891
Enable prefer_condition_list rule ( #6163 )
2025-07-12 09:41:00 -04:00
Danny Mösch
599e51a5a2
Format code ( #6151 )
2025-07-02 17:50:53 -04:00
Danny Mösch
de613ba8b7
Prepare rule for SwiftSyntax 6.2 ( #6144 )
2025-06-29 12:40:11 -04:00
JP Simard
388d45246e
Migrate ExpiringTodoRule from SourceKit to SwiftSyntax ( #6113 )
2025-06-23 07:43:04 -04:00
JP Simard
5a2cf4b1fe
Remove dead code ( #6125 )
...
In particular lots of stuff that used to be needed with SourceKit that
we no longer need to keep around.
Identified using Periphery: https://github.com/peripheryapp/periphery
2025-06-21 15:19:37 -04:00
JP Simard
45c4766a02
Migrate AccessibilityLabelForImageRule from SourceKit to SwiftSyntax ( #6101 )
...
* 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
2025-06-21 11:34:06 -04:00
JP Simard
5eac9be50d
Migrate AccessibilityTraitForButtonRule from SourceKit to SwiftSyntax ( #6108 )
...
## Summary
Convert AccessibilityTraitForButtonRule to use SwiftSyntax instead of
SourceKit for improved performance and better accessibility trait
detection in SwiftUI modifier chains.
## Key Technical Improvements
- **Bidirectional modifier chain analysis** for comprehensive
accessibility trait detection
- **Better context awareness** through SwiftSyntax tree traversal
- **Accurate container exemption logic** for Button/Link components
- **Enhanced gesture detection** supporting `.onTapGesture` and
`.gesture` modifiers
- **Improved performance** with SwiftSyntax visitor pattern over
SourceKit AST parsing
## Migration Details
- Replaced `ASTRule` with `@SwiftSyntaxRule(optIn: true)` annotation
- Implemented `ViolationsSyntaxVisitor` pattern for systematic tree
traversal
- Added bidirectional accessibility trait detection that checks both
before and after tap gestures
- Enhanced exemption logic for inherently accessible containers
(Button, NavigationLink)
- Maintained full compatibility with existing rule behavior and test
cases
2025-06-21 10:11:43 -04:00
JP Simard
81474e36d0
Enforce SourceKitFreeRule contract with fatal error ( #6107 )
2025-06-20 07:25:01 -04:00
Sonal
e2ef7ed470
Treat actors as classes in class_delegate_protocol rule ( #6067 )
...
Co-authored-by: Danny Mösch <danny.moesch@icloud.com >
2025-06-15 17:56:09 +00:00
Danny Mösch
ed5b3741fe
Remove opaque_over_existential rule ( #6049 )
...
This partially reverts commit 82736d1925 .
2025-04-08 06:38:12 -04:00