Releases: realm/SwiftLint
0.49.0-rc.1: Asynchronous Defuzzer
This is a prerelease version. It won't be published to Homebrew or CocoaPods. But there are many other ways to install:
- Downloading the attached
SwiftLint.pkg
installer and launching it - Downloading the attached
portable_swiftlint.zip
archive, extracting it and moving the binary fromportable_swiftlint/swiftlint
to/usr/local/bin
or elsewhere in yourPATH
- Using Mint:
mint install realm/[email protected]
- Cloning and building from source:
git clone https://github.com/realm/SwiftLint.git && cd SwiftLint && git checkout 0.49.0-rc.1 && make install
- Docker:
docker run -it -v `pwd`:`pwd` -w `pwd` ghcr.io/realm/swiftlint:0.49.0-rc.1
- Bazel: See instructions at the bottom
Changes from 0.48.0: 0.48.0...0.49.0-rc.1
Note: The default branch for the SwiftLint git repository will be renamed from
master
to main
on September 1st. Please update any code or automation
accordingly.
Breaking
-
SwiftLint now requires Swift 5.6 or higher to build, and macOS 12
or higher to run.
JP Simard -
Code Climate reports now use SHA256 strings as the issue fingerprint
values.
JP Simard -
Make
comma_inheritance
an opt-in rule.
Steve Madsen
#4027 -
The
autocorrect
command that was deprecated in 0.43.0 has now been
completely removed. Use--fix
instead.
JP Simard -
Remove the
AutomaticTestableRule
protocol. All examples listed in rules are
now tested automatically to make sure they are correct.
SimplyDanny -
Deprecate the
--in-process-sourcekit
command line flag. SwiftLint now always
uses an in-process SourceKit.
JP Simard
Experimental
- None.
Enhancements
-
Make
duplicate_imports
rule correctable. Fixduplicate_imports
rule
reporting redundant violations when more than one duplicate is present.
Timofey Solonin -
Support for building SwiftLint with bazel.
JP Simard -
Support for writing custom private native rules when building with
bazel.
JP Simard
Keith Smiley
#3516 -
Make
comma
rule about 10x faster, finding some previously missed cases and
fixing some previously wrong corrections.
JP Simard -
Make
colon
rule about 7x faster, finding some previously missed cases.
JP Simard -
Introduce new configuration option
include_compiler_directives
(true
by
default) for theindentation_width
rule that allows to ignore compiler
directives in the indentation analysis. This is especially useful if one (or
a formatter) prefers to have compiler directives always at the very beginning
of a line.
SimplyDanny
#4030
Bug Fixes
-
Fix false positive in
self_in_property_initialization
rule when using
closures insidedidSet
and other accessors.
Marcelo Fabri
#4041 -
Fix false positive in
Duplicated Key in Dictionary Literal Violation
rule
when using keys that are generated at runtime with the same source code.
OrEliyahu
#4012
Using Bazel
Put this in your WORKSPACE
:
WORKSPACE
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "build_bazel_rules_apple",
sha256 = "36072d4f3614d309d6a703da0dfe48684ec4c65a89611aeb9590b45af7a3e592",
url = "https://github.com/bazelbuild/rules_apple/releases/download/1.0.1/rules_apple.1.0.1.tar.gz",
)
load(
"@build_bazel_rules_apple//apple:repositories.bzl",
"apple_rules_dependencies",
)
apple_rules_dependencies()
load(
"@build_bazel_rules_swift//swift:repositories.bzl",
"swift_rules_dependencies",
)
swift_rules_dependencies()
load(
"@build_bazel_rules_swift//swift:extras.bzl",
"swift_rules_extra_dependencies",
)
swift_rules_extra_dependencies()
http_archive(
name = "SwiftLint",
sha256 = "e954f4483f7f4cf523896693ee3505585f6beb0f791e362b42d9bdbb615f051a",
url = "https://github.com/realm/SwiftLint/releases/download/0.49.0-rc.1/bazel.tar.gz",
)
load("@SwiftLint//bazel:repos.bzl", "swiftlint_repos")
swiftlint_repos()
load("@SwiftLint//bazel:deps.bzl", "swiftlint_deps")
swiftlint_deps()
Then you can run SwiftLint in the current directory with this command:
bazel run @SwiftLint//:swiftlint -- --help
0.48.0: Rechargeable Defuzzer
This is the last release to support building with Swift 5.5.x and running on
macOS < 12.
Breaking
- Deprecate the
--path
options forlint
/analyze
commands. Prefer the
positional paths that can be added last to both commands.
SimplyDanny
Experimental
- None.
Enhancements
-
Support
iOSApplicationExtension
,macOSApplicationExtension
,
watchOSApplicationExtension
, andtvOSApplicationExtension
identifiers
in thedeployment_target
rule. To configure the rule for these identifiers,
you need to use the keysiOSApplicationExtension_deployment_target
,
macOSApplicationExtension_deployment_target
,
watchOSApplicationExtension_deployment_target
, and
tvOSApplicationExtension_deployment_target
. Extentions default to
their counterparts unless they are explicitly defined.
tahabebek
#4004 -
Rewrite
operator_usage_whitespace
rule using SwiftSyntax, fixing
false positives and false negatives.
Note that this rule doesn't catch violations around return arrows (->
)
anymore - they are already handled byreturn_arrow_whitespace
.
Marcelo Fabri
#3965
#3668
#2728 -
Support arrays for the
included
andexcluded
options when defining
a custom rule.
Marcelo Fabri -
Add back
void_function_in_ternary
opt-in rule to warn against using
a ternary operator to callVoid
functions.
Marcelo Fabri -
Support
UIEdgeInsets
type inprefer_zero_over_explicit_init
rule.
KokiHirokawa
#3986
Bug Fixes
-
Ignore array types in
syntactic_sugar
rule if their associatedIndex
is
accessed.
SimplyDanny
#3502 -
Prevent crash for private types named
_
intype_name
rules.
sinoru
#3971 -
Make
for_where
rule implementation independent of order in structure
dictionary. This fixes the rule in Xcode 13.3 where some violation were
no longer reported.
SimplyDanny
#3975 -
Update result builder methods in
unused_declaration
rule fixing some
false-positives.
SimplyDanny -
Look for call expressions which are not wrapped into an argument when
checking for nested (possibly multiline) arguments fixing some
false-negatives in (at least) Xcode 13.2.
SimplyDanny
#3975 -
Make sure that include paths prefixed with the name of the original path
are included in the analysis.
SimplyDanny
#3705 -
Do not trigger
unavailable_condition
rule if other#(un)available
checks are involved.
SimplyDanny
#3985 -
Update
nimble_operator
to support the operators forbeNil()
.
CraigSiemens -
Avoid false-positive in
let_var_whitespace
rule by allowing custom
attributes on lines directly before let/var declarations.
SimplyDanny
#2980
0.47.1: Smarter Appliance
Breaking
- None.
Experimental
- None.
Enhancements
-
Add type-checked analyzer rule version of
ArrayInitRule
named
TypesafeArrayInitRule
with identifiertypesafe_array_init
that
avoids the false positives present in the lint rule.
SimplyDanny
#3749 -
Add the
--in-process-sourcekit
command line flag tolint
andanalyze
commands, which has the same effect as setting theIN_PROCESS_SOURCEKIT
environment variable.
Juozas Valancius -
Add a new
artifactbundle
release asset containingswiftlint
binaries for
x86 & arm64 macOS.
Juozas Valancius
#3840 -
Add back
return_value_from_void_function
opt-in rule to warn against using
return <expression>
in a function that returnsVoid
.
Marcelo Fabri -
Don't skip autocorrect on files that have parser warnings. Only files with
errors reported by the Swift parser will be skipped.
Marcelo Fabri
#3343 -
Add
accessibility_label_for_image
rule to warn if a SwiftUI
Image does not have an accessibility label and is not hidden from
accessibility.
Ryan Cole -
Add
unavailable_condition
rule to prefer usingif #unavailable
instead of
if #available
with an empty body and anelse
condition when using
Swift 5.6 or later.
Marcelo Fabri
#3897 -
Add
comma_inheritance
rule to validate that inheritance clauses use commas
instead of&
.
Marcelo Fabri
#3950
Bug Fixes
-
Fix false positives in
unused_closure_parameter
when using parameters with
backticks.
JP Simard
#3628 -
Improved the
syntactic_sugar
rule's detection accuracy and fixed some
corrections leading to invalid code.
Paul Taykalo
#3866 -
Fix analyzer rules with Xcode 13.3 / Swift 5.6. Note that we've measured
performance regressions compared to Swift 5.5 on the order of about 2x.
JP Simard
#3920 -
Error by default on bad expiring todo date formatting.
Christopher Hale
#3636 -
Lint/analyze all files listed in the command even if the
--path
option is
used.
coffmark
0.47.0: Smart Appliance
Breaking
-
SwiftLint now requires Swift 5.5 or higher to build.
JP Simard -
The
SwiftLintFramework
podspec has been removed. To our knowledge, this was
completely unused by other projects and was not worth the complexity needed
to justify its continued maintenance, especially in light of the integration
of SwiftSyntax. TheSwiftLint
podspec is still supported.
JP Simard -
SwiftLint now requires at least Swift 5.0 installed in order to lint files.
Marcelo Fabri
Experimental
- The
force_cast
rule and the comment command parsing mechanism have been
updated to use SwiftSyntax instead of SourceKit. Please report any problems
you encounter by opening a GitHub issue. If this is successful, more rules may
use Swift Syntax in the future.
JP Simard
Enhancements
-
Empty files no longer trigger any violations.
JP Simard
#3854 -
The
legacy_random
rule is now enabled by default.
Marcelo Fabri -
The
deployment_target
rule now supports the#unavailable
syntax
added in Swift 5.6.
Marcelo Fabri
#3896 -
Set the
IN_PROCESS_SOURCEKIT
environment variable, which will use
the in-process version of sourcekitd on macOS when Xcode 13 or later is
selected. This avoids the use of XPC, which is prohibited in some sandboxed
environments, such as in Swift Package Manager plugins.
Juozas Valancius -
Add ability to run only one (focused) example.
PaulTaykalo
#3911
Bug Fixes
-
Extend
class_delegate_protocol
to correctly identify cases with the protocol
body opening brace on a new line.
Tobisaninfo -
Fix SwiftLint.pkg installer installing multiple copies of SwiftLint.
JP Simard
#3815
#3887
0.47.0-rc.4: Smart Appliance
This is a prerelease version. It won't be published to Homebrew or CocoaPods. But there are many other ways to install:
- Downloading the attached
SwiftLint.pkg
installer and launching it - Downloading the attached
portable_swiftlint.zip
archive, extracting it and moving the binary fromportable_swiftlint/swiftlint
to/usr/local/bin
or elsewhere in yourPATH
- Using Mint:
mint install realm/[email protected]
- Cloning and building from source:
git clone https://github.com/realm/SwiftLint.git && cd SwiftLint && git checkout 0.47.0-rc.4 && make install
- Docker:
docker run -it -v `pwd`:`pwd` -w `pwd` ghcr.io/realm/swiftlint:0.47.0-rc.4
Changes from 0.46.5: 0.46.5...0.47.0-rc.4
Changes from 0.47.0-rc.3: 0.47.0-rc.3...0.47.0-rc.4
Breaking
-
SwiftLint now requires Swift 5.5 or higher to build.
JP Simard -
The
SwiftLintFramework
podspec has been removed. To our knowledge, this was
completely unused by other projects and was not worth the complexity needed
to justify its continued maintenance, especially in light of the integration
of SwiftSyntax. TheSwiftLint
podspec is still supported.
JP Simard -
SwiftLint now requires at least Swift 5.0 installed in order to lint files.
Marcelo Fabri
Experimental
- The
force_cast
rule and the comment command parsing mechanism have been
updated to use SwiftSyntax instead of SourceKit. Please report any problems
you encounter by opening a GitHub issue. If this is successful, more rules may
use Swift Syntax in the future.
JP Simard
Enhancements
-
Empty files no longer trigger any violations.
JP Simard
#3854 -
The
legacy_random
rule is now enabled by default.
Marcelo Fabri -
The
deployment_target
rule now supports the#unavailable
syntax
added in Swift 5.6.
Marcelo Fabri
#3896 -
Set the
IN_PROCESS_SOURCEKIT
environment variable, which will use
the in-process version of sourcekitd on macOS when Xcode 13 or later is
selected. This avoids the use of XPC, which is prohibited in some sandboxed
environments, such as in Swift Package Manager plugins.
Juozas Valancius
Bug Fixes
-
Extend
class_delegate_protocol
to correctly identify cases with the protocol
body opening brace on a new line.
Tobisaninfo -
Fix SwiftLint.pkg installer installing multiple copies of SwiftLint.
JP Simard
#3815
#3887
0.47.0-rc.3: Smart Appliance
This is a prerelease version. It won't be published to Homebrew or CocoaPods. But there are many other ways to install:
- Downloading the attached
SwiftLint.pkg
installer and launching it - Downloading the attached
portable_swiftlint.zip
archive, extracting it and moving the binary fromportable_swiftlint/swiftlint
to/usr/local/bin
or elsewhere in yourPATH
- Using Mint:
mint install realm/[email protected]
- Cloning and building from source:
git clone https://github.com/realm/SwiftLint.git && cd SwiftLint && git checkout 0.47.0-rc.3 && make install
- Docker:
docker run -it -v `pwd`:`pwd` -w `pwd` ghcr.io/realm/swiftlint:0.47.0-rc.3
Changes from 0.46.5: 0.46.5...0.47.0-rc.3
Changes from 0.47.0-rc.2: 0.47.0-rc.2...0.47.0-rc.3
Breaking
-
SwiftLint now requires Swift 5.5 or higher to build.
JP Simard -
The
SwiftLintFramework
podspec has been removed. To our knowledge, this was
completely unused by other projects and was not worth the complexity needed
to justify its continued maintenance, especially in light of the integration
of SwiftSyntax. TheSwiftLint
podspec is still supported.
JP Simard -
SwiftLint now requires at least Swift 5.0 installed in order to lint files.
Marcelo Fabri
Experimental
- The
force_cast
rule and the comment command parsing mechanism have been
updated to use SwiftSyntax instead of SourceKit. Please report any problems
you encounter by opening a GitHub issue. If this is successful, more rules may
use Swift Syntax in the future.
JP Simard
Enhancements
-
Empty files no longer trigger any violations.
JP Simard
#3854 -
The
legacy_random
rule is now enabled by default.
Marcelo Fabri -
The
deployment_target
rule now supports the#unavailable
syntax
added in Swift 5.6.
Marcelo Fabri
#3896 -
SwiftSyntax has been updated to its Swift 5.6 release and may improve parsing
of Swift 5.6 code.
JP Simard -
Add
IN_PROCESS_SOURCEKIT
environment variable, which uses
the in-process version of sourcekitd on macOS when Xcode 13 or later is
selected. This avoids the use of XPC, which is prohibited in some sandboxed
environments, such as in Swift Package Manager plugins.
Juozas Valancius
Bug Fixes
-
Extend
class_delegate_protocol
to correctly identify cases with the protocol
body opening brace on a new line.
Tobisaninfo -
Fix SwiftLint.pkg installer installing multiple copies of SwiftLint.
JP Simard
#3815
#3887
0.47.0-rc.2: Smart Appliance
This is a prerelease version. It won't be published to Homebrew or CocoaPods. But there are many other ways to install:
- Downloading the attached
SwiftLint.pkg
installer and launching it - Downloading the attached
portable_swiftlint.zip
archive, extracting it and moving the binary fromportable_swiftlint/swiftlint
to/usr/local/bin
or elsewhere in yourPATH
- Using Mint:
mint install realm/[email protected]
- Cloning and building from source:
git clone https://github.com/realm/SwiftLint.git && cd SwiftLint && git checkout 0.47.0-rc.2 && make install
- Docker:
docker run -it -v `pwd`:`pwd` -w `pwd` ghcr.io/realm/swiftlint:0.47.0-rc.2
Changes from 0.46.5: 0.46.5...0.47.0-rc.2
Changes from 0.47.0-rc.1: 0.47.0-rc.1...0.47.0-rc.2
Breaking
-
SwiftLint now requires Swift 5.5 or higher to build.
JP Simard -
The
SwiftLintFramework
podspec has been removed. To our knowledge, this was
completely unused by other projects and was not worth the complexity needed
to justify its continued maintenance, especially in light of the integration
of SwiftSyntax. TheSwiftLint
podspec is still supported.
JP Simard -
SwiftLint now requires at least Swift 5.0 installed in order to lint files.
Marcelo Fabri
Experimental
- The
force_cast
rule and the comment command parsing mechanism have been
updated to use SwiftSyntax instead of SourceKit. Please report any problems
you encounter by opening a GitHub issue. If this is successful, more rules may
use Swift Syntax in the future.
JP Simard
Enhancements
-
Empty files no longer trigger any violations.
JP Simard
#3854 -
The
legacy_random
rule is now enabled by default.
Marcelo Fabri -
The
deployment_target
rule now supports the#unavailable
syntax
added in Swift 5.6.
Marcelo Fabri
#3896 -
Add
IN_PROCESS_SOURCEKIT
environment variable, which uses
the in-process version of sourcekitd on macOS when Xcode 13 or later is
selected. This avoids the use of XPC, which is prohibited in some sandboxed
environments, such as in Swift Package Manager plugins.
Juozas Valancius
Bug Fixes
-
Extend
class_delegate_protocol
to correctly identify cases with the protocol
body opening brace on a new line.
Tobisaninfo -
Fix SwiftLint.pkg installer installing multiple copies of SwiftLint.
JP Simard
#3815
#3887
0.47.0-rc.1: Smart Appliance
This is a prerelease version. It won't be published to Homebrew or CocoaPods. But there are many other ways to install:
- Downloading the attached
SwiftLint.pkg
installer and launching it - Downloading the attached
portable_swiftlint.zip
archive, extracting it and moving the binary fromportable_swiftlint/swiftlint
to/usr/local/bin
or elsewhere in yourPATH
- Using Mint:
mint install realm/[email protected]
- Cloning and building from source:
git clone https://github.com/realm/SwiftLint.git && cd SwiftLint && git checkout 0.47.0-rc.1 && make install
- Docker:
docker run -it -v `pwd`:`pwd` -w `pwd` ghcr.io/realm/swiftlint:0.47.0-rc.1
Changes from 0.46.5: 0.46.5...0.47.0-rc.1
Breaking
-
SwiftLint now requires Swift 5.5 or higher to build.
JP Simard -
The
SwiftLintFramework
podspec has been removed. To our knowledge, this was
completely unused by other projects and was not worth the complexity needed
to justify its continued maintenance, especially in light of the integration
of SwiftSyntax. TheSwiftLint
podspec is still supported.
JP Simard
Experimental
- The
force_cast
rule and the comment command parsing mechanism have been
updated to use SwiftSyntax instead of SourceKit. Please report any problems
you encounter by opening a GitHub issue. If this is successful, more rules may
use Swift Syntax in the future.
JP Simard
0.46.5: Laundry Studio
Breaking
- None.
Experimental
- None.
Enhancements
- None.
Bug Fixes
-
Fix
empty_parentheses_with_trailing_closure
rule when using Swift 5.6.
Marcelo Fabri
#3846 -
Fix false negatives in
closure_parameter_position
rule with Swift 5.6.
Marcelo Fabri
#3845 -
Fix regression in
last_where
rule when using Swift 5.6.
Marcelo Fabri
#3847 -
Fix regression in
unused_import
rule when using Swift 5.6.
JP Simard
#3849 -
Fix regression in
trailing_closure
rule when using Swift 5.6.
Marcelo Fabri
#3848
0.46.4: Detergent Tray
Breaking
- None.
Experimental
- None.
Enhancements
- None.
Bug Fixes
-
Ignore meta class types in
prefer_self_in_static_references
rule.
SimplyDanny
#3804 -
Ignore MARK in multiline comment, fixing cases that would previously crash or
produce invalid results when correcting.
goranche
#1749
#3841 -
Fix false positive in
EmptyEnumArgumentsRule
rule when using Swift 5.6.
Marcelo Fabri
#3850