- Xcode 8.3 or later and Swift 3.1 or later are required to build.
Norio Nomura
-
Rules are now categorized as
lint
,idiomatic
,style
,metrics
orperformance
. Currently this is just used for documentation purposes when you runswiftlint rules
orswiftlint generate-docs
.
Marcelo Fabri -
Add rules documentation generation.
Marcelo Fabri #1078 -
Add
private_over_fileprivate
correctable rule to check for top-level usages offileprivate
and recommendprivate
instead. This is in line with SE-0169's goal "forfileprivate
to be used rarely". There is a also a newstrict_fileprivate
opt-in rule that will mark everyfileprivate
as a violation (especially useful with Swift 4).
Jose Cheyo Jimenez Marcelo Fabri #1469 #1058 -
Add
let_var_whitespace
opt-in rule to enforce thatlet
/var
declarations should be separated from other statements by a single blank line.
Uncommon #1461 -
Improve performance when linting and correcting on Linux, matching macOS behavior.
JP Simard #1577 -
Don't trigger
implicit_getter
violations when attributes (such asmutating
or@inline
) are present.
Marcelo Fabri #1309 #1589 -
Add
--use-tabs
option toAutoCorrectOptions
, enabling formatting using tabs over spaces.
Cody Winton #1327 -
Improve
autocorrect
performance by running it in parallel.
Marcelo Fabri #1578 -
Support building with Xcode 9 beta 3 in Swift 3.2 mode.
JP Simard -
Add support for optional
error
severity level configuration.
Jamie Edge Marcelo Fabri #1647 -
Add
unneeded_parentheses_in_closure_argument
opt-in correctable rule that warns against using parentheses around argument declarations in closures.
Marcelo Fabri #1483 -
Add
--disabled
flag toswiftlint rules
to print only rules that are not enabled in the configuration.
Marcelo Fabri -
Add
ignore_comment_only_lines
boolean configuration option tofile_length
rule. With the option enabled,file_length
will ignore lines which have only comments.
Samuel Susla #1165 -
Improve
file_header
rule description.
Marcelo Fabri #1492 -
Add
trailing_closure
opt-in rule that validates that trailing closure syntax should be used whenever possible.
Marcelo Fabri #54 -
Shebang (
#!
) in the beginning of a file is now ignored by all rules.
Marcelo Fabri #1294
-
Fix false positive on
redundant_discardable_let
rule when usingwhile
statements.
Marcelo Fabri #1669 -
Fix all custom rules not being applied when any rule is configured incorrectly.
Jamie Edge #1586 -
Fix crash when using
--config
with a relative path and--path
with a file.
Marcelo Fabri #1694 -
Fix
mark
rule corrections generating invalid code in some cases.
Marcelo Fabri #1029
- None.
- None.
-
Fix typo in
FatalErrorMessageRule
.
Alexander Lash -
Don't trigger an
extension_access_modifier
violation when all extension members areopen
, asopen extension
is not supported by Swift.
Marcelo Fabri #1629 -
Don't trigger a
vertical_parameter_alignment_on_call
violation when trailing closures are used.
Marcelo Fabri #1635 -
Make
vertical_parameter_alignment_on_call
more flexible when multiline parameters are used.
Marcelo Fabri #1630 #1643 -
Use the directory's
.swiftlint.yml
when--path
is used.
Marcelo Fabri #1631
- None.
-
Detect more violations of
force_unwrapping
when using subscripts.
Otávio Lima -
Match
(Void)
as return type in thevoid_return
rule.
Anders Hasselqvist -
Add
multiline_parameters
opt-in rule that warns to either keep all the parameters of a method or function on the same line, or one per line.
Ornithologist Coder -
Update
function_parameter_count
rule to ignore overridden methods.
Markus Gasser #1562 -
Skip files with valid cache & no violations when auto correcting.
Marcelo Fabri #1554 -
Don't trigger violations from the
private_unit_test
rule when a method has parameters.
Marcelo Fabri #1532 -
Don't trigger violations from the
discarded_notification_center_observer
rule when the observer is being returned from a function that is not marked as@discardableResult
.
Marcelo Fabri #1525 -
Add
extension_access_modifier
opt-in rule validating that if all the declarations in a given extension have the same Access Control Level, the ACL keyword should be applied to the top-level extension.
Marcelo Fabri #1546 -
Add
vertical_parameter_alignment_on_call
opt-in rule that validates that parameters are vertically aligned on a method call.
Marcelo Fabri #1037 -
Add
code_literal
andimage_literal
boolean configuration options toobject_literal
rule. They allow to only check for one or the other literal type instead of both together.
Cihat Gündüz #1587
-
Fix false positive in
empty_enum_arguments
rule when calling methods.
Marcelo Fabri #1597 -
Fix crash in
unused_closure_parameter
rule when using unicode identifiers.
Woo-Sik Byun Marcelo Fabri -
Fix two false positives in
force_unwrapping
rule.
Otávio Lima #614 #977 #1614 -
Fix custom rules not working correctly with comment commands.
JP Simard #1558 -
Fix incorrectly using configuration files named
.swiftlint.yml
when they are located in the same directory as a differently-named, user-provided custom configuration file.
JP Simard #1531 -
Fix
empty_count
rule false positive in words that include "count".
Marcelo Fabri #1622 -
Use
validates_start_with_lowercase
key when decoding configurations forgeneric_type_name
,identifier_name
andtype_name
rules. This key was used on the docs, but internallyvalidates_start_lowercase
was used.
Marcelo Fabri #1626
-
Remove support for Swift 2.
Marcelo Fabri #1453 -
Remove
missing_docs
andvalid_docs
rules since they were already disabled.
Marcelo Fabri #1453 -
Add
modificationDate(forFileAtPath:)
function requirement toLintableFileManager
protocol.
Victor Pimentel -
Several breaking changes to
LinterCache
.
Victor Pimentel JP Simard -
Remove
Configuration.hash
property.
Victor Pimentel -
Rename
ConditionalReturnsOnNewline
struct toConditionalReturnsOnNewlineRule
to match rule naming conventions.
JP Simard
-
Cache linter results for files unmodified since the previous linter run.
Victor Pimentel JP Simard Marcelo Fabri #1184 #1550 -
Add opt-in configurations to
generic_type_name
,identifier_name
andtype_name
rules to allow excluding non-alphanumeric characters and names that start with uppercase.
Javier Hernández #541 -
Adds support for
excluded
in custom rules to exclude files.
Nigel Flack #1437 -
Make
trailing_comma
rule autocorrectable.
Samuel Susla Jeremy David Giesbrecht #1326 -
Added
no_extension_access_modifier
opt-in rule to disallow access modifiers completely, à la SE-0119.
Jose Cheyo Jimenez #1457 -
Add lowercase and missing colon checks to the
mark
rule.
Jason Moore -
Improve violation reason wording in
function_body_length
,large_type
, andtype_body_length
rules. ultimatedbz -
Add
explicit_top_level_acl
opt-in rule that validates that all top level declarations should explicitly be marked with an Access Control Level (private
,fileprivate
,internal
,public
oropen
).
J. Cheyo Jimenez Marcelo Fabri #58 -
Add
implicit_return
opt-in rule that warns against using thereturn
keyword when it can be omitted inside closures.
Marcelo Fabri #1194 -
Add option to
unused_optional_binding
rule to ignoretry?
inguard
statements.
Sega-Zero #1432 -
Add
empty_enum_arguments
correctable rule that warns against using silent associated values inside acase
.
Marcelo Fabri #1425 #1549 -
Remove
file.zip
from thePods
directory when installing SwiftLint via CocoaPods.
Hesham Salman #1507 -
Add
protocol_property_accessors_order
correctable rule that validates that the order of accessors isget set
when declaring variables in protocols.
Marcelo Fabri #1504 -
Make
Region
&Command
structs conform toEquatable
.
JP Simard -
Make
closure_spacing
aCorrectableRule
.
J. Cheyo Jimenez
-
emoji
andcheckstyle
reporter output report sorted by file name.
norio-nomura #1429 -
Prevent false positive in
shorthand_operator
rule.
sammy-SC #1254 -
Fix typo in
DiscardedNotificationCenterObserverRule
.
Spencer Kaiser -
Fix
empty_parameters
rule with Swift 3.
Marcelo Fabri #1460 -
Prevent triggering
redundant_optional_initialization
rule on alazy var
since it needs initialization.
Marcelo Fabri #1334 -
Fix
ignores_case_statements
key incyclomatic_complexity
description.
Jeff Blagdon #1434 -
Fall back to reporting violations on line
1
if no line was provided for the violation's location, ensuring Xcode always displays the warning or error.
rjhodge JP Simard #1520 -
Fix crash or incorrect violation location with strings including multi-byte unicode characters.
Marcelo Fabri #1006 -
Fix false positive in
syntactic_sugar
rule when using nested types namedOptional
,ImplicitlyUnwrappedOptional
,Array
orDictionary
.
Marcelo Fabri #1508 -
Fix false positives in
prohibited_super_call
&overridden_super_call
rules where calls tosuper
were done in nested scopes such asdefer
blocks.
JP Simard #1301 -
Fix non-root configurations logging configuration warnings more than once.
JP Simard #949 -
Fix some overlapping
// swiftlint
commands not being applied.
JP Simard #1388
- None.
- None.
- Compile releases in the 'Release' configuration rather than 'Debug'.
-
Replace YamlSwift with Yams. SwiftLint no longer includes YamlSwift. If your project implicitly depends on YamlSwift, you need to modify it to depend on YamlSwift explicitly.
norio-nomura #1412 -
Yams interprets YAML more strictly than YamlSwift, so if your YAML configurations previously worked with SwiftLint but didn't fully conform to the YAML 1.2 standard, you'll need to fix those validation errors. For example:
custom_rules: wrong_regex: name: "wrong regex" regex: "((assert|precondition)\(false)" # '\' in "" means escape sequence strict_regex: name: "strict regex" regex: '((assert|precondition)\(false)' # Use single quotes
-
Support compiling with Xcode 8.3 and Swift 3.1.
Keith Smiley -
Fix false positives on
for_where
rule and skip violation on complex conditions.
Marcelo Fabri #1387 -
Print YAML configuration errors in locatable format compatible with Xcode's Issue Navigator.
-
Fix --lenient enforcement not being applied to all violations.
aaroncrespo #1391 -
Fix false positives in
unused_optional_binding
rule.
Daniel Rodríguez Troitiño #1376 -
Fix false positives in
redundant_discardable_let
rule.
Jeremy David Giesbrecht #1415
-
variable_name
rule (VariableNameRule
) is nowidentifier_name
(IdentifierNameRule
) as it validates other identifiers as well.
Marcelo Fabri #663 -
Fix
sorted_imports
rule to sort ignoring case.
Keith Smiley #1185 -
Temporarily disable cache when linting. This will be re-enabled in a future version after important cache-related issues have been addressed.
Marcelo Fabri
-
Add
implicitly_unwrapped_optional
opt-in rule that warns against using implicitly unwrapped optionals, except cases when this IUO is an IBOutlet.
Siarhei Fedartsou #56 -
Performance improvements to
generic_type_name
,redundant_nil_coalescing
,mark
,first_where
andvertical_whitespace
rules.
Marcelo Fabri -
Add
discarded_notification_center_observer
rule that warns when the result ofNotificationCenter.addObserver(forName:object:queue:using:)
is not stored so it can be removed later.
Marcelo Fabri #1062 -
Add
notification_center_detachment
rule that warns against an object removing itself fromNotificationCenter
in an unsafe location.
Marcelo Fabri #1061 -
Accept
AnyObject
andNSObjectProtocol
inclass_delegate_protocol
.
Jon Shier #1261 -
Add
ignores_function_declarations
andignores_comments
as options toLineLengthRule
.
Michael L. Welles #598 #975 -
Add
for_where
rule that validates thatwhere
is used in afor
loop instead of a singleif
expression inside the loop.
Marcelo Fabri #1228 -
unused_enumerated
rule now warns when only the index is being used. You should use.indices
instead of.enumerated()
in this case.
Marcelo Fabri #1278 -
Add
ignores_case_statements
as option toCyclomaticComplexityRule
.
Michael L. Welles #1298 -
Add correctable
redundant_discardable_let
rule that warns whenlet _ = foo()
is used to discard a result from a function instead of_ = foo()
.
Marcelo Fabri #1232 -
Accept global and local variables in
implicit_getter
rule.
Marcelo Fabri -
Add
--enabled
(or-e
) switch to therules
CLI command, to only display enabled rules.
Natan Rolnik #1270 -
Now
nesting
rule can be configured with a type and statement level.
Hayashi Tatsuya #1318 -
Add
explicit_type_interface
opt-in rule that validates that the properties have an explicit type interface.
Kim de Vos -
Add
--lenient
CLI option tolint
command. Facilitates running a lint task that doesn't fail a pipeline of other tasks.
aaroncrespo #1322 -
Add
fatal_error_message
opt-in rule that validates thatfatalError()
calls have a message.
Kim de Vos #1348
-
Fix crashes when accessing cached regular expressions when linting in parallel.
JP Simard #1344 -
Fix a false positive on
large_tuple
rule when using closures.
Marcelo Fabri #1234 -
Fix
force_unwrap
false positive for bool negation.
Aaron McTavish #918 -
Fix false positive and wrong correction on
number_separator
rule.
Marcelo Fabri #1242 -
Retain closure parameter types when they are specified during autocorrect.
Allen Zeng #1175 -
Fix
redundant_void_return
matches if return type starts with Void~.
Hayashi Tatsuya -
Ignore
unused_closure_parameter
rule on closures that are called inline.
Marcelo Fabri #1161 -
Disable
valid_docs
andmissing_docs
rules when running in Swift 2.3 or later as they have not been updated to work with those versions of Swift. Both rules are now opt-in because of this.
JP Simard #728 -
Fix false positive on
large_tuple
rule when using generics inside a tuple.
Marcelo Fabri #1257 -
Make
ASTRule
default implementation to navigate through the substructure even if its children are from a different kind. This fixes some violations not being reported in some contexts.
Marcelo Fabri #1237 -
Reimplement
switch_case_on_newline
rule to be anASTRule
and be more reliable, fixing some false negatives and false positives.
Marcelo Fabri #1268 -
Fix
closure_end_indentation
rule false positive when using single-line closures.
Marcelo Fabri #1216 -
Fix
todo
rule messages when the comment is not on a new line.
Marcelo Fabri #1304 -
Fix false negative on
unused_closure_parameter
rule.
Hayashi Tatsuya -
Fix
checkstyle
report format.
Yuki Oya
- None.
-
Improve
unused_optional_binding
rule on tuples check.
Rafael Machado -
Update
variable_name
to ignore overrides.
Aaron McTavish #1169 -
Update
number_separator
rule to allow for specifying minimum length of fraction.
Bjarke Søndergaard #1200 -
Update
legacy_constant
rule to supportCGFloat.pi
andFloat.pi
.
Aaron McTavish #1198
-
Fix false positives on
shorthand_operator
rule.
Marcelo Fabri #1156 #1163 -
Fix false positive on
redundant_optional_initialization
rule.
Marcelo Fabri #1159 -
Fix false positive on
operator_usage_whitespace
rule with decimal literals in exponent format.
Marcelo Fabri #1153 -
Fix
excluded
configuration not excluding files.
Marcelo Fabri #1166 -
Disable commutative operations on
shorthand_operator
rule.
Marcelo Fabri #1182 #1183 #1211 -
Fix crash when running in a Sandboxed environment, which also fixes Homebrew distribution. Set the
SWIFTLINT_SWIFT_VERSION
environment variable to either2
or3
to force that operation mode, bypassing the Swift version determined from SourceKit.
JP Simard
- Several API breaking changes were made to conform to the Swift 3 API Design Guidelines. We apologize for any inconvenience this may have caused.
-
Speed up linting by caching linter results across invocations.
Marcelo Fabri #868 -
Speed up linting by processing multiple files and rules concurrently.
JP Simard #1077 -
Make many operations in SwiftLintFramework safe to call in multithreaded scenarios, including accessing
Linter.styleViolations
.
JP Simard #1077 -
Permit unsigned and explicitly-sized integer types in
valid_ibinspectable
Daniel Duan -
Make
nimble_operator
rule correctable.
Vojta Stavik -
Add
vertical_parameter_alignment
rule that checks if parameters are vertically aligned for multi-line function declarations.
Marcelo Fabri #1033 -
Add more helpful reason strings to TrailingCommaRule.
Matt Rubin -
Add
class_delegate_protocol
rule that warns against protocol declarations that aren't marked as: class
or@objc
.
Marcelo Fabri #1039 -
Add correctable
redundant_optional_initialization
rule that warns against initializing optional variables withnil
.
Marcelo Fabri #1052 -
redundant_nil_coalescing
rule is now correctable.
Marcelo Fabri -
Make
number_separator
rule correctable.
Marcelo Fabri -
empty_parentheses_with_trailing_closure
rule is now correctable.
Marcelo Fabri -
Add correctable
redundant_void_return
rule that warns against explicitly adding-> Void
to functions.
Marcelo Fabri #1066 -
Add an opt-in rule that enforces alphabetical sorting of imports.
Scott Berrevoets #900 -
type_name
rule forces enum values to be UpperCamelCase again when used with Swift 2.3.
Marcelo Fabri #1090 -
Make
weak_delegate
rule ignore computed properties.
Rafael Machado #1089 -
Add
object_literal
opt-in rule that warns against using image and color inits that can be replaced for#imageLiteral
or#colorLiteral
in Swift 3.
Marcelo Fabri #1060 -
Now
number_separator
rule can be configured with a minimum length.
Marcelo Fabri #1109 -
Add
compiler_protocol_init
rule that flags usage of initializers declared in protocols used by the compiler such asExpressibleByArrayLiteral
that shouldn't be called directly. Instead, you should use a literal anywhere a concrete type conforming to the protocol is expected by the context.
Marcelo Fabri #1096 -
Add
large_tuple
configurable rule that validates that tuples shouldn't have too many members.
Marcelo Fabri #1065 -
Add
generic_type_name
rule that validates generic constraint type names.
Marcelo Fabri #51 -
Update
vertical_whitespace
rule to allow configuration of the number of consecutive empty lines before a violation usingmax_empty_lines
. The default value is still 1 line.
Aaron McTavish #769 -
Add check to ignore urls in
line_length
rule whenignores_urls
configuration is enabled.
Javier Hernández #384 -
Add
shorthand_operator
rule that validates that shorthand operators should be used when possible.
Marcelo Fabri #902 -
Allow specifying a
swiftlint_version
configuration key which will log a warning if the current running version of SwiftLint is different than this value.
JP Simard #221 -
Add internal support for deprecated rule aliases.
Marcelo Fabri #973 -
Add
unused_optional_binding
rule that will check for optional bindings not being used.
Rafael Machado #1116
-
Ignore close parentheses on
vertical_parameter_alignment
rule.
Marcelo Fabri #1042 -
syntactic_sugar
rule now doesn't flag declarations that can't be fixed.
Marcelo Fabri #928 -
Fix false positives on
closure_parameter_position
andunused_closure_parameter
rules with Swift 2.3.
Marcelo Fabri #1019 -
Fix crash on
trailing_comma
rule with Swift 2.3.
Marcelo Fabri #921 -
Fix out of range exception in
AttributesRule
.
JP Simard #1105 -
Fix
variable_name
andtype_name
rules on Linux.
Marcelo Fabri -
Fix linting directories with names ending with
.swift
.
JP Simard -
Fix running
swiftlint version
when building with Swift Package Manager.
Marcelo Fabri #1045 -
Fix false positive on
vertical_parameter_alignment
rule when breaking line in a default parameter declaration.
Marcelo Fabri #1129
line_length
rule now has a default value of120
for warnings.
Marcelo Fabri #1008
-
Add
closure_end_indentation
opt-in rule that validates closure closing braces according to these rules:- If the method call has chained breaking lines on each method
(
.
is on a new line), the closing brace should be vertically aligned with the.
. - Otherwise, the closing brace should be vertically aligned with the beginning of the statement in the first line.
- If the method call has chained breaking lines on each method
(
-
operator_usage_whitespace
rule is now correctable.
Marcelo Fabri -
implicit_getter
andmark
rule performance improvements.
Marcelo Fabri -
HTML reports now display a relative path to files.
Jamie Edge -
colon
rule now validates colon position in dictionaries too. You can disable this new validation with theapply_to_dictionaries
configuration.
Marcelo Fabri #603 -
Add
first_where
opt-in rule that warns against using.filter { /* ... */ }.first
in collections, as.first(where: { /* ... */ })
is often more efficient.
Marcelo Fabri #1005
-
FunctionParameterCountRule
also ignores generic initializers.
Mauricio Hanika -
Grammar checks.
Michael Helmbrecht -
Fix the validity and styling of the HTML reporter.
Jamie Edge -
Fix false positive in
empty_parentheses_with_trailing_closure
rule.
Marcelo Fabri #1021 -
Fix false positive in
switch_case_on_newline
when switching over a selector.
Marcelo Fabri #1020 -
Fix crash in
closure_parameter_position
rule.
Marcelo Fabri #1026 -
Fix false positive in
operator_usage_whitespace
rule when using image literals.
Marcelo Fabri #1028
- SwiftLint now requires Xcode 8.x and Swift 3.x to build.
APIs have not yet been adapted to conform to the Swift 3 API Design
Guidelines but will shortly.
JP Simard Norio Nomura
-
Now builds and passes most tests on Linux using the Swift Package Manager with Swift 3. This requires
libsourcekitdInProc.so
to be built and located in/usr/lib
, or in another location specified by theLINUX_SOURCEKIT_LIB_PATH
environment variable. A preconfigured Docker image is available on Docker Hub by the ID ofnorionomura/sourcekit:302
.
JP Simard Norio Nomura #732 -
Add
dynamic_inline
rule to discourage combination of@inline(__always)
anddynamic
function attributes.
Daniel Duan -
Add
number_separator
opt-in rule that enforces that underscores are used as thousand separators in large numbers.
Marcelo Fabri #924 -
Add
file_header
opt-in rule that warns when a file contains a copyright comment header, such as the one Xcode adds by default.
Marcelo Fabri #844 -
FunctionParameterCountRule
now ignores initializers.
Denis Lebedev #544 -
Add
EmojiReporter
: a human friendly reporter.
Michał Kałużny -
Add
redundant_string_enum_value
rule that warns against String enums with redundant value assignments.
Marcelo Fabri #946 -
Add
attributes
opt-in rule which validates if an attribute (@objc
,@IBOutlet
,@discardableResult
, etc) is in the right position:- If the attribute is
@IBAction
or@NSManaged
, it should always be on the same line as the declaration - If the attribute has parameters, it should always be on the line above the declaration
- Otherwise:
- if the attribute is applied to a variable, it should be on the same line
- if it's applied to a type or function, it should be on the line above
- if it's applied to an import (the only option is
@testable import
), it should be on the same line. You can also configure what attributes should be always on a new line or on the same line as the declaration with thealways_on_same_line
andalways_on_line_above
keys.
- If the attribute is
-
Add
empty_parentheses_with_trailing_closure
rule that checks for empty parentheses after method call when using trailing closures.
Marcelo Fabri #885 -
Add
closure_parameter_position
rule that validates that closure parameters are in the same line as the opening brace.
Marcelo Fabri #931 -
type_name
rule now validatestypealias
andassociatedtype
too.
Marcelo Fabri #49 #956 -
Add
ProhibitedSuperRule
opt-in rule that warns about methods calling to super that should not, for exampleUIViewController.loadView()
.
Aaron McTavish #970 -
Add correctable
void_return
rule to validate usage of-> Void
over-> ()
.
Marcelo Fabri JP Simard #964 -
Add correctable
empty_parameters
rule to validate usage of() ->
overVoid ->
.
Marcelo Fabri #573 -
Add
operator_usage_whitespace
opt-in rule to validate that operators are surrounded by a single whitespace when they are being used.
Marcelo Fabri #626 -
Add
unused_closure_parameter
correctable rule that validates if all closure parameters are being used. If a parameter is unused, it should be replaced by_
.
Marcelo Fabri JP Simard #982 -
Add
unused_enumerated
rule that warns against unused indexes when using.enumerated()
on a for loop, e.g.for (_, foo) in bar.enumerated()
.
Marcelo Fabri #619
-
Fix
weak_delegate
rule reporting a violation for variables containing but not ending indelegate
.
Phil Webster -
Fix
weak_delegate
rule reporting a violation for variables in protocol declarations.
Marcelo Fabri #934 -
Fix
trailing_comma
rule reporting a violation for commas in comments.
Marcelo Fabri #940 -
Fix XML reporters not escaping characters.
Fabian Ehrentraud #968 -
Fix specifying multiple rule identifiers in comment commands.
JP Simard #976 -
Fix invalid CSS in HTML reporter template.
Aaron McTavish #981 -
Fix crash when correcting
statement_position
rule when there are multi-byte characters in the file.
Marcelo Fabri
- None.
TrailingCommaRule
now only triggers when a declaration is multi-line when usingmandatory_comma: true
.
Marcelo Fabri #910 #911
- None.
-
Add
ImplicitGetterRule
to warn against usingget
on computed read-only properties.
Marcelo Fabri #57 -
Add
WeakDelegateRule
rule to enforce delegate instance variables to be marked asweak
.
Olivier Halligon -
Add
SyntacticSugar
rule that enforces that shorthanded syntax should be used when possible, for example[Int]
instead ofArray<Int>
.
Marcelo Fabri #319 -
Allow specifying multiple rule identifiers in comment commands. For example,
// swiftlint:disable:next force_cast force_try
. Works with all command types (disable
/enable
) and modifiers (next
,this
,previous
or blank).
JP Simard #861 -
Add
NimbleOperatorRule
opt-in rule that enforces using operator overloads instead of free matcher functions when using Nimble.
Marcelo Fabri #881 -
closure_spacing
rule now accepts empty bodies with a space.
Marcelo Fabri #875 -
Add
TrailingCommaRule
to enforce/forbid trailing commas in arrays and dictionaries. The default is to forbid them, but this can be changed with themandatory_comma
configuration.
Marcelo Fabri #883 -
Add support for
fileprivate
inPrivateOutletRule
andPrivateUnitTestRule
.
Marcelo Fabri #781 #831 -
Make
MarkRule
correctable.
kohtenko
-
Rule out a few invalid
@IBInspectable
cases invalid_ibinspectable
.
Daniel Duan -
Fix a few edge cases where malformed
MARK:
comments wouldn't trigger a violation.
JP Simard #805 -
Now lints single files passed to
--path
even if this file is excluded from the configuration file (.swiftlint.yml
).
JP Simard -
Fixed error severity configuration in
colon
rule.
Marcelo Fabri #863 -
switch_case_on_newline
rule should ignore trailing comments.
Marcelo Fabri #874 -
switch_case_on_newline
rule shouldn't trigger on enums.
Marcelo Fabri #878 -
Fix regex bug in Comma Rule causing some violations to not be triggered when there were consecutive violations in the same expression.
Savio Figueiredo #872
- None.
-
Add
ignores_comment
configuration fortrailing_whitespace
rule.
Javier Hernández #576 -
Added HTML reporter, identifier is
html
.
Johnykutty Mathew -
Add
SuperCallRule
opt-in rule that warns about methods not calling to super.
Angel G. Olloqui #803 -
Add
RedundantNilCoalesingRule
opt-in rule that warns against?? nil
.
Daniel Beard #764 -
Added opt-in rule to makes closure expressions spacing consistent.
J. Cheyo Jimenez #770 -
Adds
allow_private_set
configuration for theprivate_outlet
rule.
Rohan Dhaimade -
Swift 2.3 support.
Norio Nomura, Syo Ikeda -
Color literals count as single characters to avoid unintentional line length violations.
Jonas #742 -
Add
SwitchCaseOnNewlineRule
opt-in rule that enforces a newline aftercase pattern:
in aswitch
.
Marcelo Fabri #681 -
Add
ValidIBInspectableRule
rule that checks if@IBInspectable
declarations are valid. An@IBInspectable
is valid if:- It's declared as a
var
(notlet
) - Its type is explicit (not inferred)
- Its type is one of the supported types
- It's declared as a
-
Add
ExplicitInitRule
opt-in rule to discourage callinginit
directly.
Matt Taube #715
-
Fixed whitespace being added to TODO messages.
W. Bagdon #792 -
Fixed regex bug in Vertical Whitespace Rule by using SourceKitten instead. The rule now enabled by default again (no longer opt-in).
J. Cheyo Jimenez #772 -
Correctable rules no longer apply corrections if the rule is locally disabled.
J. Cheyo Jimenez
#601 -
Fixed regex bug in Mark Rule where MARK could not be used with only a hyphen but no descriptive text:
// MARK: -
.
Ruotger Deecke #778 -
Fixed: Private unit test rule not scoped to test classes.
Fixed: Private unit test rule config is ignored if regex is missing.
Cristian Filipov #786 -
Fixed:
ConditionalReturnsOnNewline
now respects severity configuration.
Rohan Dhaimade #783 -
Fixed:
ConditionalReturnsOnNewline
now checks ifreturn
is a keyword, avoiding false positives.
Marcelo Fabri #784 -
ForceUnwrappingRule
did not recognize force unwraps in return statements using subscript.
Norio Nomura #813
- Fixed: SwiftLint assumes paths in the YAML config file are relative to the
current directory even when
--path
is passed as an argument.
Cristian Filipov
- Add
--enable-all-rules
CLI option tolint
command to facilitate running all rules, even opt-in and disabled ones, ignoringwhitelist_rules
.
JP Simard #1170
This release has seen a phenomenal uptake in community contributions!
- None.
-
Add
MarkRule
rule to enforce// MARK
syntax.
Krzysztof Rodak #749 -
Add
PrivateOutletRule
opt-in rule to enforce@IBOutlet
instance variables to beprivate
.
Olivier Halligon -
Add content of the todo statement to message.
J. Cheyo Jimenez #478 -
Add
LegacyNSGeometryFunctionsRule
rule. AddNSSize
,NSPoint
, andNSRect
constants and constructors to existing rules.
David Rönnqvist -
Added Vertical Whitespace Rule.
J. Cheyo Jimenez #548 -
Removed ConditionalBindingCascadeRule.
J. Cheyo Jimenez #701 -
Allow setting
flexible_right_spacing
configuration for thecolon
rule.
Shai Mishali #730 -
Add Junit reporter.
Matthew Ellis -
LeadingWhitespaceRule is now auto correctable.
masters3d -
Add included regex for custom rules to control what files are processed.
bootstraponline #689 -
Add rule to check for private unit tests (private unit tests don't get run by XCTest).
Cristian Filipov -
Add configuration for setting a warning threshold.
woodhamgh 696 -
Adds 'ConditionalReturnsOnNewLineRule' rule.
Rohan Dhaimade
-
Fixed CustomRule Regex.
J. Cheyo Jimenez #717 #726 -
Allow disabling custom rules in code.
J. Cheyo Jimenez #515 -
Fix LegacyConstructorRule when using variables instead of numbers.
Sarr Blaise #646 -
Fix force_unwrapping false positive inside strings.
Daniel Beard #721
- None.
- Added
statement_mode
configuration to thestatement_position
rule. The
default
mode keeps the current SwiftLint behavior of keepingelse
andcatch
statements on the same line as the closing brace before them. Theuncuddled_else
configuration requires theelse
andcatch
to be on a new line with the same leading whitespace as the brace.
Mike Skiba #651
- Remove extraneous argument label added in LegacyCGGeometryFunctionsRule
autocorrect.
Sarr Blaise 643
-
Now
type_name
allows lowercase enum values to match the Swift API Design Guidelines.
Jorge Bernal #654 -
Embedding frameworks needed by
swiftlint
was moved from SwiftLintFramework Xcode target to the swiftlint target. TheSwiftLintFramework.framework
product built by the SwiftLintFramework target no longer contains unnecessary frameworks or multiple copies of the Swift libraries.
Norio Nomura
-
Add
--format
option toautocorrect
command which re-indents Swift files much like pasting into Xcode would. This option isn't currently configurable, but that can change if users request it.
JP Simard -
Improve error messages for invalid configuration files.
Brian Hardy -
Added the user-configurable option
ignores_empty_lines
to thetrailing_whitespace
rule. It can be used to control whether theTrailingWhitespaceRule
should report and correct whitespace-indented empty lines. Defaults tofalse
. Added unit tests.
Reimar Twelker
-
Fix false positive in conditional binding cascade violation.
Norio Nomura #642 -
Another conditional binding fix, this time for enum that has two parameters or an if statement with two case tests.
Andrew Rahn #667 -
Fix regression in CommaRule ignoring violations when the comma is followed by a comment.
Norio Nomura #683
- None.
-
Now
libclang.dylib
andsourcekitd.framework
are dynamically loaded at runtime by SourceKittenFramework to use the versions included in the Xcode version specified byxcode-select -p
or custom toolchains.
Norio Nomura #167 -
Add
LegacyCGGeometryFunctionsRule
rule.
Sarr Blaise #625 -
SwiftLint no longer crashes when SourceKitService crashes.
Norio Nomura -
Rewrite
conditional_binding_cascade
rule.
Norio Nomura #617 -
Add autocorrect for
ReturnArrowWhitespaceRule
.
Craig Siemens
-
Failed to launch swiftlint when Xcode.app was placed at non standard path.
Norio Nomura #593 -
ClosingBraceRule
no longer triggers across line breaks.
Josh Friend #592 -
LegacyConstantRule
andLegacyConstructorRule
failed toautocorrect
.
Norio Nomura #623
- None.
-
Return different exit codes to distinguish between types of errors:
-
VariableNameRule
now accepts symbols starting with more than one uppercase letter to allow for names like XMLString or MIMEType.
Erik Aigner #566
-
Avoid overwriting files whose contents have not changed.
Neil Gall #574 -
Fix
CommaRule
mismatch between violations and corrections.
Norio Nomura #466 -
Fix more false positives in
ForceUnwrappingRule
.
Norio Nomura #546 #547
- None.
- None.
-
Fix force unwrap rule missed cases with quotes.
Norio Nomura #535 -
Fix issues with nested
.swiftlint.yml
file resolution.
Norio Nomura #543
-
Linter.reporter
has been removed andConfiguration.reporterFromString(_:)
has been renamed to a free function:reporterFromString(_:)
.
JP Simard -
_ConfigProviderRule
&ConfigurableRule
have been removed and their requirements have been moved toRule
.
JP Simard -
Configuration(path:optional:silent)
has been changed toConfiguration(path:rootPath:optional:quiet:)
.
JP Simard -
The static function
Configuration.rulesFromDict(_:ruleList:)
has been moved to an instance method:RuleList.configuredRulesWithDictionary(_:)
.
JP Simard -
The
rules
parameter in theConfiguration
initializer has been renamed toconfiguredRules
.
JP Simard -
Removed a large number of declarations from the public SwiftLintFramework API. This is being done to minimize the API surface area in preparation of a 1.0 release. See #507 for a complete record of this change.
JP Simard #479 -
All instances of the abbreviation "config" in the API have been expanded to "configuration". The
--config
command line parameter anduse_nested_configs
configuration key are unaffected.
JP Simard -
The
use_nested_configs
configuration key has been deprecated and its value is now ignored. Nested configuration files are now always considered.
JP Simard
-
swiftlint lint
now accepts an optional--reporter
parameter which overrides existingreporter
values in the configuration file. Choose betweenxcode
(default),json
,csv
orcheckstyle
.
JP Simard #440 -
swiftlint rules
now shows a configuration description for all rules.
JP Simard -
lint
andautocorrect
commands now accept a--quiet
flag that prevents status messages like 'Linting ' & 'Done linting' from being logged.
JP Simard #386 -
All top-level keys in a configuration file that accept an array now also accept a single value.
e.g.included: Source
is equivalent toincluded:\n - Source
.
JP Simard #120 -
Improve performance of
FunctionParameterCountRule
.
Norio Nomura -
Improve performance of
ColonRule
.
Norio Nomura
-
Fix case sensitivity of keywords for
valid_docs
.
Ankit Aggarwal #298 -
Fixed inconsistencies between violations & corrections in
StatementPositionRule
.
JP Simard #466 -
A warning will now be logged when invalid top-level keys are included in the configuration file.
JP Simard #120 -
Fixed
LegacyConstructorRule
from correcting legacy constructors in string literals.
JP Simard #466 -
Fixed an issue where
variable_name
ortype_name
would always report a violation when configured with only awarning
value on eithermin_length
ormax_length
.
JP Simard #522
-
Setting only warning on
SeverityLevelsConfig
rules now disables the error value.
Robin Kunde #409 -
enabled_rules
has been renamed toopt_in_rules
.
Daniel Beard
-
Add
whitelist_rules
rule whitelists in config files.
Daniel Beard #256 -
Improve performance of
ColonRule
,LineLengthRule
&syntaxKindsByLine
.
Norio Nomura -
Add command to display rule description:
swiftlint rules <rule identifier>
.
Tony Li #392 -
Add
FunctionParameterCountRule
.
Denis Lebedev #415 -
Measure complexity of nested functions separately in
CyclomaticComplexityRule
.
Denis Lebedev #424 -
Added exception for multi-line
if
/guard
/while
conditions to allow opening brace to be on a new line inOpeningBraceRule
.
Scott Hoyt #355 -
The
rules
command now prints a table containing values for:identifier
,opt-in
,correctable
,enabled in your config
&configuration
.
JP Simard #392 -
Reduce maximum memory usage.
Norio Nomura
-
Fix more false positives in
ValidDocsRule
.
diogoguimaraes #451 -
Fix
trailing_newline
autocorrect to handle more than one violation per line.
Daniel Beard #465 -
Fix complexity measurement for switch statements in
CyclomaticComplexityRule
.
Denis Lebedev #461
- None.
- None.
- Fix several false positives in
ValidDocsRule
.
diogoguimaraes #375
- None.
-
Improve performance of
MissingDocsRule
.
Norio Nomura -
Added
CustomRules
.
Scott Hoyt
#123 -
Added opt-in
ForceUnwrappingRule
to issue warnings for all forced unwrappings.
Benjamin Otto #55
- Fix several false positives in
ValidDocsRule
.
diogoguimaraes #375
-
Replaced all uses of
XPCDictionary
with[String: SourceKitRepresentable]
.
JP Simard -
VariableNameMinLengthRule
andVariableNameMaxLengthRule
have been removed.VariableNameRule
now has this functionality.
Scott Hoyt -
ViolationLevelRule
has been removed. This functionality is now provided byConfigProviderRule
andSeverityLevelsConfig
.
Scott Hoyt
-
TypeBodyLengthRule
now does not count comment or whitespace lines.
Marcelo Fabri #369 -
FunctionBodyLengthRule
now does not count comment or whitespace lines.
Marcelo Fabri #258 -
All
Rule
s are now configurable in at least their severity:SeverityConfig
.
Scott Hoyt #371 #130 #268 -
TypeNameRule
andVariableNameRule
conform toConfigProviderRule
usingNameConfig
to supportmin_length
,max_length
, andexcluded
names.
Scott Hoyt #388 #259 #191 -
Add
CyclomaticComplexityRule
.
Denis Lebedev
-
Fix crash caused by infinite recursion when using nested config files.
JP Simard #368 -
Fix crash when file contains NULL character.
Norio Nomura #379
-
ParameterizedRule
is removed. UseConfigurableRule
instead.
Scott Hoyt #353 -
To activate a
Rule
, it must be added to the globalmasterRuleList
.
Scott Hoyt
-
ConfigurableRule
protocol allows for improved rule configuration. SeeCONTRIBUTING
for more details.
Scott Hoyt #303 -
VariableNameMinLengthRule
now supports excluding certain variable names (e.g. "id").
Scott Hoyt #231 -
ViolationLevelRule
provides defaultConfigurableRule
implementation for rules that only need integer error and warning levels.
Scott Hoyt -
Add AutoCorrect for StatementPositionRule.
Raphael Randschau -
Add AutoCorrect for CommaRule.
Raphael Randschau -
Add AutoCorrect for LegacyConstructorRule.
Raphael Randschau -
Improve performance of
LineLengthRule
.
Norio Nomura -
Add ConditionalBindingCascadeRule.
Aaron McTavish #202 -
Add LegacyConstantRule.
Aaron McTavish #319 -
Add opt-in rule to encourage checking
isEmpty
over comparingcount
to zero.
JP Simard #202 -
Add opt-in "Missing Docs" rule to detect undocumented public declarations.
JP Simard
- None.
- None.
- Improve performance by reducing calls to SourceKit.
Norio Nomura
-
Fix homebrew deployment issues.
Norio Nomura -
AutoCorrect for TrailingNewlineRule only removes at most one line.
John Estropia -
valid_docs
did not detect tuple as return value.
Norio Nomura #324 -
Escape strings when using CSV reporter.
JP Simard
http://www.amazon.com/Magic-Drying-Fluff-Balls-Softening/dp/B001EIW1SG
- None.
- None.
-
Always fail if a YAML configuration file was found but could not be parsed.
JP Simard #310 -
Make commands with modifiers work for violations with line-only locations.
JP Simard #316
- Remove
Location.init(file:offset:)
in favor of the more explicitLocation.init(file:byteOffset:)
&Location.init(file:characterOffset:)
.
JP Simard
-
Add
checkstyle
reporter to generate XML reports in the Checkstyle 4.3 format.
JP Simard #277 -
Support command comment modifiers (
previous
,this
&next
) to limit the command's scope to a single line.
JP Simard #222 -
Add nested
.swiftlint.yml
configuration support.
Scott Hoyt #299
-
Fix an
NSRangeException
crash.
Norio Nomura #294 -
The
valid_docs
rule now handles multibyte characters.
Norio Nomura #295
- None.
-
Improve autocorrect for OpeningBraceRule.
Yasuhiro Inami -
Add autocorrect for ColonRule.
Brian Partridge -
Add ClosingBraceRule.
Yasuhiro Inami
- None.
- Performance improvements & unicode fixes (via SourceKitten).
Norio Nomura
- Fix
ValidDocsRule
false positive when documenting functions with closure parameters.
diogoguimaraes #267
- None.
- None.
-
Make linting faster than 0.5.0, but slower than 0.4.0
Norio Nomura #119 -
Re-introduce
--use-script-input-files
option forlint
&autocorrect
commands. Should also fix some issues when running SwiftLint from an Xcode build phase.
JP Simard #264
init()
is no longer a member of theRule
protocol.
-
Add legacy constructor rule.
Marcelo Fabri #202 -
The
VariableNameRule
now allows variable names when the entire name is capitalized. This allows stylistic usage common in cases likeURL
and other acronyms.
Marcelo Fabri #161 -
Add
autocorrect
command to automatically correct certain violations (currently onlytrailing_newline
,trailing_semicolon
&trailing_whitespace
).
JP Simard #5 -
Allow to exclude files from
included
directory withexcluded
.
Michal Laskowski
- API: Rename RuleExample to RuleDescription, remove StyleViolationType and
combine Rule().identifier and Rule().example into Rule.description.
JP Simard #183
-
The
VariableNameRule
now allows capitalized variable names when they are declared static. This allows stylistic usage common in cases likeOptionSetType
subclasses.
Will Fleming -
Add
VariableNameMaxLengthRule
andVariableNameMinLengthRule
parameter rules. Remove length checks onVariableNameRule
.
Mickael Morier -
Add trailing semicolon rule.
JP Simard -
Add force try rule.
JP Simard -
Support linting from Input Files provided by Run Script Phase of Xcode with
--use-script-input-files
.
Norio Nomura #193
-
All rules now print their identifiers in reports.
JP Simard #180 -
ControlStatementRule
now detects all violations.
Mickael Morier #187 -
ControlStatementRule
no longer triggers a violation for acceptable use of parentheses.
Mickael Morier #189 -
Nesting rule no longer triggers a violation for enums nested one level deep.
JP Simard #190 -
ColonRule
now triggers a violation even if equal operator is collapse to type and value.
Mickael Morier #135 -
Fix an issue where logs would be printed asynchronously over each other.
JP Simard #200
swiftlint rules
now just prints a list of all available rules and their identifiers.
-
Support for Swift 2.1.
JP Simard -
Added
StatementPositionRule
to make sure that catch, else if and else statements are on the same line as closing brace preceding them and after one space.
Alex Culeva -
Added
Comma Rule
to ensure there is a single space after a comma.
Alex Culeva -
Add rule identifier to all linter reports.
zippy1978 -
Add
OpeningBraceRule
to make sure there is exactly a space before opening brace and it is on the same line as declaration.
Alex Culeva -
Print to stderr for all informational logs. Only reporter outputs is logged to stdout.
JP Simard -
JSON and CSV reporters now only print at the very end of the linting process.
JP Simard -
Add support for
guard
statements to ControlStatementRule.
David Potter -
Lint parameter variables.
JP Simard
-
ViolationSeverity
now has an associated type ofString
and two members:.Warning
and.Error
.
JP Simard #113
-
Configure SwiftLint via a YAML file: Supports
disabled_rules
,included
,excluded
and passing parameters to parameterized rules. Pass a configuration file path to--config
, defaults to.swiftlint.yml
.
JP Simard #1 #3 #20 #26 -
Updated
TypeNameRule
andVariableNameRule
to allow private type & variable names to start with an underscore.
JP Simard -
Disable and re-enable rules from within source code comments using
// swiftlint:disable $IDENTIFIER
and// swiftlint:enable $IDENTIFIER
.
JP Simard #4 -
Add
--strict
lint flag which makes the lint fail if there are any warnings.
Keith Smiley -
Violations are now printed to stderr.
Keith Smiley -
Custom reporters are now supported. Specify a value for the
reporter:
key in your configuration file. Available reporters arexcode
(default),json
,csv
.
JP Simard #42
-
Improve performance of
TrailingWhitespaceRule
.
Keith Smiley -
Allow newlines in function return arrow.
JP Simard
- None.
-
Added
OperatorFunctionWhitespaceRule
to make sure that you use whitespace around operators when defining them.
Akira Hirakawa #60 -
Added
ReturnArrowWhitespaceRule
to make sure that you have 1 space before return arrow and return type.
Akira Hirakawa -
Support linting from standard input (use
--use-stdin
).
JP Simard #78 -
Improve performance of
TrailingNewlineRule
.
Keith Smiley -
Lint parentheses around switch statements.
Keith Smiley
- None.
-
The
Rule
andASTRule
protocol members are now non-static.
aarondaub -
Split
Rule
intoRule
andParameterizedRule
protocols.
aarondaub #21
-
Added a command line option
--path
to specify a path to lint.
Lars Lockefeer #16 -
swiftlint now returns a non-zero error code when a warning of high-severity or above is found in the source files being linted.
Pat Wallace #30 -
Added
rules
command to display which rules are currently applied along with examples.
Chris Eidhof -
Cache parsing to reduce execution time by more than 50%.
Nikolaj Schumacher -
Added
ControlStatementRule
to make sure that if/for/while/do statements do not wrap their conditionals in parentheses.
Andrea Mazzini -
Character position is now included in violation location where appropriate.
JP Simard #62 -
The following rules now conform to
ASTRule
: FunctionBodyLength, Nesting, TypeBodyLength, TypeName, VariableName.
JP Simard
First Version!