Releases: realm/SwiftLint
0.36.0: 👕👚👗
Breaking
- SwiftLint now requires Swift 5.0 or higher to build.
JP Simard
Experimental
- None.
Enhancements
-
Add
contains_over_range_nil_comparison
opt-in rule to prefer
usingcontains
over comparison ofrange(of:)
tonil
.
Colton Schlosser
#2776 -
Make
contains_over_first_not_nil
rule also matchfirst(where:) == nil
.
Colton Schlosser -
Add two new cases to the Mark rule to detect a Mark using three slashes.
nvanfleet
#2866 -
Add
flatmap_over_map_reduce
opt-in rule to prefer
usingflatMap
overmap { ... }.reduce([], +)
.
Marcelo Fabri
#2883 -
Add autocorrection to
syntactic_sugar
.
Ivan Vavilov -
Make
toggle_bool
rule substitution correctable.
MaxHaertwig -
Optimize the performance of
redundant_void_return
rule.
Marcelo Fabri -
Support building with Swift 5.1 on Linux.
Marcelo Fabri
#2874 -
Add
raw_value_for_camel_cased_codable_enum
opt-in rule to enforce raw values
for camel cased Codable String enum cases.
Marko Pejovic
#2888 -
Speedup
LetVarWhiteSpacesRule
.
PaulTaykalo
#2901
Bug Fixes
- Fix running analyzer rules on the output of builds performed with
Xcode 11 or later.
JP Simard
0.35.0: Secondary Lint Trap
This is the last release to support building with Swift 4.2.x.
Breaking
- None.
Experimental
- None.
Enhancements
-
Type name rules considers SwiftUI template code.
atfelix
#2791 -
Add
no_space_in_method_call
rule to validate that there're no spaces
between the method name and parentheses in a method call.
Marcelo Fabri -
Add
contains_over_filter_count
opt-in rule to warn against using
expressions likefilter(where:).count > 0
instead ofcontains(where:)
.
Marcelo Fabri
#2803 -
Add
contains_over_filter_is_empty
opt-in rule to warn against using
expressions likefilter(where:).isEmpty
instead ofcontains(where:)
.
Marcelo Fabri -
Add
empty_collection_literal
opt-in rule to prefer usingisEmpty
to
comparison to[]
or[:]
.
Colton Schlosser
#2807
Bug Fixes
-
Fixed false positive in
colon
rule inside guard and ternary operator.
Andrey Uryadov
#2806 -
Release memory created for sourcekitd requests.
Colton Schlosser
#2812 -
Fix
swiftlint rules
output table formatting.
JP Simard
#2787 -
Don't trigger
missing_docs
violations when implementingdeinit
.
Marcelo Fabri
#2690 -
Fix
unused_import
rule false positive when only operators from the module
are used.
Timofey Solonin
#2737 -
Avoid triggering
redundant_type_annotation
rule when declaring
IBInspectable
properties.
Marcelo Fabri
#2842 -
Don't trigger
missing_docs
violations on extensions.
Marcelo Fabri
#2851
0.34.0: Anti-Static Wool Dryer Balls
Breaking
- To enable collecting rules, many breaking changes to
SwiftLintFramework
's
public API were made theLinter
type was significantely changed, and a new
CollectedLinter
type was introduced. Many publicSwiftLintFramework
APIs
that interacted withLinter
have also been affected. More new types and
protocols were added such asRuleStorage
,AnyCollectingRule
,
CollectingRule
,CollectingCorrectableRule
.
We are not aware of any significant users of theSwiftLintFramework
library,
so if you are affected by this, please reach out to SwiftLint contributors by
filing a GitHub issue about your use case.
Elliott Williams
JP Simard
Experimental
-
Add a two-stage
CollectingRule
protocol to support rules that collect data
from all files before validating. Collecting rules implement acollect
method which is called once for every file, before any file is checked for
violations. By collecting, rules can be written which validate across
multiple files for things like unused declarations.
Elliott Williams
#2431 -
Add a new
unused_declaration
analyzer rule to lint for unused declarations.
By default, detects unusedfileprivate
,private
andinternal
declarations. Configure the rule withinclude_public_and_open: true
to
also detect unusedpublic
andopen
declarations.
JP Simard -
Completely remove the
unused_private_declaration
rule. Please use
unused_declaration
instead.
JP Simard
Enhancements
- None.
Bug Fixes
- None.
0.33.1: Coin-Operated Property Wrapper
Breaking
- None.
Experimental
- None.
Enhancements
-
Significantly improve performance when running with a large number of cached
configurations or when running with many cached results.
This was done by splitting each configuration to have its own cache and by
encoding the cache as a binary property list instead of json.
Colton Schlosser
JP Simard -
Several public types in SwiftLintFramework have added
Codable
conformance:
Location, RuleDescription, RuleKind, StyleViolation, SwiftVersion,
ViolationSeverity.
JP Simard -
Print full relative path to file in log output when it matches the file name
of another path being linted.
Keith Smiley
Bug Fixes
-
Don't trigger
vertical_parameter_alignment
violations when using parameters
with attributes such as@ViewBuilder
in function declarations.
Marcelo Fabri
#2792 -
Fix false positive in
function_default_parameter_at_end
rule when using
a closure parameter with default value.
Marcelo Fabri
#2788
0.33.0: Worldwide Dryers Conference
Breaking
- Remove the
weak_computed_property
rule. Please see linked issue for
discussion and rationale.
JP Simard
#2712
Experimental
- None.
Enhancements
-
Add
" - "
delimiter to allow commenting SwiftLint commands without triggering
superfluous_disable_command
.
Kevin Randrup -
Make
testSimulateHomebrewTest()
test opt-in because it may fail on unknown
condition. SetSWIFTLINT_FRAMEWORK_TEST_ENABLE_SIMULATE_HOMEBREW_TEST
environment variable to test like:$ SWIFTLINT_FRAMEWORK_TEST_ENABLE_SIMULATE_HOMEBREW_TEST=1 \ swift test --filter testSimulateHomebrewTest
-
Add option to configure how nested types should be separated in file names by
introductingnested_type_separator
configuration for thefile_name
rule.
Frederick Pietschmann
#2717 -
Add
unowned_variable_capture
opt-in rule to warn against unowned captures
in closures when using Swift 5.
Marcelo Fabri
#2097 -
Don't trigger a
no_fallthrough_only
violation if next case is an
@unknown default
.
Marcelo Fabri
#2696 -
Add
duplicate_enum_cases
rule to validate that an enum doesn't contain
duplicated cases, as it's impossible to switch on it
(see SR-10077 for details).
Marcelo Fabri
#2676 -
Add
legacy_multiple
opt-in rule to warn against using the remainder operator
(%
) checking for a remainder of zero when using Swift 5.
Marcelo Fabri
#2612
Bug Fixes
-
Don't trigger
redundant_void_return
violations when usingsubscript
as the
return type is required.
Marcelo Fabri -
Skip module import if cursor info is missing module info.
alvarhansen
#2746 -
Don't trigger
file_types_order
violations in files only containing
extensions.
Sam Rayner
#2749 -
Force-unwrapping
self
should trigger a violation of theforce_unwrapping
rule.
Dalton Claybrook
#2759
0.32.0: Wash-N-Fold-N-Reduce
This release has improved support for building and running SwiftLint using Swift 5, adds seven new (super useful) rules and fixes a number of false positives or missing violations.
Breaking
- None.
Experimental
- None.
Enhancements
-
Add
reduce_boolean
rule to prefer simpler constructs overreduce(Boolean)
.
Xavier Lowmiller
#2675 -
Add
nsobject_prefer_isequal
rule to warn against implementing==
on an
NSObject
subclass as callingisEqual
(i.e. when using the class from
Objective-C) will not use the defined==
method.
Matthew Healy
#2663 -
Add
reduce_into
opt-in rule to encourage the use ofreduce(into:_:)
instead ofreduce(_:_:)
which is less performant.
Dalton Claybrook
#2658 -
Remove @ mark to fix invalid link in Rules.md.
Hiroki Nagasawa
#2669 -
Add new opt-in rule
file_types_order
to specify how the types in a file
should be sorted.
Cihat Gündüz
#2294 -
Add new opt-in rule
type_contents_order
to specify the order of subtypes,
properties, methods & more within a type.
Cihat Gündüz
#2294 -
Add
nslocalizedstring_require_bundle
rule to ensure calls to
NSLocalizedString
specify the bundle where the strings file is located.
Matthew Healy
#2595 -
contains_over_first_not_nil
rule now also checks forfirstIndex(where:)
.
Marcelo Fabri
#2678 -
Add
unused_capture_list
rule to ensure that all references in a closure
capture list are used.
Dalton Claybrook
#2715 -
SwiftLint can now be compiled using Xcode 10.2.
Marcelo Fabri
Norio Nomura
#2693
Bug Fixes
-
Fix bug where SwiftLint ignores excluded files list in a nested configuration
file.
Dylan Bruschi
#2447 -
colon
rule now catches violations when declaring generic types with
inheritance or protocol conformance.
Marcelo Fabri
#2628 -
discarded_notification_center_observer
rule now checks if the observer is
added to any collection or passed to a function before triggering the
violation.
jsloop42
#2684 -
Fix false positives on
number_separator
when the number is wrapped in
parentheses.
Dalton Claybrook
#2683 -
Fix false positives on
sorted_first_last
when callingfirstIndex
and
lastIndex
method.
Taiki Komaba
#2700 -
Fix crash when running on Linux with Swift 5 without specifying a
--path
value or specifying an empty string.
Keith Smiley
#2703 -
Fix false positives on
explicit_acl
andexplicit_top_level_acl
rules when
declaring extensions that add protocol conformances with Swift 5.
Marcelo Fabri
#2705 -
Let
disable all
command overridesuperfluous_disable_command
rule.
Frederick Pietschmann
#2670 -
Fix issues in
explict_acl
,redundant_set_access_control
and
explicit_top_level_acl
rules when using Swift 5.
Marcelo Fabri
#2694
0.31.0: Busy Laundromat
Breaking
- None.
Experimental
- None.
Enhancements
-
Add
deployment_target
rule to validate that@availability
attributes and
#available
conditions are not using a version that is satisfied by the
deployment target. Since SwiftLint can't read an Xcode project, you need to
configure this rule with these keys:iOS_deployment_target
,
macOS_deployment_target
,watchOS_deployment_target
and
tvOS_deployment_target
. By default, these values are configured with the
minimum versions supported by Swift.
Marcelo Fabri
#2589 -
Add
weak_computed_property
rule to warn against usingweak
in a computed
property as it has no effect.
Marcelo Fabri
#2596 -
Add
SwiftVersion.five
and automatically detect it when computing
SwiftVersion.current
.
JP Simard -
Make
redundant_objc_attribute
rule autocorrectable.
Daniel Metzing -
Add
required_deinit
opt-in rule to ensure that all classes have a deinit
method. The purpose of this is to make memory leak debugging easier so all
classes have a place to set a breakpoint to track deallocation.
Ben Staveley-Taylor
#2620 -
nimble_operator
now warns aboutbeTrue()
andbeFalse()
.
Igor-Palaguta
#2613 -
Warn if a configured rule is not enabled.
Marcelo Fabri
#1350 -
Add
exclude_ranges
option tonumber_separator
for exclusion.
Cihat Gündüz
#2637
Bug Fixes
-
Fix false positives on
no_grouping_extension
rule when usingwhere
clause.
Almaz Ibragimov -
Fix
explicit_type_interface
when used in statements.
Daniel Metzing
#2154 -
Fix
lower_acl_than_parent
when linting with Swift 5.
JP Simard
#2607 -
Fix
let_var_whitespace
with#warning
.
Igor-Palaguta
#2544 -
Fix excessive
superfluous_disable_command
violations being reported when
using an invalid rule identifier in a disable command.
Marcelo Fabri
#2623 -
Fix
explicit_type_interface
withallow_redundancy
when assigning type
references to variables.
Cihat Gündüz
#2636 -
Fix
unused_closure_parameter
when argument is namedself
.
Cihat Gündüz
#2437 -
Fix
first_where
for some calls on Realm collection types.
Cihat Gündüz
#1930
0.30.1: Localized Stain Remover
Breaking
- None.
Experimental
- Silence
CodingKeys
violations inunused_private_declaration
since these
should always be intentional violations.
Kim de Vos
#2573
Enhancements
- Add
nslocalizedstring_key
opt-in rule to validate that keys used in
NSLocalizedString
calls are static strings, sogenstrings
will be
able to find them.
Marcelo Fabri
Bug Fixes
-
Fix false positives on
trailing_closure
rule when using anonymous closure
calls.
Marcelo Fabri
#2159 -
Fix false positives on
array_init
rule when using prefix operators.
Marcelo Fabri
#1877 -
Exclude files defined in the
excluded
value of SwiftLint's configuration
when--use-script-input-files
and--force-exclude
are specified.
Luis Valdés
#591
0.30.0: A New Washer and Dryer Set
Breaking
- None.
Experimental
- None.
Enhancements
-
Add
duplicate_imports
rule to prevent importing the same module twice.
Samuel Susla
#1881 -
Add
unused_setter_value
rule to validate that setter arguments are
used in properties.
Marcelo Fabri
#1136 -
Add
only_single_muted_parameter
configuration ontrailing_closure
rule
to only enforce using trailing closure on functions that take one single
muted parameter.
Marcelo Fabri
Bug Fixes
0.29.4: In-Unit Operands
Breaking
- None.
Experimental
- Fix
unused_import
correction deleting unrelated ranges when there are
multiple violations in a single file.
JP Simard
#2561
Enhancements
- Add
strong_iboutlet
opt-in rule to enforce that@IBOutlet
s are not
declared asweak
.
Marcelo Fabri
#2433
Bug Fixes
-
Fix inaccessible custom rules in nested configurations.
Timofey Solonin
#1815
#2441 -
Improve
superfluous_disable_command
to warn against disabling non-existent
rules.
Kim de Vos
#2348 -
Fix false positives on
identical_operands
rule when the right side of the
operand does not terminate.
Xavier Lowmiller
#2467