Commit Graph

172 Commits

Author SHA1 Message Date
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