Commit Graph
321 Commits
Author SHA1 Message Date
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
Danny Mösch 5a3c8c9ba3 Inline rule-specific parts of BodyLengthVisitor (#6121)
Main goal is to bring implementations, rules and examples closer together.
Another advantage is that the rule's layouts are in line with other
`@SwiftSyntaxRule`s.

After the refactoring, violation messages can be
better adapted to the object causing the issue. Violation positions
should be harmonized and more cases for protocols, subscripts and
deinitializers can be added.
2025-06-21 14:02:28 +02:00
Danny Mösch 573ac4da7d Report warning threshold (#6122) 2025-06-21 01:40:06 +02:00
Danny Mösch 7e0ea598ce Let large_tuple rule adhere to common style (#6120) 2025-06-20 22:23:29 +00:00
JP Simard 81474e36d0 Enforce SourceKitFreeRule contract with fatal error (#6107) 2025-06-20 07:25:01 -04:00
Matt Pennig 1e25cf6be6 Migrate VerticalWhitespaceRule from SourceKit to SwiftSyntax (#6103)
* Migrate VerticalWhitespaceRule from SourceKit to SwiftSyntax

* Adds tests for new horizontal whitespace behavior
2025-06-19 17:31:51 -04:00
JP Simard d1687859fe Migrate FileLengthRule from SourceKit to SwiftSyntax (#6100)
Convert FileLengthRule to use SwiftSyntax instead of SourceKit for
improved performance and fewer false positives.

The SwiftSyntax implementation:
- Uses ViolationsSyntaxVisitor pattern with token traversal
- Correctly handles multiline tokens by counting all spanned lines
- Properly excludes comment-only and whitespace-only lines
- Accurately attributes trivia to correct line positions
- Extracts common line range logic to reduce code duplication
2025-06-18 22:17:47 +00:00
Danny Mösch f961ad1728 Prefer string blocks (#6090) 2025-06-15 16:00:39 -04:00
SonalandDanny Mösch 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 a3aec89e21 Add test case for trailing comma in multiline arguments (#6085) 2025-05-21 07:29:00 -04:00
Kent Kaseda e1ac6f8607 Remove validates_start_with_lowercase option entirely (#6077) 2025-05-15 16:48:00 -04:00
Martin Redington 3ed7579fd2 Allow magic numbers to be configured (#6051) 2025-04-13 21:08:42 +01:00
Danny Mösch ed5b3741fe Remove opaque_over_existential rule (#6049)
This partially reverts commit 82736d1925.
2025-04-08 06:38:12 -04:00
Danny Mösch 47335d7f95 Remove tracking of correction positions (#5950)
Report number of corrections per file instead.
2025-04-05 06:04:37 -04:00
Danny Mösch 2578cb3862 Use SwiftSyntax version 601.0.0 (#6003) 2025-04-03 21:27:57 +02:00
Henry ed20aa593d Add new option ignores_multiline_strings to line_length rule (#6014) 2025-04-03 14:28:41 -04:00
de36c51c75 Ignore UIColor initializers in no_magic_numbers rule (#6035)
Co-authored-by: Effie <effie.thedev@gmail.com>
Co-authored-by: Danny Mösch <danny.moesch@icloud.com>
2025-03-30 16:10:17 +00:00
Danny Mösch 9710148f76 Replace Sourcery with internal implementation (#6034)
Tasks we perform with Sourcery are rather simple and can be replaced
with a basic collection of files and the generation of lists in the
new `swiftlint-dev` command. This spares contributors from installing
either Sourcery or Bazel.
2025-03-26 20:38:53 +00:00
fraioliandDanny Mösch e68797ebea Respect macro types in file_name rule (#6027)
Co-authored-by: Danny Mösch <danny.moesch@icloud.com>
2025-03-22 20:55:18 -04:00
Jared Grubb 63fea48d83 Add excluded_methods option to unneeded_override rule (#6010) 2025-03-22 21:40:05 +01:00
Danny Mösch b14272d4f2 Rewrite type_contents_order rule with SwiftSyntax (#6002) 2025-03-17 20:15:02 +01:00
Danny Mösch 22e0f42ae1 Fix crash when disable command is preceded by unicode character (#5976) 2025-03-15 23:33:11 +01:00
Danny Mösch 59b4b4d8e2 Extract common code to method (#6019) 2025-03-10 18:42:02 +00:00
Eduard Miniakhmetov d2d1aacaac Add new allowed_types option to legacy_objc_type rule (#6012) 2025-03-10 09:28:04 +00:00
Martin Redington 5517d233fd Started to add rationales (#5681) 2025-03-06 10:16:30 +00:00
Danny Mösch 0d8e183cc0 Silence no_magic_numbers rule in #if conditions (#6001) 2025-02-15 18:17:37 +01:00
Danny Mösch 82736d1925 Add new opaque_over_existential rule (#5915) 2025-02-12 16:46:28 -05:00
Danny Mösch 6c8e8993ee Exclude @Suite types and @Test functions from no_magic_numbers analysis (#5968) 2025-02-12 14:27:33 -05:00
Danny Mösch 6ba231a11a Consider composed inherited types (#5984) 2025-01-30 22:50:18 +01:00
Danny Mösch b4eb2df567 Allow severity of duplicate_imports rule to be configurable (#5979) 2025-01-22 20:47:11 +00:00
Danny Mösch 9b22cda361 Add ib_segue_action to default configuration (#5956) 2025-01-14 21:50:11 +01:00
Riley Williams 651776896e Remove lints for redundant_sendable on protocols (#5959) 2025-01-13 23:15:40 +00:00
Danny Mösch 3f2b86c54d Remove trailing comma when Sendable was last (#5955) 2025-01-13 20:18:54 +01:00
Koichiro UekiandDanny Mösch fc70594ad2 Ignore TipKit's #Rule macro in empty_count rule (#5918)
Co-authored-by: Danny Mösch <danny.moesch@icloud.com>
2025-01-07 09:22:10 -05:00
Danny Mösch ae8aeb3995 Add option to disable redundant_discardable_let in SwiftUI view bodies (#5929) 2025-01-03 19:30:35 +01:00
Danny Mösch bef8acfb0e Avoid NSRegularExpression in configurations (#5921) 2024-12-28 12:54:23 -05:00
Danny Mösch 1d8af83b48 Collect corrections together with violations (#5916) 2024-12-27 09:58:53 +01:00
Danny Mösch ff21ff796c Specify rule properties in attribute 2024-12-26 20:40:29 +01:00
Danny Mösch 03f8c83d0d Add new redundant_sendable rule (#5902) 2024-12-25 23:05:02 +01:00
Martin Redington deaacf6f69 Fixed PrivateUnitTestRule deprecations (#5912) 2024-12-25 19:43:27 +00:00
Danny Mösch 15e1598d43 Move reusable functionality from SwiftLintBuiltInRules to SwiftLintCore 2024-12-23 12:51:43 +01:00
Dinesh SharmaandDanny Mösch 8e3b50fa61 Add new category for @IBSegueAction to type_contents_order rule (#5524)
Co-authored-by: Danny Mösch <danny.moesch@icloud.com>
2024-12-14 18:02:54 -05:00
Danny Mösch f2175c1906 Remove deprecated inert_defer rule entirely (#5894) 2024-12-09 18:30:22 -05:00
Danny Mösch 40f9a2a18e Remove deprecated rule entirely (#5889)
The rule has been deprecated for 2 years.
2024-12-07 09:25:29 -05:00
Danny Mösch 7dd8e65d4f Ignore super calls with trailing closures (#5887) 2024-12-05 16:38:34 -05:00
Danny Mösch f13c54cf88 Replace identity expressions with \.self (#5871) 2024-12-01 19:30:29 +01:00
Jared Grubb c45427e08b Handle @unknown default in vertical_whitespace_between_cases rule (#5843) 2024-12-01 01:17:08 +00:00
Danny Mösch b22c2b5c4c Treat compactMap as standard function (#5876) 2024-11-29 22:52:37 +00:00
jkolarik-paylocityandDanny Mösch 0ce122e716 Add new async_without_await rule (#5869)
Co-authored-by: Danny Mösch <danny.moesch@icloud.com>
2024-11-27 16:15:25 -05:00
fraioli b9d33e43ec Update file_name rule to allow fully-qualified names of nested types (#5841) 2024-11-26 21:47:49 +01:00