SwiftLint v0.50.0 Release Notes
-
๐ฅ Breaking
๐ SwiftLint now requires Swift 5.7 or higher to build.
JP SimardExclude
weak_delegate
rule from autocorrection due to behavioral changes leading to potential undefined behavior or bugs.
SimplyDanny #3577๐ The
anyobject_protocol
rule is now deprecated and will be completely removed in a future release because it is now handled by the Swift compiler.
JP Simard๐ Built-in SwiftLint rules are no longer marked as
public
in SwiftLintFramework. This only impacts the programmatic API for the SwiftLintFramework module.
JP Simard
Experimental
- None.
โจ Enhancements
๐ SwiftSyntax libraries have been updated from the previous 5.6 release and now use the new parser written in Swift. Swift 5.7+ features should now be parsed more accurately. We've also measured an improvement in lint times of up to 15%. This should also fix some deployment issues where the exact version of the internal SwiftSyntax parser needed to be available. If you notice any unexpected changes to lint results, please file an issue on the SwiftLint issue tracker. We can look into it and if it's a SwiftSyntax parser regression we can re-file it upstream.
JP Simard #4031Rewrite some rules with SwiftSyntax, fixing some false positives and catching more violations:
anonymous_argument_in_multiline_closure
array_init
attributes
balanced_xctest_lifecycle
block_based_kvo
class_delegate_protocol
closing_brace
closure_body_length
closure_parameter_position
collection_alignment
comment_spacing
computed_accessors_order
conditional_returns_on_newline
contains_over_filter_count
contains_over_filter_is_empty
contains_over_first_not_nil
contains_over_range_nil_comparison
convenience_type
deployment_target
discarded_notification_center_observer
discouraged_assert
discouraged_direct_init
discouraged_none_name
discouraged_object_literal
discouraged_optional_boolean
duplicate_enum_cases
duplicated_key_in_dictionary_literal
dynamic_inline
empty_collection_literal
empty_count
empty_enum_arguments
empty_parameters
empty_parentheses_with_trailing_closure
empty_string
enum_case_associated_values_count
explicit_enum_raw_value
explicit_init
explicit_top_level_acl
fallthrough
file_name
first_where
flatmap_over_map_reduce
for_where
force_try
force_unwrapping
function_body_length
function_default_parameter_at_end
function_parameter_count
generic_type_name
ibinspectable_in_extension
identical_operands
implicit_getter
implicitly_unwrapped_optional
inclusive_language
inert_defer
is_disjoint
joined_default_parameter
large_tuple
last_where
legacy_cggeometry_functions
legacy_constant
legacy_constructor
legacy_hashing
legacy_multiple
legacy_nsgeometry_functions
legacy_objc_type
legacy_random
lower_acl_than_parent
multiline_arguments_brackets
multiline_parameters
multiple_closures_with_trailing_closure
no_extension_access_modifier
no_fallthrough_only
no_space_in_method_call
notification_center_detachment
nslocalizedstring_key
nslocalizedstring_require_bundle
nsobject_prefer_isequal
number_separator
object_literal
operator_whitespace
optional_enum_case_matching
orphaned_doc_comment
overridden_super_call
override_in_extension
pattern_matching_keywords
prefer_nimble
prefer_self_in_static_references
prefer_self_type_over_type_of_self
prefer_zero_over_explicit_init
prefixed_toplevel_constant
private_action
private_outlet
private_over_fileprivate
private_subject
private_unit_test
prohibited_interface_builder
prohibited_super_call
protocol_property_accessors_order
quick_discouraged_focused_test
quick_discouraged_pending_test
raw_value_for_camel_cased_codable_enum
reduce_boolean
reduce_into
redundant_discardable_let
redundant_nil_coalescing
redundant_objc_attribute
redundant_optional_initialization
redundant_set_access_control
redundant_string_enum_value
required_deinit
required_enum_case
return_arrow_whitespace
self_in_property_initialization
shorthand_operator
single_test_class
sorted_first_last
static_operator
strict_fileprivate
strong_iboutlet
switch_case_alignment
switch_case_on_newline
test_case_accessibility
toggle_bool
trailing_comma
trailing_semicolon
type_body_length
type_name
unneeded_break_in_switch
unneeded_parentheses_in_closure_argument
unowned_variable_capture
untyped_error_in_catch
unused_capture_list
unused_closure_parameter
unused_control_flow_label
unused_enumerated
unused_optional_binding
unused_setter_value
valid_ibinspectable
vertical_parameter_alignment
weak_delegate
xct_specific_matcher
xctfail_message
Marcelo Fabri SimplyDanny JP Simard #2915
The "body length" family of rules have changed how they calculate body line count to be significantly more correct and intuitive. However, this is likely to require adjustments to your configuration or disable commands to account for the changes.
JP Simardโ Add ability to filter rules for
generate-docs
subcommand.
kattoufAdd new
excludes_trivial_init
configuration formissing_docs
rule to exclude initializers without any parameters.
Marcelo Fabri #4107Add new
ns_number_init_as_function_reference
rule to catchNSNumber.init
andNSDecimalNumber.init
being used as function references since it can cause the wrong initializer to be used, causing crashes. See https://github.com/apple/swift/issues/51036 for more info.
Marcelo FabriAdd
accessibility_trait_for_button
rule to warn if a SwiftUI View has a tap gesture added to it without having the button or link accessibility trait.
Ryan Coleโ Add methods from SE-0348 to
UnusedDeclarationRule
.
JP SimardInclude the configured
bind_identifier
inself_binding
violation messages.
JP SimardThe
self_binding
rule now catches shorthand optional bindings (for exampleif let self {}
) when using abind_identifier
different thanself
.
Marcelo FabriAdd
library_content_provider
file type tofile_types_order
rule to allowLibraryContentProvider
to be ordered independent frommain_type
.
dahlbornAdd
test_parent_classes
option totest_case_accessibility
rule, which allows detection in subclasses of XCTestCase.
Martin Redington #4200Add a new
shorthand_optional_binding
opt-in rule that triggers in Swift 5.7 when a shadowing optional binding is created in anif
orguard
statement.
SimplyDanny #4202๐ Use SwiftSyntax instead of SourceKit to determine if a file has parser errors before applying corrections. This speeds up corrections significantly when none of the rules use SourceKit.
JP Simardโ Add Swift Package Build Tool Plugin with support for Swift Packages and Xcode projects.
Johannes Ebeling #3679 #3840Make
private_unit_test
rule correctable.
SimplyDannyDisregard whitespace differences in
identical_operands
rule. That is, the rule now also triggers if the left-hand side and the right-hand side of an operation only differ in trivia.
SimplyDanny๐จ Print violations in realtime if
--progress
and--output
are both set.
JP SimardTrigger
prefer_self_in_static_references
rule on more type references like:- Key paths (e.g.
\MyType.myVar
->\Self.myVar
) - Computed properties (e.g.
var i: Int { MyType.myVar )
->var i: Int { Self.myVar }
) - Constructor calls (e.g.
MyType()
->Self()
)
- Key paths (e.g.
โก๏ธ Update
for_where
rule, adding a new configurationallow_for_as_filter
to allow usingfor in
with a singleif
inside when there's areturn
statement inside theif
's body.
Marcelo Fabri #4040quick_discouraged_call
,quick_discouraged_focused_test
andquick_discouraged_pending_test
rules now trigger on subclasses ofQuickSpec
. Marcelo Fabri #44200๏ธโฃ The
type_name
rule now validates protocol declarations by default. You can opt-out by using thevalidate_protocols
key in your configuration:type_name: validate_protocols: false
Report how much memory was used when
--benchmark
is specified.
JP SimardAdds
NSError
to the list of types indiscouraged_direct_init
.
jszumski #4508๐ Fix SwiftLint support on Xcode Cloud.
JagCesar westerlund #4484Add
no_magic_numbers
rule to avoid "Magic Numbers".
Henrik Storch #4031Add new option
only_enforce_before_trivial_lines
tovertical_whitespace_closing_braces
rule. It restricts the rule to apply only before trivial lines (containing only closing braces, brackets and parentheses). This allows empty lines before non-trivial lines of code (e.g. if-else-statements).
benjamin-kramer #3940
๐ Bug Fixes
Respect
validates_start_with_lowercase
option when linting function names.
Chris Brakebill #2708Do not report variables annotated with
@NSApplicationDelegateAdaptor
and@WKExtensionDelegateAdaptor
inweak_delegate
rule.
Till Hainbach #3598 #3611๐ Fix false-positives related to the
willMove
lifecycle method intype_contents_order
rule.
SimplyDanny #3478Do no longer autocorrect usage of
NSIntersectionRect
inlegacy_nsgeometry_functions
rule.
SimplyDanny #3703๐ Fix Analyzer rules in Xcode 14.
SimplyDanny #4208โ Add column for SourceKit usage to
rules
command.
JP SimardMake
nsobject_prefer_isequal
rule work for nested@objc
classes. Also consider the@objcMembers
annotation.
SimplyDanny๐จ Print fixed content at most once to STDOUT.
SimplyDanny #4211๐ Fix fatal error when content given via STDIN is corrected in the
trailing_newline
rule.
SimplyDanny #4234Fix false-positives from
multiline_arguments_brackets
when a function call has a single line trailing closure.
CraigSiemens #4510