# Changelog

## Main

### Breaking

* `Configuration.IndentationStyle` moved to `SwiftLintCore.IndentationStyle`.
  Rules can now read the global `indentation` setting via `CurrentRule.configuration`.  
  [GandaLF2006](https://github.com/GandaLF2006)

* Remove the deprecated `allow_multiline_func` option from the `opening_brace`
  rule. Use `ignore_multiline_function_signatures` instead.  
  [Brett-Best](https://github.com/Brett-Best)

### Experimental

* None.

### Enhancements

* Speed up the `collection_alignment` rule, which read the whole file's
  source lines once per element of a dictionary literal.  
  [Brett-Best](https://github.com/Brett-Best)

* Compare the two operands of a comparison by walking their token streams in
  the `identical_operands` rule instead of rendering both operands to strings,
  so differing operands stop at the first mismatching token.  
  [Brett-Best](https://github.com/Brett-Best)

* Add `#examples` and `#corrections` macros that expand lists and
  dictionaries of code strings into `Example`s, reducing boilerplate when
  defining a rule's triggering/non-triggering examples and corrections. Adopt
  them across the built-in rules.  
  [ZevEisenberg](https://github.com/ZevEisenberg)

* Add `allow_compact_empty_blocks` option to the `no_empty_block` rule to
  allow empty blocks written compactly as `{}` while still flagging empty
  blocks with any whitespace or newlines between the braces.  
  [arimu1](https://github.com/arimu1)
  [#6839](https://github.com/realm/SwiftLint/issues/6839)

### Bug Fixes

* Add an opt-in `allow_explicit_unsafe_unowned` option to let the
  `unowned_variable_capture` rule accept explicit `unowned(unsafe)` captures.  
  [Yurii Bakurov](https://github.com/Yurii201811)
  [#6817](https://github.com/realm/SwiftLint/issues/6817)

* Fix `line_length` with `ignores_urls` enabled incorrectly ignoring property
  accesses whose member names are valid top-level domains.  
  [Arthur Liu](https://github.com/thliu21)
  [#6811](https://github.com/realm/SwiftLint/issues/6811)

* Fix baseline writing to store file locations as paths relative to the current working directory,
  restoring baseline portability and avoiding absolute `file://` paths in generated baseline files.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6812](https://github.com/realm/SwiftLint/issues/6812)

* Fix correction behavior of `closure_spacing` rule when a closure contains only trivia (e.g. comments).  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6798](https://github.com/realm/SwiftLint/issues/6798)
  [#6799](https://github.com/realm/SwiftLint/issues/6799)

* Fix `closure_end_indentation` moving closing braces to column 1 in files
  with CRLF line endings when running `swiftlint --fix`.  
  [sjh9714](https://github.com/sjh9714)
  [#6598](https://github.com/realm/SwiftLint/issues/6598)

## 0.65.0: Fresh Folded Fixtures

### Breaking

* SwiftLint now requires a Swift 6.1 or higher for development (to run tests). The
  executable can still be built with a Swift 6 compiler. The
  [Swift Package Manager plugins](https://github.com/SimplyDanny/SwiftLintPlugins) continue
  to work with all versions down to Swift 5.9.  
  [SimplyDanny](https://github.com/SimplyDanny)

### Experimental

* None.

### Enhancements

* SwiftLint now builds with Bazel versions 7 to 9.  
  [SimplyDanny](https://github.com/SimplyDanny)

### Bug Fixes

* None.

## 0.64.1: All Windows Opened

### Breaking

* None.

### Experimental

* None.

### Enhancements

* None.

### Bug Fixes

* Honor `excluded` paths when the linted project is located under a system directory
  on macOS that resolves through a symlink, such as `/var` and `/tmp` (which point
  to `/private/var` and `/private/tmp`).  
  [tumata](https://github.com/tumata)
  [#6782](https://github.com/realm/SwiftLint/issues/6782)

## 0.64.0: All Windows Opened

### Breaking

* The `ignored_literal_argument_functions` option of the `force_unwrapping` rule now
  uses the configured value as-is instead of always merging in the five built-in defaults
  (`URL(string:)`, `NSURL(string:)`, `UIImage(named:)`, `NSImage(named:)`, `Data(hexString:)`).
  Those five functions remain the default when the option is not configured, but setting
  `ignored_literal_argument_functions` to any explicit list — including `[]` — now fully
  replaces the defaults. Configurations that add functions on top of the defaults must now
  explicitly include the five previously-default functions in their list.
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6675](https://github.com/realm/SwiftLint/issues/6675)

### Experimental

* None.

### Enhancements

* SwiftLint can now be built and run on Windows. It is expected to work in the same way as
  on other platforms. The only restrictions are missing support for `?[]` glob patterns in
  include/exclude patterns and the requirement for `\n` as line ending in all linted files.  
  [compnerd](https://github.com/compnerd)
  [roman-bcny](https://github.com/roman-bcny)
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6351](https://github.com/realm/SwiftLint/issues/6351)
  [#6352](https://github.com/realm/SwiftLint/issues/6352)

* Rename `allow_implicit_init` to `include_implicit_init` for the
  `optional_data_string_conversion` rule to convey its purpose more clearly.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6670](https://github.com/realm/SwiftLint/issues/6670)
  
* Improve linting performance by 10-15%, especially when running with many
  threads, by optimizing cache locking and reducing contention. Depending on
  the project and level of concurrency, the performance improvement can be even
  higher (3-4x).  
  [SimplyDanny](https://github.com/SimplyDanny)

* Rewrite the following rules with SwiftSyntax:
  * `file_types_order`
  <!-- Keep empty line to have the contributors on a separate line. -->
  [SimplyDanny](https://github.com/SimplyDanny)
  
* Fix false positive in `accessibility_label_for_image` rule for images inside
  SwiftUI `Label`'s `icon:` closure, which are inherently labeled by the
  `Label`'s text content.  
  [sutheesh](https://github.com/sutheesh)
  [#6420](https://github.com/realm/SwiftLint/issues/6420)

### Bug Fixes

* Fix `literal_expression_end_indentation` autocorrection deleting source code
  when the closing bracket of a multiline literal shares a line with the end of
  a multiline last element (e.g. `...))]`). The corrector assumed everything
  before the bracket on that line was indentation and replaced it; it now moves
  only the bracket to its own line at the expected indentation.  
  [Luan Câmara](https://github.com/luancamara)
  [#2823](https://github.com/realm/SwiftLint/issues/2823)

* Don't rewrite the type operand of an `is` / `as?` / `as!` cast (such as
  `x is A`) to `Self` in `prefer_self_in_static_references` when inside a
  class-like scope. `Self` is the dynamic type, so the rewrite silently changed
  runtime behavior for non-final classes (`x is Self` is not equivalent to
  `x is A`). Mirrors the rule's existing `X.self` skip; static member references
  such as `A.f()` are still corrected.  
  [Brett-Best](https://github.com/Brett-Best)
  [#6764](https://github.com/realm/SwiftLint/issues/6764)

* Avoid false positives in `vertical_parameter_alignment` when a parameter is
  preceded by multi-byte characters, such as a function name containing
  non-ASCII letters. Alignment is now compared by visible column rather than by
  UTF-8 byte offset.  
  [systemBlue](https://github.com/systemblueio)
  [#5037](https://github.com/realm/SwiftLint/issues/5037)

* Treat macro declarations like function declarations for `line_length` when
  `ignores_function_declarations` is enabled.  
  [leno23](https://github.com/leno23)
  [#5648](https://github.com/realm/SwiftLint/issues/5648)

* Make `Glob.expandGlobstar` tolerant of unreadable directory entries on
  large trees. `subpathsOfDirectory(atPath:)` aborted the entire glob
  expansion on the first unreadable entry (permission denied, dangling
  symlink, file removed mid-scan), causing most files in large projects to
  be silently ignored. Replace the directory walk with a lazy `URL`
  enumerator that has a per-item error handler so unreadable items are
  skipped individually.  
  [Chupik](https://github.com/Chupik)

* Avoid false positives in `prefer_self_in_static_references` for generic
  constraints and generic parameter bounds such as `where A: P` and `<A: P>`
  in classes and extensions.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6674](https://github.com/realm/SwiftLint/issues/6674)

* Don't rewrite a type reference to `Self` in `prefer_self_in_static_references`
  when it appears in a protocol composition (such as `any A & B`), as the
  constraint of an existential or opaque type (such as `any A` or `some A`), or
  as the base of an existential metatype (such as `A.Protocol`), since the named
  type is not interchangeable with `Self` in those positions.  
  [Brett-Best](https://github.com/Brett-Best)
  [#6748](https://github.com/realm/SwiftLint/issues/6748)

## 0.63.3: High-Speed Extraction

### Breaking

* None.

### Experimental

* None.

### Enhancements

* Treat extensions like classes in the `prefer_self_in_static_references`
  rule.  
  [itsybitsybootsy](https://github.com/itsybitsybootsy)
  [#3993](https://github.com/realm/SwiftLint/issues/3993)

* Print fixed code read from stdin to stdout.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6501](https://github.com/realm/SwiftLint/issues/6501)

* Add new `redundant_final` rule that detects `final` modifiers on declarations
  where they are redundant due to the containing context, such as `final` classes
  or actors. Final actors are themselves implicitly final, so the `final` modifier
  is redundant on them as well.  
  [william-laverty](https://github.com/william-laverty)
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6407](https://github.com/realm/SwiftLint/issues/6407)

* Add `discouraged_default_parameter` opt-in rule that flags default parameter
  values in functions with configurable access levels.  
  [William-Laverty](https://github.com/William-Laverty)
  [#6488](https://github.com/realm/SwiftLint/issues/6488)

* Add `ignored_literal_argument_functions` option to the `force_unwrapping` rule
  to skip violations for configurable function calls when all arguments are
  literal values (e.g. `URL(string: "https://example.com")!`). Defaults
  include `URL(string:)`, `NSURL(string:)`, `UIImage(named:)`,
  `NSImage(named:)`, and `Data(hexString:)`.
  [claudeaceae](https://github.com/claudeaceae)
  [#6487](https://github.com/realm/SwiftLint/issues/6487)

* Add `rules` array to SARIF reporter output, providing metadata for all
  built-in rules in accordance with the SARIF specification.  
  [ahmadalfy](https://github.com/ahmadalfy)
  [#6499](https://github.com/realm/SwiftLint/issues/6499)

* Add `allow_underscore_prefixed_names` option to `unused_parameter` so
  underscore-prefixed parameter names can be treated as intentionally
  unused when configured.  
  [theamodhshetty](https://github.com/theamodhshetty)
  [#5741](https://github.com/realm/SwiftLint/issues/5741)

* Add detection of cases such as `String.init(decoding: data, as: UTF8.self)` and
  `let text: String = .init(decoding: data, as: UTF8.self)` to
  `optional_data_string_conversion` rule.  
  [nadeemnali](https://github.com/nadeemnali)
  [#6359](https://github.com/realm/SwiftLint/issues/6359)

* Add new default `invisible_character` rule that detects invisible characters
  like zero-width space (U+200B), zero-width non-joiner (U+200C),
  and FEFF formatting character (U+FEFF) in string literals, which can cause
  hard-to-debug issues.  
  [kapitoshka438](https://github.com/kapitoshka438)
  [#6045](https://github.com/realm/SwiftLint/issues/6045)

* Add `variable_shadowing` rule that flags when a variable declaration shadows
  an identifier from an outer scope.  
  [nadeemnali](https://github.com/nadeemnali)
  [#6228](https://github.com/realm/SwiftLint/issues/6228)
  
* Add `legacy_uigraphics_function` rule to encourage the use of modern
  `UIGraphicsImageRenderer` instead of the legacy `UIGraphics{Begin|End}ImageContext`.
  The modern replacement is safer, cleaner, Retina-aware and more performant.  
  [Dimitri Dupuis-Latour](https://github.com/DimDL)
  [#6268](https://github.com/realm/SwiftLint/issues/6268)
  
* Add `legacy_swiftui_aspect_ratio` rule to prefer `scaledToFit()` and
  `scaledToFill()` over `aspectRatio(contentMode:)` with a constant
  content mode.  
  [DemiDevv](https://github.com/DemiDevv)
  [#5713](https://github.com/realm/SwiftLint/issues/5713)

* Support access level modifiers on imports in `unused_imports` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6620](https://github.com/realm/SwiftLint/issues/6620)

* Add `name="SwiftLint"` to JUnit `testsuites` and `testsuite` output for
  better CI parser compatibility.  
  [theamodhshetty](https://github.com/theamodhshetty)
  [#6161](https://github.com/realm/SwiftLint/issues/6161)

* Improve the opt-in `pattern_matching_keywords` rule by extending support
  beyond `switch case` and refining nested pattern handling.  
  [GandaLF2006](https://github.com/GandaLF2006)

### Bug Fixes

* Recognize `isolated` as an isolation modifier in `modifier_order`, so it can
  be ordered via the `isolation` entry in `preferred_modifier_order`.  
  [leno23](https://github.com/leno23)
  [#6164](https://github.com/realm/SwiftLint/issues/6164)

* Detect and autocorrect missing whitespace before `else` in `guard`
  statements for the `statement_position` rule.  
  [theamodhshetty](https://github.com/theamodhshetty)
  [#6153](https://github.com/realm/SwiftLint/issues/6153)

* Avoid false positives from `unused_enumerated` when higher-order calls on
  `.enumerated()` use result members like `?.offset` after the closure.  
  [theamodhshetty](https://github.com/theamodhshetty)
  [#5881](https://github.com/realm/SwiftLint/issues/5881)

* Add an `ignore_attributes` option to `implicit_optional_initialization` so
  wrappers/attributes that require explicit `= nil` can be excluded from
  style checks for both `style: always` and `style: never`.  
  [theamodhshetty](https://github.com/theamodhshetty)
  [#3998](https://github.com/realm/SwiftLint/issues/3998)

* Skip `@TestState` properties in `quick_discouraged_call` rule, matching
  existing `@TestInjected` and `@TestWeakly` exclusions.  
  [William-Laverty](https://github.com/William-Laverty)
  [#5803](https://github.com/realm/SwiftLint/pull/5803)
  
* Fix `explicit_self` false positives around string interpolation.  
  [jffmrk](https://github.com/jffmrk)
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6611](https://github.com/realm/SwiftLint/issues/6611)

* Properly taint variables in tuples for `unneeded_escaping` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6621](https://github.com/realm/SwiftLint/issues/6621)

* Ensure that disable commands work for `redundant_nil_coalescing` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6465](https://github.com/realm/SwiftLint/issues/6465)

* Take `try` expressions in call parameters into account even if the call has
  trailing closures as well, so that an outer `throws` is not considered unneeded
  in the `unneeded_throws_rethrows` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6491](https://github.com/realm/SwiftLint/issues/6491)

* Ensure that disable commands work for `prefer_key_path` rule when the trailing
  closure starts on a different line than the function call as a whole.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6466](https://github.com/realm/SwiftLint/issues/6466)

* Track identifiers declared in tuples to avoid false positives in the
  `redundant_self` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6553](https://github.com/realm/SwiftLint/issues/6553)

* Respect existing environment variables when setting `BUILD_WORKSPACE_DIRECTORY`
  in build tool plugins.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6080](https://github.com/realm/SwiftLint/issues/6080)

* Fix false positives in `indentation_width` rule for continuation lines
  of multi-line `guard`/`if`/`while` conditions. A new option
  `include_multiline_conditions` (default: `false`) skips these lines by
  default. When enabled, it validates that continuation lines are aligned
  with the first condition after the keyword.  
  [tanaev](https://github.com/tanaev)
  [#4961](https://github.com/realm/SwiftLint/issues/4961)

* `multiline_call_arguments` no longer reports violations for enum-case patterns in
  pattern matching (e.g. if case, switch case, for case, catch).  
  [GandaLF2006](https://github.com/GandaLF2006)

* Avoid false positives in `prefer_self_in_static_references` when a nested type
  shadows its enclosing type name.  
  [theamodhshetty](https://github.com/theamodhshetty)
  [#5917](https://github.com/realm/SwiftLint/issues/5917)

## 0.63.2: High-Speed Extraction

### Breaking

* None.

### Experimental

* None.

### Enhancements

* Add `ignore_regex` configuration option to the `large_tuple` rule to silence
  violations for tuples inside `Regex<...>` types, which commonly have large
  tuple type parameters for capture groups.  
  [Deco354](https://github.com/Deco354)
  [#6340](https://github.com/realm/SwiftLint/issues/6340)

### Bug Fixes

* Use start position of closure (in addition to the containing function call) to check
  if violations are disabled for it in `trailing_closure` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6451](https://github.com/realm/SwiftLint/issues/6451)

## 0.63.1: High-Speed Extraction

### Breaking

* None.

### Experimental

* None.

### Enhancements

* Add a `--disable-sourcekit` flag to the `lint` command to disable SourceKit when needed.
  The environment variable `SWIFTLINT_DISABLE_SOURCEKIT` can still be used as well.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6282](https://github.com/realm/SwiftLint/issues/6282)

### Bug Fixes

* Retain `async` initializers in actors in `async_without_await` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6423](https://github.com/realm/SwiftLint/issues/6423)

* Inform users about files being skipped due to impossible file system representation
  instead of crashing.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6419](https://github.com/realm/SwiftLint/issues/6419)

* Ignore `override` functions in `async_without_await` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6416](https://github.com/realm/SwiftLint/issues/6416)
  
* Avoid infinite recursion for deeply nested symbolic links which is usually the case
  in `node_modules` directories managed by `pnpm`.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6425](https://github.com/realm/SwiftLint/issues/6425)

* Fix false positive in `unneeded_escaping` rule when an escaping closure is used in
  a nested closure preceded by another closure.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6410](https://github.com/realm/SwiftLint/issues/6410)

* Fix non-excluded bool literal in `optional_enum_case_name` when used inside a tuple.  
  [tristan-burnside-anz](https://github.com/tristan-burnside-anz)

## 0.63.0: High-Speed Extraction

### Breaking

* The `redundant_self_in_closure` rule has been renamed to `redundant_self` (with
  `redundant_self_in_closure` as a deprecated alias) to reflect its now broader scope,
  while by default still maintains the previous behavior of only checking closures.
  To enable checking for all redundant `self` usages, set the new `only_in_closures`
  option to `false`.  
  [SimplyDanny](https://github.com/SimplyDanny)

### Experimental

* None.

### Enhancements

* Extend `redundant_self_in_closure` rule to detect all redundant uses of `self`,
  not just in closures. Initializers (which commonly prefer an explicit `self` prefix)
  can be ignored by setting `keep_in_initializers` to `true`.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Add a `separation` configuration option to the `vertical_whitespace_between_cases` rule
  to allow customizing blank line separation between switch cases. The default value is
  `always` (require at least one blank line). Setting it to `never` enforces no blank
  lines between cases.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6326](https://github.com/realm/SwiftLint/issues/6326)

* Rewrite the following rules with SwiftSyntax:
  * `vertical_whitespace_between_cases`
  <!-- Keep empty line to have the contributors on a separate line. -->
  [SimplyDanny](https://github.com/SimplyDanny)
  
* Add new opt-in `unneeded_throws_rethrows` rule that triggers when declarations
  marked `throws`/`rethrows` never actually throw or call any throwing code.  
  [Tony Ngo](https://github.com/tonyskansf)
  
* Add new `unneeded_escaping` rule that detects closure parameters marked with
  `@escaping` that are never stored or captured escapingly.  
  [SimplyDanny](https://github.com/SimplyDanny)
  
* Add `multiline_call_arguments` opt-in rule to enforce consistent multiline
  formatting for function and method call arguments.  
  [GandaLF2006](https://github.com/GandaLF2006)

* Improve performance when exclude patterns resolve to a large set of files.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5018](https://github.com/realm/SwiftLint/issues/5018)
  [#5207](https://github.com/realm/SwiftLint/issues/5207)
  [#5953](https://github.com/realm/SwiftLint/issues/5953)
  [#6084](https://github.com/realm/SwiftLint/issues/6084)
  [#6259](https://github.com/realm/SwiftLint/issues/6259)

### Bug Fixes

* Fix `line_length` rule incorrectly ignoring function bodies when
  `ignores_function_declarations` is enabled. The option should only ignore
  function declarations, not their implementation.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6347](https://github.com/realm/SwiftLint/issues/6347)

* Fix false positives in `vertical_whitespace_between_cases` rule when cases are
  interleaved with compiler directives like `#if`/`#else`/`#endif`.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6332](https://github.com/realm/SwiftLint/issues/6332)

* `override_in_extension` no longer triggers inside `@objc @implementation` extensions.  
  [JaredGrubb](https://github.com/jaredgrubb)

* Reinstate handling of access level imports in `sorted_imports` rule.  
  [Brett-Best](https://github.com/Brett-Best)
  [#6374](https://github.com/realm/SwiftLint/issues/6374)

## 0.62.2: Generous Drum Volume

### Breaking

* None.

### Experimental

* None.

### Enhancements

* Add new `incompatible_concurrency_annotation` rule that triggers when a declaration
  isolated to a global actor, `@Sendable` closure arguments and/or generic sendable
  constraints is not annotated with `@preconcurrency` in order to maintain compatibility
  with Swift 5.  
  [mattmassicotte](https://github.com/mattmassicotte)
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5987](https://github.com/realm/SwiftLint/issues/5987)

* Add `isolation` modifier group to `modifier_order` rule configuration.
  This allows configuring the position of `nonisolated` modifiers.  
  [nandhinisubbu](https://github.com/nandhinisubbu)
  [#6164](https://github.com/realm/SwiftLint/issues/6164)

* Add test count to JUnit reporter.  
  [nandhinisubbu](https://github.com/nandhinisubbu)
  [#6161](https://github.com/realm/SwiftLint/issues/6161)

* Adopt [mimalloc](https://github.com/microsoft/mimalloc) for static Linux binary
  to improve performance.  
  [ainame](https://github.com/ainame)
  [#6298](https://github.com/realm/SwiftLint/issues/6298)

### Bug Fixes

* Fix false positive with `#Preview` macro in `closure_end_indentation` rule.  
  [gibachan](https://github.com/gibachan)

* Fix correction of `sorted_imports` rule when comments (with a distance) are present before
  the first import.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6317](https://github.com/realm/SwiftLint/issues/6317)

## 0.62.1: Generous Drum Volume

### Breaking

* None.

### Experimental

* None.

### Enhancements

* None.

### Bug Fixes

* Remove trailing comma making the code base again compilable with at least Swift 6.0.  
  [SimplyDanny](https://github.com/SimplyDanny)

## 0.62.0: Generous Drum Volume

### Breaking

* The structure of `SwiftLintBinary.artifactbundle.zip` is now simpler. Internal paths no
  longer contain version numbers, especially. So in an Xcode Run Script build phase,
  you can refer to the `swiftlint` binary like this:

  ```bash
  SWIFT_PACKAGE_DIR="${BUILD_DIR%Build/*}SourcePackages/artifacts"
  SWIFTLINT_CMD="$SWIFT_PACKAGE_DIR/swiftlintplugins/SwiftLintBinary/SwiftLintBinary.artifactbundle/macos/swiftlint"
  ```
  
  All other consumers of the artifact bundle do not need to change anything. Swift Package
  Manager resolves the new paths automatically.  
  [SimplyDanny](https://github.com/SimplyDanny)
  
* SwiftLint now requires a Swift 6 or higher compiler to build. The
  [Swift Package Manager plugins](https://github.com/SimplyDanny/SwiftLintPlugins) continue
  to work with all versions down to Swift 5.9.  
  [SimplyDanny](https://github.com/SimplyDanny)
  
* `sorted_imports` rule's behavior changed in that it now treats imports directly adjacent
  to each other as a group that is sorted together. Imports separated by at least one
  non-import statement or empty line(s) are treated as separate groups. Comments are
  considered part of the import group they are attached to and do not break it.  
  [SimplyDanny](https://github.com/SimplyDanny)

### Experimental

* None.

### Enhancements

* Rewrite the following rules with SwiftSyntax:
  * `modifier_order`
  * `sorted_imports`
  <!-- Keep empty line to have the contributors on a separate line. -->
  [SimplyDanny](https://github.com/SimplyDanny)
  
* Add new `prefer_asset_symbols` rule that suggests using asset symbols over
  string-based image initialization to avoid typos and enable compile-time
  checking. This rule detects `UIImage(named:)` and `SwiftUI.Image(_:)` calls
  with string literals and suggests using asset symbols instead.  
  [danglingP0inter](https://github.com/danglingP0inter)
  [#5939](https://github.com/realm/SwiftLint/issues/5939)

* Exclude integer generic parameters from `generic_type_name` rule.
  Include integer generic parameters in the `identifier_name` rule for validation.  
  [nandhinisubbu](https://github.com/nandhinisubbu)
  [#6213](https://github.com/realm/SwiftLint/issues/6213)

* Add new option `ignores_regex_literals` to `line_length` rule.
  It allows to ignore regex literals.  
  [nandhinisubbu](https://github.com/nandhinisubbu)
  [#6304](https://github.com/realm/SwiftLint/issues/6304)

* Add `ignores_literals` configuration for `trailing_whitespace` rule.
  It allows to ignore trailing whitespace in multiline strings.  
  [nandhinisubbu](https://github.com/nandhinisubbu)
  [#6194](https://github.com/realm/SwiftLint/issues/6194)

### Bug Fixes

* Ignore function, initializer and subscript declarations alike when the
  `ignores_function_declarations` option is enabled in the `line_length` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6241](https://github.com/realm/SwiftLint/issues/6241)

* Individual `custom_rules` can now be specified in the `only_rule` configuration
  setting and the `--only-rule` command line option without having to specify
  `custom_rules` as well. Additionally, violations of custom rules are now reported
  in a deterministic order, sorted by the rule's identifier.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#6029](https://github.com/realm/SwiftLint/issues/6029)
  [#6058](https://github.com/realm/SwiftLint/issues/6058)

* Ignore `redundant_discardable_let` rule violations in nested SwiftUI scopes as well
  when `ignore_swiftui_view_bodies` is enabled.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#3855](https://github.com/realm/SwiftLint/issues/3855)
  [#6255](https://github.com/realm/SwiftLint/issues/6255)
  
* Exclude function types from `async_without_await` rule analysis. Higher-order function
  objects can be `async` without containing an `await` when assigning to them.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6253](https://github.com/realm/SwiftLint/issues/6235)

* Exclude `@concurrent` functions from `async_without_await` rule analysis.
  `@concurrent` functions requires `aysnc` in any case.  
  [nandhinisubbu](https://github.com/nandhinisubbu)
  [#6283](https://github.com/realm/SwiftLint/issues/6283)

* `swiftlint-static`, the experimental fully-static Linux binary, now uses 512 KiB
  as thread stack size matching Darwin’s size to prevent stack exhaustion.  
  [ainame](https://github.com/ainame)
  [#6287](https://github.com/realm/SwiftLint/pull/6287)

## 0.61.0: Even Fresher Breeze

### Breaking

* If `SWIFTLINT_DISABLE_SOURCEKIT` is set to prohibit loading `libsourcekitdInProc` at runtime,
  rules requiring SourceKit will be disabled and a warning will be printed once per rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  
* The `operator_whitespace` rule has been removed and its functionality merged into the
  `function_name_whitespace` rule. The latter now also checks spacing around the `func`
  keyword, the function name/operator and its generic parameters while respecting comments.
  On top of that, it supports autocorrection.  
  [SimplyDanny](https://github.com/SimplyDanny)
  
* Expose only `TestHelpers` and `ExtraRulesTests` as part of Bazel releases.  
  [SimplyDanny](https://github.com/SimplyDanny)

### Experimental

* Both Linux release archives (for AMD64 and ARM64) now contain two binaries:
  * A dynamically linked binary that requires `libsourcekitdInProc.so` together with its
    transitive dependencies to be present on the system at runtime. It is named `swiftlint`
    and the same binary as before. It supports all built-in rules.
  * A fully statically linked binary named `swiftlint-static` that does not require
    any dynamic libraries at runtime. Rules requiring SourceKit will be disabled and
    reported to the console when running this binary.
  <!-- Keep empty line to have the contributors on a separate line. -->
  [SimplyDanny](https://github.com/SimplyDanny)

### Enhancements

* A fully statically linked Linux binary can now be built with the Swift SDK and
  the compiler options `-Xswiftc -DSWIFTLINT_DISABLE_SOURCEKIT`. This binary does not
  require `libsourcekitdInProc.so` or any other dynamic libraries to be present on the
  system at runtime. Rules requiring SourceKit will be disabled and reported to the console
  when running this binary.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Add `function_name_whitespace` rule to enforce consistent spacing between the `func`
  keyword, function name, and its generic parameters. Ensures exactly one space between
  `func` and the function name, and configurable spacing around generics via
  `generic_spacing`:
  * `no_space` (default): `func name<T>()`
  * `leading_space`: `func name <T>()`
  * `trailing_space`: `func name<T> ()`
  * `leading_trailing_space`: `func name <T> ()`
  Supports autocorrection.  
  [GandaLF2006](https://github.com/GandaLF2006)

* The `operator_whitespace` rule now supports autocorrection and better respects comments in
  function declarations. The rule has been deprecated in favor of the new `function_name_whitespace`
  rule. You can still refer to it by its identifier, but get checking for normal function names
  on top.  
  [SimplyDanny](https://github.com/SimplyDanny)

* In `line_length` rule, treat strings with opening and closing quotes in the same line as
  single-line strings no matter if they are enclosed by triple quotes or not. Furthermore,
  improve detection of comment-only lines.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6220](https://github.com/realm/SwiftLint/issues/6220)
  [#6219](https://github.com/realm/SwiftLint/issues/6219)

* Improve detection of comment-only lines in `file_length` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6219](https://github.com/realm/SwiftLint/issues/6219)
  
* Rewrite `quick_discouraged_call` rule with SwiftSyntax.  
  [SimplyDanny](https://github.com/SimplyDanny)

### Bug Fixes

* Ensure that header matched against always end in a newline in `file_header` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6227](https://github.com/realm/SwiftLint/issues/6227)

* Fix `closure_end_indentation` rule reporting violations when the called base
  involves chained optional expressions.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6216](https://github.com/realm/SwiftLint/issues/6216)

## 0.60.0: Fresh Breeze

### Breaking

* Remove support for boolean values in the `validates_start_with_lowercase` option entirely.
  Use the severity levels `off`, `warning` or `error` instead.  
  [kaseken](https://github.com/kaseken)

* SwiftLint now requires macOS 13 or higher to run.  
  [JP Simard](https://github.com/jpsim)
  
* In `SwiftLintBuildToolPlugin`, print the content of the `BUILD_WORKSPACE_DIRECTORY`
  environment variable only in debug builds.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6135](https://github.com/realm/SwiftLint/issues/6135)

* The `redundant_optional_initialization` rule has been replaced by the
  `implicit_optional_initialization` rule that enforces implicit or explicit initialization
  of optional variables. Its default style `always` mimics the behavior of the
  `redundant_optional_initialization` rule by default. `redundant_optional_initialization`
  is now an alias for `implicit_optional_initialization`.  
  [leo-lem](https://github.com/leo-lem)  
  [#1940](https://github.com/realm/SwiftLint/issues/1940)

* The `swiftlint_linux.zip` release archive has been renamed to `swiftlint_linux_amd64.zip`
  to avoid confusion with the new `swiftlint_linux_arm64.zip` archive.  
  [Bradley Mackey](https://github.com/bradleymackey)
  [SimplyDanny](https://github.com/SimplyDanny)

### Experimental

* None.

### Enhancements

* Linting got up to 30% faster due to the praiseworthy performance
  improvements done in the [SwiftSyntax](https://github.com/swiftlang/swift-syntax)
  library.

* Ignore locally defined `count` identifiers in `empty_count` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5326](https://github.com/realm/SwiftLint/issues/5326)

* The `private_swiftui_state` rule now applies to `ViewModifier` types.  
  [mt00chikin](https://github.com/mt00chikin)

* Support for ARM64 Linux binaries has been added. The `swiftlint_linux.zip` release archive
  has been renamed to `swiftlint_linux_amd64.zip`. Next to it, a new `swiftlint_linux_arm64.zip`
  archive has been added. The `SwiftLintBinary.artifactbundle.zip` now contains both versions
  of the Linux binary, so that the [binary plugins](https://github.com/SimplyDanny/SwiftLintPlugins)
  can now be used on Linux and macOS running no both AMD64 and ARM64 architectures.  
  [Bradley Mackey](https://github.com/bradleymackey)
  [SimplyDanny](https://github.com/SimplyDanny)

* Add `include_variables` configuration option to `non_optional_string_data_conversion` rule.  
  When enabled, the rule will trigger on variables, properties, and function calls in addition
  to string literals. Defaults to `false` for backward compatibility.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6094](https://github.com/realm/SwiftLint/issues/6094)

* Add Sendable conformance to Rule.Type for building with Swift 6.  
  [erikkerber](https://github.com/erikkerber)
  [#issue_number](https://github.com/realm/SwiftLint/issues/issue_number)

* Fix false positives for `Actor`-conforming delegate protocols in the
  `class_delegate_protocol` rule.  
  [imsonalbajaj](https://github.com/imsonalbajaj)
  [#6054](https://github.com/realm/SwiftLint/issues/6054)

* Support extensions and protocols in `type_body_length` rule. They can be configured using the
  new `excluded_types` option which by default excludes `extension` and `protocol` types.
  This means the rule now checks `struct`, `class`, `actor` and `enum` by default. To enable
  checking of extensions and protocols, set `excluded_types` to an empty array or exclude other
  types as needed.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Exclude explicit system modules from `duplicate_imports` analysis, that is, modules
  that are part of the system frameworks but need to be imported explicitly due to being
  declared as `explicit module` in their module map.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6098](https://github.com/realm/SwiftLint/issues/6098)

* Ignore various assignment operators like `=`, `+=`, `&=`, etc. with right-hand side
  ternary expressions otherwise violating the `void_function_in_ternary` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5611](https://github.com/realm/SwiftLint/issues/5611)

* Rewrite the following rules with SwiftSyntax:
  * `accessibility_label_for_image`
  * `accessibility_trait_for_button`
  * `closure_end_indentation`
  * `expiring_todo`
  * `file_header`
  * `file_length`
  * `line_length`
  * `trailing_whitespace`
  * `vertical_whitespace`
  <!-- Keep empty line to have the contributors on a separate line. -->
  [JP Simard](https://github.com/jpsim)
  [Matt Pennig](https://github.com/pennig)

* Add `excluded_paths` option to the `file_name` rule. It allows to exclude complete file
  paths from analysis. All entries are treated as regular expressions. A single match in
  its full path is enough to ignore a file. This is different from the `excluded` option
  that only accepts and checks against file names.  
  [Ueeek](https://github.com/Ueeek)
  [#6066](https://github.com/realm/SwiftLint/issues/6066)

* Fix false positives of `redundant_discardable_let` rule in `@ViewBuilder` functions,
  `#Preview` macro bodies and preview providers when `ignore_swiftui_view_bodies` is
  enabled.  
  [kaseken](https://github.com/kaseken)
  [#6063](https://github.com/realm/SwiftLint/issues/6063)

* Improve `multiline_parameters` rule to correctly support  
  `max_number_of_single_line_parameters` and detect mixed formatting.  
  [GandaLF2006](https://github.com/GandaLF2006)
  
* Add new `prefer_condition_list` rule that triggers when a `guard`/`if`/`while`
  condition is composed of multiple expressions connected by the `&&` operator.
  It suggests to use a condition list instead, which is more idiomatic.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Add `ignore_coding_keys` parameter to `nesting` rule. Setting this to true prevents
  `CodingKey` enums from violating the rule.  
  [braker1nine](https://github.com/braker1nine)
  [#5641](https://github.com/realm/SwiftLint/issues/5641)
  
* Support deinitializers and subscripts in `function_body_length` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  
* Extend the `xct_specific_matcher` rule to support identity operators (`===` and `!==`)
  in addition to the existing equality operators (`==` and `!=`).  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5849](https://github.com/realm/SwiftLint/issues/5849)

* Add new `implicit_optional_initialization` rule to enforce implicit or explicit  
  initialization of optional variables, configurable via `style: always | never`.
  It replaces the `redundant_optional_initialization` rule mimicking it with the
  `style: always` option which is the default.  
  [leo-lem](https://github.com/leo-lem)  
  [#1940](https://github.com/realm/SwiftLint/issues/1940)

* Add new `ignore_identity_closures` parameter to `prefer_key_paths` rule to skip
  conversion of identity closures (`{ $0 }`) to identity key paths (`\.self`).
  Note that identity key paths are only supported from Swift 6 on, hence this option
  will be implicitly ignored/set to `true` when SwiftLint detects a Swift <6 compiler
  to avoid causing compilation errors.  
  [p4checo](https://github.com/p4checo)
  [#5965](https://github.com/realm/SwiftLint/issues/5965)

### Bug Fixes

* Fix `no_extension_access_modifier` rule incorrectly triggering for `nonisolated extension`.
  The rule now only flags actual access control modifiers (`private`, `public`, `open`,
  `internal`, `fileprivate`) and ignores isolation modifiers like `nonisolated`.  
  [copilot](https://github.com/copilot)
  [#6168](https://github.com/realm/SwiftLint/issues/6168)

* Improved error reporting when SwiftLint exits, because of an invalid configuration file
  or other error.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#6052](https://github.com/realm/SwiftLint/issues/6052)
  
* Keep the default severity levels when neither `warning` nor `error` values are configured.
  Ensure especially that the `error` level is not set to `nil` when the `warning` level
  isn't set either.  
  [SimplyDanny](https://github.com/SimplyDanny)

## 0.59.1: Crisp Spring Clean

### Breaking

* Remove `opaque_over_existential` opt-in rule as it causes too many false positives
  that can even lead to wrong-compilable code when `any` is required by a protocol the
  type conforms to. In this case, using `some` can be totally valid even though the
  protocol requirement is not reimplemented for the type causing behavioral changes.  
  [SimplyDanny](https://github.com/SimplyDanny)

### Experimental

* None.

### Enhancements

* Add new `allowed_numbers` option to the `no_magic_numbers` rule.  
  [Martin Redington](https://github.com/mildm8nnered)

### Bug Fixes

* None.

## 0.59.0: Crisp Spring Clean

### Breaking

* Remove tracking of correction positions. Print the number of corrections applied instead.  
  [SimplyDanny](https://github.com/SimplyDanny)

### Experimental

* Introduce `swiftlint-dev` command line tool that's intended to help to develop SwiftLint by encapsulating repetitive
  tasks. It can already be used to generate templates for new rules including optional configurations and tests. Run
  `swift run swiftlint-dev rules template -h` to get an overview of the command's usage and the available customization
  options. To register new rules, run `swift run swiftlint-dev rules register`.  
  [SimplyDanny](https://github.com/SimplyDanny)

### Enhancements

* Add new option `ignores_multiline_strings` to `line_length` rule. It allows to ignore too long
  lines inside of multiline strings.  
  [thisIsTheFoxe](https://github.com/thisisthefoxe)
  [#2689](https://github.com/realm/SwiftLint/issues/2689)

* Ignore `UIColor` initializers in `no_magic_numbers` rule.  
  [suojae](https://github.com/suojae)
  [hyeffie](https://github.com/hyeffie)
  [#5183](https://github.com/realm/SwiftLint/issues/5183)

* Exclude types with a `@Suite` attribute and functions annotated with `@Test` from `no_magic_numbers` rule.
  Also treat a type as a `@Suite` if it contains `@Test` functions.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5964](https://github.com/realm/SwiftLint/issues/5964)

* Add new `opaque_over_existential` opt-in rule that triggers when the existential `any` type of a
  function parameter can be replaced with an opaque `some` type.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Add a new rationale property to rule descriptions, providing a more expansive
  description of the motivation behind each rule.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5681](https://github.com/realm/SwiftLint/issues/5681)

* Add new `allowed_types` option to `legacy_objc_type` rule to ignore certain types.  
  [kapitoshka438](https://github.com/kapitoshka438)
  [#3723](https://github.com/realm/SwiftLint/issues/3723)

* Add `excluded_methods` configuration option to `unneeded_override` to opt out checking methods with a given name.
  For example, this helps avoid a conflict with `balanced_xctest_lifecycle` where one of `setUp/tearDown`
  is empty but the other is not.  
  [jaredgrubb](https://github.com/jaredgrubb)

### Bug Fixes

* Fix issue referencing the Tests package from another Bazel workspace.  
  [jszumski](https://github.com/jszumski)

* Fix crash when a disable command is preceded by a unicode character.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5945](https://github.com/realm/SwiftLint/issues/5945)

* Allow severity of `duplicate_imports` rule to be configurable.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5978](https://github.com/realm/SwiftLint/issues/5978)

* Silence `no_magic_numbers` rule in conditions of `#if` directives.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#6000](https://github.com/realm/SwiftLint/issues/6000)

* Consider types restricting a protocol to classes in composed inherited types in `class_delegate_protocol` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5982](https://github.com/realm/SwiftLint/issues/5982)

* Rewrite `type_contents_order` rule with SwiftSyntax fixing an issue with experimental availability macros.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5999](https://github.com/realm/SwiftLint/issues/5999)

* Update `file_name` rule to consider `macro` types.  
  [fraioli](https://github.com/fraioli)
  [#6026](https://github.com/realm/SwiftLint/issues/6026)

## 0.58.2: New Year’s Fresh Fold

### Breaking

* None.

### Experimental

* None.

### Enhancements

* None.

### Bug Fixes

* Fix version being reported by the binary consumed from the Docker image.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5966](https://github.com/realm/SwiftLint/issues/5966)

## 0.58.1: New Year’s Fresh Fold

### Breaking

* If you are referring to the `swiftlint` binary from an Artifact Bundle consumed via Swift Package Manager
  in an Xcode Run Script Build Phase, make sure to update the path from

  ```bash
  "$SWIFT_PACKAGE_DIR"/swiftlintplugins/SwiftLintBinary/SwiftLintBinary.artifactbundle/swiftlint-*/bin/swiftlint
  ```

  to

  ```bash
  "$SWIFT_PACKAGE_DIR"/swiftlintplugins/SwiftLintBinary/SwiftLintBinary.artifactbundle/swiftlint-*-macos/bin/swiftlint
  ```

  in order to make Xcode use the binary built for macOS.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5954](https://github.com/realm/SwiftLint/issues/5954)

* Revert changes to improve performance when exclude patterns resolve to a large set of files. While resolving files
  indeed got much faster in certain setups, it leads to missed exclusions for nested configurations and when the linted
  folder is not the current folder.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5953](https://github.com/realm/SwiftLint/issues/5953)

### Experimental

* None.

### Enhancements

* None.

### Bug Fixes

* Fix `redundant_sendable` correction by removing a remaining trailing comma as well when `Sendable` was last.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5952](https://github.com/realm/SwiftLint/issues/5952)

* Remove lints for `redundant_sendable` on protocols, where `Sendable` is not redundant.  
  [riley-williams](https://github.com/riley-williams)
  [#5958](https://github.com/realm/SwiftLint/issues/5958)

* Add `ib_segue_action` to default configuration of `type_contents_order` rule on the same level as `ib_action` to
  define and document a standard position.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5524](https://github.com/realm/SwiftLint/issues/5524)

## 0.58.0: New Year’s Fresh Fold

### Breaking

* The command plugin now requires write permissions so that it works with the `--fix` option without an error.  
  [SimplyDanny](https://github.com/SimplyDanny)

* The artifact bundle name has changed. `SwiftLintBinary-macos.artifactbundle.zip` is now called
  `SwiftLintBinary.artifactbundle.zip`. It now includes an AMD64 Linux binary.  
  [Bradley Mackey](https://github.com/bradleymackey)
  [#5514](https://github.com/realm/SwiftLint/issues/5514)

* The `inert_defer` and `unused_capture_list` rules have completely been removed after being deprecated for 2 years.  
  [SimplyDanny](https://github.com/SimplyDanny)

* SwiftLint now requires a Swift 5.10 or higher compiler to build.
  [The Swift Package Manager plugins](https://github.com/SimplyDanny/SwiftLintPlugins) continue to work with
  Swift 5.9.  
  [SimplyDanny](https://github.com/SimplyDanny)

* The `private_unit_test` rule's deprecated `regex` configuration option has been removed after 2 years.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5912](https://github.com/realm/SwiftLint/issues/5912)

### Experimental

* None.

### Enhancements

* Add Xcode command plugin allowing to run SwiftLint from within Xcode.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Add new `async_without_await` opt-in rule that checks if an `async` declaration contains at least one `await`.  
  [Jan Kolarik](https://github.com/jkolarik-paylocity)
  [#5082](https://github.com/realm/SwiftLint/issues/5082)

* Support replacing identity expressions with `\.self` in `prefer_key_path` rule from Swift 6 on.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Support linting only provided file paths with command plugins.  
  [DanSkeel](https://github.com/DanSkeel)

* Add new category for `@IBSegueAction` to `type_contents_order` rule.  
  [dk-talks](https://github.com/dk-talks)
  [SimplyDanny](https://github.com/SimplyDanny)

* Add option to disable `redundant_discardable_let` rule in SwiftUI view bodies.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#3855](https://github.com/realm/SwiftLint/issues/3855)

* Add new `redundant_sendable` rule that triggers on `Sendable` conformances of
  types that are implicitly already `Sendable` due to being actor-isolated. It
  is enabled by default.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Improve performance when exclude patterns resolve to a large set of files.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5018](https://github.com/realm/SwiftLint/issues/5018)

### Bug Fixes

* Ignore TipKit's `#Rule` macro in `empty_count` rule.  
  [Ueeek](https://github.com/Ueeek)
  [#5883](https://github.com/realm/SwiftLint/issues/5883)

* Ignore super calls with trailing closures in `unneeded_override` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5886](ttps://github.com/realm/SwiftLint/issues/5886)

* If violations are detected by `lint` or `analyze`, still perform an update
  check for new versions of SwiftLint if requested.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5904](ttps://github.com/realm/SwiftLint/issues/5904)

## 0.57.1: Squeaky Clean Cycle

### Breaking

* None.

### Experimental

* None.

### Enhancements

* Suggest failable `String(bytes:encoding:)` initializer in
  `optional_data_string_conversion` rule as it accepts all `Sequence`
  types.  
  [Jordan Rose](https://github.com/jrose-signal)
  [SimplyDanny](https://github.com/SimplyDanny)

* Support reading files to lint from Input File Lists provided
  by Run Script Build Phases in Xcode using the command-line
  argument `--use-script-input-file-lists`.  
  [BlueVirusX](https://github.com/BlueVirusX)

* Adds a `lenient` configuration file setting, equivalent to the `--lenient`
  command line option.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5801](https://github.com/realm/SwiftLint/issues/5801)

* Support type casting on configuration option values defined by environment variables.
  Without a cast, these values would always be treated as strings leading to a potentially
  invalid configuration.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5774](https://github.com/realm/SwiftLint/issues/5774)

* Add new option `max_number_of_single_line_parameters` that allows only the specified maximum
  number of parameters to be on one line when `allows_single_line = true`. If the limit is
  exceeded, the rule will still trigger. Confusing option combinations like `allows_single_line = false`
  together with `max_number_of_single_line_parameters > 1` will be reported.  
  [kimdv](https://github.com/kimdv)
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5781](https://github.com/realm/SwiftLint/issues/5781)

* The `redundant_type_annotation` rule gains a new option,
  `ignore_properties`, that skips enforcement on members in a
  type declaration (like a `struct`). This helps the rule coexist with
  the `explicit_type_interface` rule that requires such redundancy.  
  [jaredgrubb](https://github.com/jaredgrubb)
  [#3750](https://github.com/realm/SwiftLint/issues/3750)

* Allow inherited isolation parameter to be first in function signatures
  depending on the new option `ignore_first_isolation_inheritance_parameter`
  which is `true` by default.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5793](https://github.com/realm/SwiftLint/issues/5793)

### Bug Fixes

* Run command plugin in whole package if no targets are defined in the
  package manifest.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5787](https://github.com/realm/SwiftLint/issues/5787)

* Silence `superfluous_else` rule on `if` expressions with only a single
  availability condition.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5833](https://github.com/realm/SwiftLint/issues/5833)

* Stop triggering the `control_statement` rule on closures being directly
  called as conditions.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5846](https://github.com/realm/SwiftLint/issues/5846)

* Do not trigger `self_in_property_initialization` rule on `self` in
  key paths expressions.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5835](https://github.com/realm/SwiftLint/issues/5835)

* Allow to specify transitive modules to be taken into account by
  `unused_import` rule. This avoids that required imports are removed.  
  [Paul Taykalo](https://github.com/PaulTaykalo)
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5167](https://github.com/realm/SwiftLint/issues/5167)

* Only pass cache path and directory paths to commands that accept these arguments
  in the command plugin.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5848](https://github.com/realm/SwiftLint/issues/5848)

* Do not throw deprecation warning if deprecated property is not
  presented in configuration.  
  [chipp](https://github.com/chipp)
  [#5791](https://github.com/realm/SwiftLint/issues/5791)

* The `prefer_type_checking` rule will no longer trigger for non-optional
  type casting (`as`), or for comparisons to optional types.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5802](https://github.com/realm/SwiftLint/issues/5802)

* Fixes an issue where the `superfluous_disable_command` rule could generate
  false positives for nested disable commands for custom rules.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5788](https://github.com/realm/SwiftLint/issues/5788)

* Fixes the `--only-rule` command line option, when a default `.swiftlint.yml`
  is absent. Additionally rules specified with `--only-rule` on the command
  line can now be disabled in a child configuration, to allow specific
  directories to be excluded from the rule (or from being auto-corrected by
  the rule), and `--only-rule` can now be specified multiple times
  to run multiple rules.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5711](https://github.com/realm/SwiftLint/issues/5711)

* Fixes `file_name` rule to match fully-qualified names of nested types.
  Additionally adds a `require_fully_qualified_names` boolean option to enforce
  that file names match nested types only using their fully-qualified name.  
  [fraioli](https://github.com/fraioli)
  [#5840](https://github.com/realm/SwiftLint/issues/5840)

* Fixes an issue where the `vertical_whitespace_between_cases` rule does not
  recognize `@unknown default`.  
  [Jared Grubb](https://github.com/jaredtrubb)
  [#5788](https://github.com/realm/SwiftLint/issues/3511)

## 0.57.0: Squeaky Clean Cycle

### Breaking

* The deprecated `anyobject_protocol` rule has now been removed.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5769](https://github.com/realm/SwiftLint/issues/5769)

* Revert the part of the `non_optional_string_data_conversion`
  rule that enforces non-failable conversions of `Data` to UTF-8
  `String`. This is due to the fact that the data to be converted
  can be arbitrary and especially doesn't need to represent a valid
  UTF-8-encoded string.  
  [Sam Rayner](https://github.com/samrayner)
  [#5263](https://github.com/realm/SwiftLint/issues/5263)

### Experimental

* None.

### Enhancements

* Add `ignore_multiline_type_headers` and `ignore_multiline_statement_conditions`
  options to `opening_brace` rule to allow opening braces to be on a new line after
  multiline type headers or statement conditions. Rename `allow_multiline_func` to
  `ignore_multiline_function_signatures`.  
  [leonardosrodrigues0](https://github.com/leonardosrodrigues0)
  [#3720](https://github.com/realm/SwiftLint/issues/3720)

* Add new `optional_data_string_conversion` rule to enforce
  failable conversions of `Data` to UTF-8 `String`.  
  [Sam Rayner](https://github.com/samrayner)
  [#5263](https://github.com/realm/SwiftLint/issues/5263)

* The `no_magic_numbers` rule will now ignore violations in
  SwiftUI's `Preview` macro.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5778](https://github.com/realm/SwiftLint/issues/5778)

### Bug Fixes

* `superfluous_disable_command` violations are now triggered for
  custom rules.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [Martin Redington](https://github.com/mildm8nnered)
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4754](https://github.com/realm/SwiftLint/issues/4754)

* Trailing comments are now preserved by the `opening_brace` rule when
  rewriting.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5751](https://github.com/realm/SwiftLint/issues/5751)

## 0.56.2: Heat Pump Dryer

### Breaking

* None.

### Experimental

* None.

### Enhancements

* None.

### Bug Fixes

* Ignore initializers with attributes in `unneeded_synthesized_initializer` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5153](https://github.com/realm/SwiftLint/issues/5153)

* Silence `prefer_key_path` rule on macro expansion expressions.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5744](https://github.com/realm/SwiftLint/issues/5744)

* Check `if` expressions nested arbitrarily deep in `contrasted_opening_brace` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5752](https://github.com/realm/SwiftLint/issues/5752)

* Align left closure brace with associated parent function call in `contrasted_opening_brace` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5752](https://github.com/realm/SwiftLint/issues/5752)

* Align left brace of additional trailing closures with right brace of previous trailing closure
  in `contrasted_opening_brace` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5752](https://github.com/realm/SwiftLint/issues/5752)

* Trigger on empty closure blocks in `no_empty_block` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5762](https://github.com/realm/SwiftLint/issues/5762)

* Silence `unneeded_override` rule on methods and initializers with attributes.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5753](https://github.com/realm/SwiftLint/issues/5753)

## 0.56.1: Heat Pump Dryer

### Breaking

* None.

### Experimental

* None.

### Enhancements

* None.

### Bug Fixes

* Let `contrasted_opening_brace` be an opt-in rule.  
  [SimplyDanny](https://github.com/SimplyDanny)

## 0.56.0: Heat Pump Dryer

### Breaking

* The deprecated `--path` and `--in-process-sourcekit` arguments have now been
  removed completely.  
  [Martin Redington](https://github.com/mildm8nnered)
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5614](https://github.com/realm/SwiftLint/issues/5614)

* When SwiftLint corrects violations automatically (`swiftlint lint --fix`)
  it doesn't report the exact location of the fix any longer. The new format
  is `<file-path>: Correcting <rule-name>` without line and column numbers.
  Reason: Correction positions are likely just incorrect, especially when
  multiple rules apply their rewrites. Fixing that is not trivial and likely
  not worth the effort also considering that there haven't been any bug
  reports about wrong correction positions so far.  
  [SimplyDanny](https://github.com/SimplyDanny)

### Experimental

* None.

### Enhancements

* Add new `attribute_name_spacing` rule to enforce no trailing whitespace between
  attribute names and parentheses, ensuring compatibility with Swift 6, where this spacing
  causes compilation errors.  
  [aryamansharda](https://github.com/aryamansharda)
  [#5667](https://github.com/realm/SwiftLint/issues/5667)

* Linting got up to 30% faster due to the praiseworthy performance
  improvements done in the [SwiftSyntax](https://github.com/swiftlang/swift-syntax)
  library.

* Rewrite the following rules with SwiftSyntax:
  * `missing_docs`

  [woxtu](https://github.com/woxtu)  
  [SimplyDanny](https://github.com/SimplyDanny)  

* Add new `prefer_key_path` rule that triggers when a trailing closure on a standard
  function call is only hosting a (chained) member access expression since the closure
  can be replaced with a key path argument. Likewise, it triggers on closure arguments.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Adds `baseline` and `write_baseline` configuration file settings, equivalent
  to the `--baseline` and `--write-baseline` command line options.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5552](https://github.com/realm/SwiftLint/issues/5552)

* Add `no_empty_block` opt-in rule to validate that code blocks are not empty.
  They should at least contain a comment.  
  [Ueeek](https://github.com/Ueeek)
  [#5615](https://github.com/realm/SwiftLint/issues/5615)

* Add new `contrasted_opening_brace` rule that enforces opening
  braces to be on a separate line after the preceding declaration.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Add new `unused_parameter` rule that triggers on function/initializer/subscript
  parameters that are not used inside of the function/initializer/subscript.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#2120](https://github.com/realm/SwiftLint/issues/2120)

* Support `--target` paths being passed to command plugin by Xcode.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5603](https://github.com/realm/SwiftLint/issues/5603)

* Add modified configurations to examples in rule documentation.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Add new option `evaluate_effective_access_control_level` to `missing_docs`
  rule. Setting it to `true` stops the rule from triggering on declarations
  inside of types with lower visibility. These declarations effectively
  have at most the same access level.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Add new `--check-for-updates` command line option for the `lint`, `analyze`,
  and `version` subcommands to check for new versions  of SwiftLint, and an
  equivalent `check_for_updates` configuration file setting.  
  [Martin Redington](https://github.com/mildm8nnered)
  [SimplyDanny](https://github.com/SimplyDanny)
  [Ian Leitch](https://github.com/ileitch)
  [#5613](https://github.com/realm/SwiftLint/issues/5613)

* Add new `--only-rule` command line option for the `lint` and `analyze`,
  subcommands that overrides configuration file rule enablement and
  disablement, in particular to facilitate running `--fix` for single rules
  without having to temporarily edit the configuration file.
  [Martin Redington](https://github.com/mildm8nnered)
  [#5666](https://github.com/realm/SwiftLint/issues/5666)

### Bug Fixes

* Fix a few false positives and negatives by updating the parser to support
  Swift 6 with all its new language constructs.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Stop triggering `mark` rule on "mark" comments in the middle of another
  comment.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5592](https://github.com/realm/SwiftLint/issues/5592)

* Don't consider specialized imports with attributes as duplicates in
  `duplicate_imports` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5716](https://github.com/realm/SwiftLint/issues/5716)

* Use correct types and relative paths in SARIF reporter output. Generally
  avoid escaping slashes in JSON output as well.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5598](https://github.com/realm/SwiftLint/issues/5598)
  [#5599](https://github.com/realm/SwiftLint/issues/5599)

* Keep initializers with attributed parameters in
  `unneeded_synthesized_initializer` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5153](https://github.com/realm/SwiftLint/issues/5153)

* Make `vertical_whitespace_between_cases` rule work for
  cases ending with a string literal.  
  [ilendemli](https://github.com/ilendemli)
  [#5612](https://github.com/realm/SwiftLint/issues/5612)

* Ignore access level modifiers restricted to value setting in
  `extension_access_modifier` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5623](https://github.com/realm/SwiftLint/issues/5623)

* Fix `baseline compare` incorrectly reporting some violations
  as new, and also now sorts the violations from `baseline compare`
  deterministically.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5606](https://github.com/realm/SwiftLint/issues/5606)

* Fix rewriting for `implicit_return` rule when violations are
  nested within each other.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5660](https://github.com/realm/SwiftLint/issues/5660)

* Fix `opening_brace` correction and make sure that disable commands
  are taken into account before applying a fix.  
  [swiftty](https://github.com/swiftty)
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5598](https://github.com/realm/SwiftLint/issues/5598)

* Violations of the `typesafe_array_init` rule will now be correctly
  reported as such, instead of as violations of the `array_init`
  rule.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5709](https://github.com/realm/SwiftLint/issues/5709)

## 0.55.1: Universal Washing Powder

### Breaking

* None.

### Experimental

* None.

### Enhancements

* Clarify wording of `static_over_final_class` rule's violation message.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5570](https://github.com/realm/SwiftLint/issues/5570)

### Bug Fixes

* Fix Bazel build when `bzlmod` is not in use by adding transitive dependencies
  explicitly.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5568](https://github.com/realm/SwiftLint/issues/5568)

* Treat condionally activatable variable declarations and initializer as if
  they were always active in `unneeded_synthesized_initializer` rule to avoid
  compilation issues when unexpected items are there after all.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5574](https://github.com/realm/SwiftLint/issues/5574)

* Silence `unused_enumerated` rule when `$0` in a closure is explicitly unpacked.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5573](https://github.com/realm/SwiftLint/issues/5573)

* Remove redundant initializers in `unneeded_override` rule only when checking
  initializers is actually enabled in the configuration.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5571](https://github.com/realm/SwiftLint/issues/5571)

* Respect comments before opening brace in `opening_brace` rule when there is
  one space before the brace after the comment. Everything else is still a
  violation, yet the rewriter will not remove the comment anymore.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5578](https://github.com/realm/SwiftLint/issues/5578)

## 0.55.0: Universal Washing Powder

### Breaking

* Rewrite `SwiftLintBuildToolPlugin` using `BUILD_WORKSPACE_DIRECTORY` without relying
  on the `--config` option.  
  [Garric Nahapetian](https://github.com/garricn)

* Introduce SwiftLintCommandPlugin.
  Rename SwiftLintBuildToolPlugin.
  Add Swift Package Manager installation instructions.  
  [garricn](https://github.com/garricn)
  
* Fix Code Climate reporter output by having lower case severity
  values to comply with the Code Climate specification.  
  [waitButY](https://github.com/waitbutY)

* The `superfluous_disable_command` rule will now be enabled for the `analyze`
  command, unless it has been disabled, and will warn about superfluous
  disablement of analyzer rules.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#4792](https://github.com/realm/SwiftLint/issues/4792)

* With the introduction of the `consider_default_literal_types_redundant`
  option to the `redundant_type_annotation` rule, `Bool` literals will no
  longer be considered redundant by default. Set this option to true to
  preserve the previous behavior.  
  [Garric Nahapetian](https://github.com/garricn)

### Experimental

* Add two new options to the `lint` and `analyze` commands: `--write-baseline`
  to save a baseline to disk, and `--baseline` to read a saved baseline and
  use it to filter out detected pre-existing violations. A new `baseline`
  command uses the reporters to print the violations in a baseline.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5475](https://github.com/realm/SwiftLint/pull/5475)
  [#3421](https://github.com/realm/SwiftLint/pull/3421)

### Enhancements

* Add a reporter that outputs violations in the Static
  Analysis Results Interchange Format (SARIF).  
  [waitButY](https://github.com/waitbutY)

* Ignore absence of a non-initial local config instead of
  falling back to default.  
  [kohtenko](https://github.com/kohtenko)

* Add new option `ignore_typealiases_and_associatedtypes` to
  `nesting` rule. It excludes `typealias` and `associatedtype`
  declarations from the analysis.
  [marunomi](https://github.com/marunomi)
  [#3183](https://github.com/realm/SwiftLint/issues/3183)

* Prevent from compiling `SwiftLint` target when only using `SwiftLintPlugin` on macOS.  
  [Julien Baillon](https://github.com/julien-baillon)
  [#5372](https://github.com/realm/SwiftLint/issues/5372)

* Allow to set the severity of rules (if they have one) in the short form
  `rule_name: warning|error` provided that no other attributes need to be
  configured.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Add new `ignore_one_liners` option to `switch_case_alignment`
  rule to ignore switch statements written in a single line.  
  [tonell-m](https://github.com/tonell-m)
  [#5373](https://github.com/realm/SwiftLint/issues/5373)

* Add new `shorthand_argument` rule that triggers on shorthand arguments
  like `$0`, `$1`, etc. in closures if they are too far away from the
  beginning of the closure. Options allow further cases to always trigger.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#70](https://github.com/realm/SwiftLint/issues/70)

* Warn when `--fix` comes together with `--strict` or `--lenient` as only `--fix`
  takes effect then.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5387](https://github.com/realm/SwiftLint/pull/5387)

* Add new `one_declaration_per_file` rule that allows only a
  single class/struct/enum/protocol declaration per file.
  Extensions are an exception; more than one is allowed.  
  [Muhammad Zeeshan](https://github.com/mzeeshanid)
  [#2802](https://github.com/realm/SwiftLint/issues/2802)

* Add new `ignore_attributes` option to `redundant_type_annotation` rule
  that allows disabling the rule for properties that are marked with at least
  one of the configured attributes.  
  [tonell-m](https://github.com/tonell-m)
  [#5366](https://github.com/realm/SwiftLint/issues/5366)

* Rewrite the following rules with SwiftSyntax:
  * `explicit_acl`
  * `extension_access_modifier`
  * `identifier_name`
  * `let_var_whitespace`
  * `mark`
  * `multiline_literal_brackets`
  * `nesting`
  * `nimble_operator`
  * `opening_brace`
  * `orphaned_doc_comment`
  * `redundant_type_annotation`
  * `trailing_closure`
  * `void_return`

  [SimplyDanny](https://github.com/SimplyDanny)  
  [kishikawakatsumi](https://github.com/kishikawakatsumi)  
  [Marcelo Fabri](https://github.com/marcelofabri)  
  [swiftty](https://github.com/swiftty)  
  [KS1019](https://github.com/KS1019)  
  [tonell-m](https://github.com/tonell-m)

* Print invalid keys when configuration parsing fails.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5347](https://github.com/realm/SwiftLint/pull/5347)

* Add new `final_test_case` rule that triggers on non-final test classes.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Make `superfluous_else` rule auto-correctable.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Support other scope-exiting statements `continue`, `break` and `throw` in
  `superfluous_else` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Trigger on `-> ()` return signatures in `return_value_from_void_function`
  rule. Moreover, support automatic fixes for obvious cases.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Refine violation position of `trailing_closure` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Trigger on the declaration keyword (i.e. `let`, `var`, `func`, `subscript`)
  instead of the `static` or `class` keywords in the `explicit_acl` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Allow to configure more operators in `identifier_name` rule. The new option
  is named `additional_operators`. Use it to add more operators to the list
  of default operators known to the rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#1762](https://github.com/realm/SwiftLint/pull/1762)

* Stop triggering `no_magic_numbers` rule on literals used in range
  expressions assigned to variables.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5430](https://github.com/realm/SwiftLint/pull/5430)

* Add `affect_initializers` option to allow `unneeded_override` rule
  to affect initializers.  
  [leonardosrodrigues0](https://github.com/leonardosrodrigues0)
  [#5265](https://github.com/realm/SwiftLint/issues/5265)

* Respect scattered disable commands in auto-correction of `duplicate_imports`
  rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5418](https://github.com/realm/SwiftLint/pull/5418)

* Add new `non_optional_string_data_conversion` rule to enforce
  non-failable conversions of UTF-8 `String` <-> `Data`.  
  [Ben P](https://github.com/ben-p-commits)
  [#5263](https://github.com/realm/SwiftLint/issues/5263)

* Refine violation position of `superfluous_else` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Make `sorted_enum_cases` rule's comparison case-insensitive to
  avoid unexpected ordering.  
  [Oleg Kokhtenko](https://github.com/kohtenko)

* Add `excluded_lines_patterns` to `line_length` to avoid linting lines
  that contain one of the patterns.  
  [kasrababaei](https://github.com/kasrababaei)

* Make `empty_count` auto-correctable.  
  [KS1019](https://github.com/KS1019/)
  
* Make `private_swiftui_state` auto-correctable.  
  [mt00chikin](https://github.com/mt00chikin)

* Make `trailing_closure` correctable.  
  [KS1019](https://github.com/KS1019/)

* Add new `static_over_final_class` rule to prefer `static` over
  `final class` declaration.  
  [phlippieb](https://github.com/phlippieb)
  [#5471](https://github.com/realm/SwiftLint/issues/5471)

* Extends `unused_enumerated` rule to cover closure parameters, to
  detect cases like `list.enumerated().map { idx, _ in idx }` and
  `list.enumerated().map { $1 }`.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5470](https://github.com/realm/SwiftLint/issues/5470)

* Include `Double`, `Int` and `String` to the exiting redundant type validation
  check of `Bool` in the `redundant_type_annotation` rule. Add
  `consider_default_literal_types_redundant` option supporting `Bool`,
  `Double`, `Int` and `String`. Setting this option to `true` lets the rule
  consider said types in declarations like `let i: Int = 1` or
  `let s: String = ""` as redundant.  
  [Garric Nahapetian](https://github.com/garricn)

* Add new `prefer_type_checking` rule to prefer `a is X` over `a as? X != nil`.  
  [ikelax](https://github.com/ikelax)  
  [mildm8nnered](https://github.com/mildm8nnered)
  [#5295](https://github.com/realm/SwiftLint/issues/5295)

### Bug Fixes

* Invalid keys in a configuration don't lead to the default configuration being
  used anymore. The invalid key will just be reported but otherwise ignored.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5565](https://github.com/realm/SwiftLint/issues/5565)

* Fix version comparison algorithm which caused some version-dependent rules to
  misbehave with Swift 5.10.  
  [chandlerwall](https://github.com/chandlerwall)
  [#5517](https://github.com/realm/SwiftLint/issues/5517)

* Silence `discarded_notification_center_observer` rule in closures. Furthermore,
  handle `get` and `set` accessors correctly and consider implicit returns.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4801](https://github.com/realm/SwiftLint/pull/4801)

* Fix some false positives in `let_var_whitespace` rule that would happen
  when attributes attached to declarations were spread over multiple lines.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4801](https://github.com/realm/SwiftLint/pull/4801)

* Support `private_over_fileprivate` rule for actors.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5489](https://github.com/realm/SwiftLint/pull/5489)

* Ensure that declarations referenced only as extended types do not count as
  used by means of the `unused_declaration` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5550](https://github.com/realm/SwiftLint/issues/5550)

* Fix some false positives in `multiline_literal_brackets` rule that would
  happen when comments are present.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Fix some false positives in the `opening_brace` rule.  
  [kishikawakatsumi](https://github.com/kishikawakatsumi)
  [SimplyDanny](https://github.com/SimplyDanny)  
  [#4610](https://github.com/realm/SwiftLint/issues/4610)
  [#5114](https://github.com/realm/SwiftLint/issues/5114)
  [#3470](https://github.com/realm/SwiftLint/issues/3470)
  [#3574](https://github.com/realm/SwiftLint/issues/3574)
  [#2632](https://github.com/realm/SwiftLint/issues/2632)
  [#3476](https://github.com/realm/SwiftLint/issues/3476)
  [#3756](https://github.com/realm/SwiftLint/issues/3756)
  [#3690](https://github.com/realm/SwiftLint/issues/3690)

* Ignore overridden functions with default parameters in the `unneeded_override`
  rule as they might change behavior.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5355](https://github.com/realm/SwiftLint/pull/5355)

* Trigger `nsobject_prefer_isequal` and `redundant_self_in_closure` even in case
  the surrounding declaration is nested in an extension.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Fixed false positives for the `no_magic_numbers` rule, when they
  are defined in a tuple like `let (a, b) = (5, 10)` or `let a = (2, 3)`.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5305](https://github.com/realm/SwiftLint/pull/5305)

* Take array and nested types into account in `redundant_type_annotation` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#3141](https://github.com/realm/SwiftLint/pull/3141)
  [#3146](https://github.com/realm/SwiftLint/pull/3146)

* Silence `pattern_matching_keywords` rule when an identifier is referenced
  in the argument list of a matching enum case.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#3852](https://github.com/realm/SwiftLint/pull/3852)

* Don't trigger the `return_value_from_void_function` warning from initializers.  
  [mrbkap](https://github.com/mrbkap)

* Fixes superfluous warnings about configurations for rules that were not
  enabled, when the rules were enabled in a parent configuration.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#4858](https://github.com/realm/SwiftLint/issues/4858)

* Add `all` pseudo-rule for `analyzer_rules` - enables all analyzer rules
  that are not listed in `disabled_rules`.  
  [woxtu](https://github.com/woxtu)
  [Martin Redington](https://github.com/mildm8nnered)
  [#4999](https://github.com/realm/SwiftLint/issues/4999)

* Updates the reasons provided by violations of the `blanket_disable_command`
  to omit language about the end of the file, and to direct users to
  re-enable the rule as soon as possible.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5450](https://github.com/realm/SwiftLint/issues/5450)

* Add a `--working-directory` command line option, for users who cannot
  otherwise control which directory SwiftLint is run from.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5424](https://github.com/realm/SwiftLint/issues/5424)

## 0.54.0: Macro-Economic Forces

### Breaking

* SwiftLint now requires Swift 5.9 or higher to build.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [JP Simard](https://github.com/jpsim)

### Experimental

* None.

### Enhancements

* Add `only` configuration option to `todo` rule which allows to specify
  whether the rule shall trigger on `TODO`s, `FIXME`s or both.  
  [gibachan](https://github.com/gibachan)
  [#5233](https://github.com/realm/SwiftLint/pull/5233)

* Make `unneeded_break_in_switch` auto correctable.  
  [KS1019](https://github.com/KS1019/)

* Speed up `closure_parameter_position` rule when there are no violations.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Rewrite `cyclomatic_complexity` rule using SwiftSyntax.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Rewrite `redundant_void_return` rule using SwiftSyntax.
  Also include redundant void return clauses for closures in addition to
  functions. This can be disabled by configuring the rule with
  `include_closures: false`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [JP Simard](https://github.com/jpsim)

* Rewrite `discouraged_optional_collection` rule using SwiftSyntax, catching
  more violations.  
  [JP Simard](https://github.com/jpsim)

* Rewrite `duplicate_imports` rule using SwiftSyntax.  
  [JP Simard](https://github.com/jpsim)

* Handle `viewIsAppearing` in the `type_contents_order` rule.  
  [u-abyss](https://github.com/u-abyss)
  [#5259](https://github.com/realm/SwiftLint/issues/5259)

* Rewrite `vertical_parameter_alignment_on_call` rule using SwiftSyntax, fixing
  some false positives.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3581](https://github.com/realm/SwiftLint/issues/3581)

* Rewrite `no_grouping_extension` rule using SwiftSyntax.  
  [Marcelo Fabri](https://github.com/marcelofabri)

### Bug Fixes

* Fix false positive in `implicit_getter` rule when using unknown accessors.  
  [kabiroberai](https://github.com/kabiroberai)
  [#5300](https://github.com/realm/SwiftLint/issues/5300)

* Fix correction of `explicit_init` rule by keeping significant trivia.  
  [BB9z](https://github.com/BB9z)
  [#5289](https://github.com/realm/SwiftLint/issues/5289)

* Fix invalid corrections for opaque and existential optionals in
  `syntactic_sugar` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5277](https://github.com/realm/SwiftLint/issues/5277)

* Fix false positive in `unused_import` rule that triggered on
  `@_exported` imports which could break downstream modules if removed.  
  [jszumski](https://github.com/jszumski)
  [#5242](https://github.com/realm/SwiftLint/pull/5242)

* Fix false positive in `unused_import` rule when using a constructor
  defined in a transitive module.  
  [jszumski](https://github.com/jszumski)
  [#5246](https://github.com/realm/SwiftLint/pull/5246)

## 0.53.0: Laundry List

### Breaking

* Hide all `Reporter`s from SwiftLint's' public interface.  
  [SimplyDanny](https://github.com/SimplyDanny)

* The options `inlcuded`, `name` and `message` are from now on ignored in the
  configuration for the `private_unit_test` rule. The option `regex` is still
  supported but is deprecated. It's recommended to use the list
  `test_parent_classes` instead which accepts names of parent test classes.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Remove support for disable and enable commands in multiline comments.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#4798](https://github.com/realm/SwiftLint/issues/4798)

### Experimental

* None.

### Enhancements

* Show specific violation message for the `attributes` rule when the option
  `always_on_line_above` or `attributes_with_arguments_always_on_line_above`
  is involved.  
  [chrisngabp](https://github.com/chrisngabp)
  [5103](https://github.com/realm/SwiftLint/issues/5103)

* Rewrite `control_statement` rule using SwiftSyntax.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Add new `non_overridable_class_declaration` rule that triggers on `class`
  function and variable declarations in final classes that are not final
  themselves or private.  
  [SimplyDanny](https://github.com/SimplyDanny)

* The Homebrew formula for SwiftLint now also installs completion scripts for
  Bash, Zsh and fish.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Add new `private_swiftui_state` opt-in rule to encourage setting
  SwiftUI `@State` and `@StateObject` properties to private.  
  [mt00chikin](https://github.com/mt00chikin)
  [#3173](https://github.com/realm/SwiftLint/issues/3173)

* The `implicit_return` rule now supports the kinds `subscript` and
  `initializer` in the `included` configuration list.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Add `unneeded_override` rule to remove function overrides that only
  call super.  
  [keith](https://github.com/keith)
  [5139](https://github.com/realm/SwiftLint/pull/5139)

* Show a rule's active YAML configuration in output of
  `swiftlint rules <rule>`.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Add `invokeTest()` to `overridden_super_call` defaults.  
  [DylanBettermannDD](https://github.com/DylanBettermannDD)

* Add `--config-only` option to `rules` command allowing to print only the YAML
  configuration of a single or all rules.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Add `--default-config` option to `rules` command allowing to use default
  values for configurations being printed for a single rule or all rules.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Add `include_bare_init` option to the `explicit_init` rule. `include_bare_init`
  encourages using named constructors over `.init()` and type inference.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5203](https://github.com/realm/SwiftLint/issues/5203)

* Improved the reported location and reasons provided for issues
  detected by the `invalid_swiftlint_command` rule.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5204](https://github.com/realm/SwiftLint/issues/5204)

* 100 is no longer considered to be a magic number by the `no_magic_numbers`
  rule.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5215](https://github.com/realm/SwiftLint/issues/5215)

* Adds a `strict` configuration file setting, equivalent to the `--strict`
  command line option.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5226](https://github.com/realm/SwiftLint/issues/5226)

* Extend `implicitly_unwrapped_optional` rule with the new mode
  `weak_except_iboutlets` that only checks `weak` variables.  
  [Ricky Tan](https://github.com/rickytan)

### Bug Fixes

* Respect grapheme clusters in counting the number of characters in the `collection_alignment` rule.  
  [kishikawakatsumi](https://github.com/kishikawakatsumi)
  [#4837](https://github.com/realm/SwiftLint/issues/4837)

* Fix false positive in `control_statement` rule that triggered on conditions
  with trailing closures where parentheses are recommended by the compiler.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5135](https://github.com/realm/SwiftLint/issues/5135)

* Fix runtime error when an excluded directory does not exist.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5078](https://github.com/realm/SwiftLint/issues/5078)

* Support `switch` expressions used in expression contexts in
  `switch_case_alignment` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5191](https://github.com/realm/SwiftLint/issues/5191)
  [#5227](https://github.com/realm/SwiftLint/issues/5272)
  [#5080](https://github.com/realm/SwiftLint/issues/5080)

* Fix bug in `prefer_self_in_static_references` rule that triggered on
  initializers of computed properties in classes when the property had an
  accessor block.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5118](https://github.com/realm/SwiftLint/issues/5118)

* Document `exclude_ranges` option for `number_separator` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Rewrite `implicit_return` rule with SwiftSyntax fixing a few false positives
  and false negatives in the process.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5161](https://github.com/realm/SwiftLint/issues/5161)

* Make sure `severity` is configurable for `type_contents_order` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Bazel: Mark `rules_xcodeproj` as a development dependency.  
  [Thi Doãn](https://github.com/thii)
  [JP Simard](https://github.com/jpsim)
  [#4737](https://github.com/realm/SwiftLint/issues/4737)

* Fix false negatives for the `unneeded_synthesized_initializer` rule
  for nested structs in classes.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5120](https://github.com/realm/SwiftLint/issues/5120)

* Fix some unexpected rule enablement interactions between parent and
  child configurations.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#4876](https://github.com/realm/SwiftLint/issues/4876)

* The `no_magic_numbers` rule will not trigger for violations in an
  extension, if the extended class inherits from one of the specified
  `test_parent_classes`, as long as the class declaration and the
  extension are in the same source file.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5137](https://github.com/realm/SwiftLint/issues/5137)

* Fix false positive in the `ns_number_init_as_function_reference` rule
  when calling `NSNumber.init(value:)` directly.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#5172](https://github.com/realm/SwiftLint/issues/5172)

* The `no_magic_numbers` rule will not trigger for bitwise shift
  operations.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5171](https://github.com/realm/SwiftLint/issues/5171)

* The `accessibility_label_for_image` rule will no longer ignore the
  `Image(systemName:)` constructor, as many system images do not
  have good accessibility labels.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5165](https://github.com/realm/SwiftLint/issues/5165)

* Fix false positives for `superfluous_disable_command` rule.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#4798](https://github.com/realm/SwiftLint/issues/4798)

* Fix false positive in the `test_case_accessibility` rule.  
  [gibachan](https://github.com/gibachan)
  [#5211](https://github.com/realm/SwiftLint/issues/5211)

## 0.52.4: Lid Switch

### Breaking

* None.

### Experimental

* None.

### Enhancements

* Handle static `spec` methods in `quick_discouraged_call` rule. The method
  type changed from an instance method to a class method in Quick 7.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5072](https://github.com/realm/SwiftLint/issues/5072)

* Prettify the rule configuration presentation on the command line as well as
  on the website.  
  [SimplyDanny](https://github.com/SimplyDanny)

### Bug Fixes

* Fix false positives for the `unneeded_synthesized_initializer` rule, when
  no argument initializers had side-effects.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5075](https://github.com/realm/SwiftLint/issues/5075)

* Ignore `switch` expressions assigned to variables in `switch_case_alignment`
  rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5080](https://github.com/realm/SwiftLint/issues/5080)

* Fix auto-correction for the `direct_return` rule, when statements have
  trailing comments.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#5081](https://github.com/realm/SwiftLint/issues/5081)

* Fix false positives for the `private_subject` rule when creating subjects
  inside initializers.  
  [kasrababaei](https://github.com/kasrababaei)

* Fix false positive for `prefer_self_in_static_references` when a class
  inherits from another class with generic types.  
  [kasrababaei](https://github.com/kasrababaei)

## 0.52.3: Duplicate Hampers

### Breaking

* None.

### Experimental

* None.

### Enhancements

* Make severity for unallowed symbols configurable. The option name is
  `unallowed_symbols_severity`. It accepts the two values `warning` and `error`
  (default) as usual.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Mention a rule's identifier in the console message that is printed when the
  rule's associated configuration entry contains invalid values.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Silence `xct_specific_matcher` rule on "one argument asserts" if there are
  potential types or tuples involved in the comparison as types and tuples do
  not conform to `Equatable`.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4990](https://github.com/realm/SwiftLint/issues/4990)

* Add `grouping` option to the `sorted_imports` rule allowing
  to sort groups of imports defined by their preceding attributes
  (e.g. `@testable`, `@_exported`, ...).  
  [hiltonc](https://github.com/hiltonc)

* Add new `--silence-deprecation-warnings` flag that silences deprecation
  warnings that would otherwise be printed to the console.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4989](https://github.com/realm/SwiftLint/issues/4989)

* Do not trigger `redundant_self_in_closure` rule when another idenfier `x` in
  scope shadows the field accessed by `self.x` to avoid semantical changes.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5010](https://github.com/realm/SwiftLint/issues/5010)

* Rewrite `todo` rule with SwiftSyntax.  
  [woxtu](https://github.com/woxtu)

* Adds an `unneeded_synthesized_initializer` rule, based on
  `swift-format`'s `UseSynthesizedInitializer` rule, which warns
  when a defined default or memberwise initializer would have been
  automatically synthesized.  
  [Martin Redington](https://github.com/mildm8nnered)

### Bug Fixes

* The option `validates_start_with_lowercase` can now be disabled by setting it
  to `off`.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5036](https://github.com/realm/SwiftLint/issues/5036)

* Do not trigger `prefer_self_in_static_references` rule on `typealias`
  declarations in classes.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5009](https://github.com/realm/SwiftLint/issues/5009)

* Do not trigger `prefer_self_in_static_references` rule on collection types in
  classes, but on initializers like `[C]()` in all types.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#5042](https://github.com/realm/SwiftLint/issues/5042)

* Fix false positives on `redundant_objc_attribute` rule for enums
  and private members.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#4633](https://github.com/realm/SwiftLint/issues/4633)

* Fix autocorrect for `CGIntersectionRect` in `legacy_cggeometry_functions`
  rule.  
  [Haoocen](https://github.com/Haoocen)
  [#5023](https://github.com/realm/SwiftLint/pull/5023)

* Fix false positives on `sorted_first_last` rule when `first`/`last` have
  a predicate.  
  [woxtu](https://github.com/woxtu)
  [#3023](https://github.com/realm/SwiftLint/issues/3023)

* Work around dyld warning about duplicate SwiftSyntax classes with Xcode 15
  betas.  
  [keith](https://github.com/keith)
  [JP Simard](https://github.com/jpsim)
  [#4782](https://github.com/realm/SwiftLint/issues/4782)

## 0.52.2: Crisper Clearer Pleats

### Breaking

* None.

### Experimental

* None.

### Enhancements

* Exclude simple assignments of the form `self.x = x` from being reported by
  the `redundant_self_in_closure` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4988](https://github.com/realm/SwiftLint/issues/4988)

### Bug Fixes

* Make `unhandled_throwing_task` opt-in instead of enabled by default. The rule
  is still prone to false positives at this point, so this makes enabling the
  rule a conscious decision by end-users.  
  [JP Simard](https://github.com/jpsim)
  [#4987](https://github.com/realm/SwiftLint/issues/4987)

* Fix `unhandled_throwing_task` false positives when the `Task` is returned or
  where the throwing code is handled in a `Result` initializer.  
  [JP Simard](https://github.com/jpsim)
  [#4987](https://github.com/realm/SwiftLint/issues/4987)

## 0.52.1: Crisp Clear Pleats

### Breaking

* None.

### Experimental

* None.

### Enhancements

* None.

### Bug Fixes

* Let the `validates_start_with_lowercase` option in name configurations
  expect a severity (warning or error). Not setting it disables the check.
  Boolean values are now deprecated. A `true` value enables the check as an
  error for the time being to keep the previous behavior.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#2180](https://github.com/realm/SwiftLint/issues/2180)

* Fixed a false positive in `unhandled_throwing_task`.  
  [kylebshr](https://github.com/kylebshr)
  [#4984](https://github.com/realm/SwiftLint/issues/4984)

* Fix Bazel release tarball for compiling on macOS.  
  [JP Simard](https://github.com/jpsim)
  [#4985](https://github.com/realm/SwiftLint/issues/4985)

## 0.52.0: Crisp Clear Pleats

### Breaking

* The `attributes` rule now expects attributes with arguments to be placed
  on their own line above the declaration they are supposed to influence.
  This applies to attributes with any kinds of arguments including single
  key path arguments which were previously handled in a different way. This
  behavior can be turned off by setting `attributes_with_arguments_always_on_line_above`
  to `false.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4843](https://github.com/realm/SwiftLint/issues/4843)

* The internal module structure for SwiftLint has changed to split the
  monolithic `SwiftLintFramework` into new `SwiftLintCore` for core linter
  infrastructure, `SwiftLintBuiltInRules` for built-in rules and
  `SwiftLintExtraRules` to add your own native rules to SwiftLint.  
  [JP Simard](https://github.com/jpsim)

### Experimental

* None.

### Enhancements

* Add new `superfluous_else` rule that triggers on `if`-statements when an
  attached `else`-block can be removed, because all branches of the previous
  `if`-block(s) would certainly exit the current scope already.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Add `sorted_enum_cases` rule which warns when enum cases are not sorted.  
  [kimdv](https://github.com/kimdv)

* Add new `redundant_self_in_closure` rule that triggers in closures on
  explicitly used `self` when it's actually not needed due to:
  * Strongly captured `self` (`{ [self] in ... }`)
  * Closure used in a struct declaration (`self` can always be omitted)
  * Anonymous closures that are directly called (`{ ... }()`) as they are
    definitly not escaping
  * Weakly captured `self` with explicit unwrapping

  [SimplyDanny](https://github.com/SimplyDanny)
  [#59](https://github.com/realm/SwiftLint/issues/59)

* Extend `xct_specific_matcher` rule to check for boolean asserts on (un)equal
  comparisons. The rule can be configured with the matchers that should trigger
  rule violations. By default, all matchers trigger, but that can be limited to
  just `one-argument-asserts` or `two-argument-asserts`.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [JP Simard](https://github.com/jpsim)
  [#3726](https://github.com/realm/SwiftLint/issues/3726)

* Trigger `prefer_self_in_static_references` rule on more type references.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Adds a new `reporters` command, to improve discoverability of reporters.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#4819](https://github.com/realm/SwiftLint/issues/4819)

* Adds `test_parent_classes` option to the `no_magic_numbers` rule.
  Violations within test classes will now be ignored by default.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#4896](https://github.com/realm/SwiftLint/issues/4896)

* Stop enforcing calls to super from the override functions `setUp()`,
  `tearDown()`, `setUpWithError()`, and `tearDownWithError()` in `XCTestCase`
  subclasses.  
  [AndrewDMontgomery](https://github.com/andrewdmontgomery)
  [#4875](https://github.com/realm/SwiftLint/pull/4875)

* Prepend `warning:` to error messages so that they show in Xcode.  
  [whiteio](https://github.com/whiteio)
  [#4923](https://github.com/realm/SwiftLint/issues/4923)

* The `attributes` rule received a new boolean option
  `attributes_with_arguments_always_on_line_above` which is `true` by default.
  Setting it to `false` ensures that attributes with arguments like
  `@Persisted(primaryKey: true)` don't violate the rule if they are on the same
  line with the variable declaration.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4843](https://github.com/realm/SwiftLint/issues/4843)

* Add new `unhandled_throwing_task` rule that triggers when a Task with an
  implicit error type has unhandled trys or errors thrown inside its body.
  This results in errors being silently discarded, which may be unexpected.
  See [this forum thread](https://forums.swift.org/t/56066) for more details.  
  [kylebshr](https://github.com/kylebshr)

### Bug Fixes

* Fix `lower_acl_than_parent` rule rewriter by preserving leading whitespace.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4860](https://github.com/realm/SwiftLint/issues/4860)

* Ignore block comments in `let_var_whitespace` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4871](https://github.com/realm/SwiftLint/issues/4871)

* Fix false positives in `indentation_width` rule.  
  [Sven Münnich](https://github.com/svenmuennich)

* Do not trigger `reduce_boolean` on `reduce` methods with a first named
  argument that is different from `into`.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4894](https://github.com/realm/SwiftLint/issues/4894)

* Work around dyld warning about duplicate SwiftSyntax classes.  
  [keith](https://github.com/keith)
  [#4782](https://github.com/realm/SwiftLint/issues/4782)

* Improve lint times of SwiftLintPlugin by moving the
  `excludedPaths(fileManager:)` operation out of the linting iterations.  
  [andyyhope](https://github.com/andyyhope)
  [#4844](https://github.com/realm/SwiftLint/issues/4844)

## 0.51.0: bzllint

### Breaking

* Deprecate the `unused_capture_list` rule in favor of the Swift compiler
  warning. At the same time, make it an opt-in rule.  
  [Cyberbeni](https://github.com/Cyberbeni)
  [#4656](https://github.com/realm/SwiftLint/issues/4656)

* Deprecate the `inert_defer` rule in favor of the Swift compiler warning.
  At the same time, make it an opt-in rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4615](https://github.com/realm/SwiftLint/issues/4615)

* Interpret strings in `excluded` option of `identifier_name`,
  `type_name` and `generic_type_name` rules as regular expression. Existing
  configurations should remain working without notice as long as they don't
  contain characters that must be escaped in regular expression.  
  [Moly](https://github.com/kyounh12)
  [#4655](https://github.com/realm/SwiftLint/pull/4655)

### Experimental

* None.

### Enhancements

* Add `duplicate_conditions` rule which warns when a condition is duplicated
  in separate branches of the same branching statement (if-else, or switch).  
  [1in1](https://github.com/1in1)
  [#4666](https://github.com/realm/SwiftLint/issues/4666)

* Add local links to rule descriptions to every rule listed
  in `Rule Directory.md`.  
  [kattouf](https://github.com/kattouf)

* Make forceExclude work with directly specified files.  
  [jimmya](https://github.com/jimmya)
  [#4609](https://github.com/realm/SwiftLint/issues/4609)

* Adds `all` pseudo-rule for `opt_in_rules` - enables all opt in rules
  that are not listed in `disabled_rules`.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#4540](https://github.com/realm/SwiftLint/issues/4540)

* Separate analyzer rules as an independent section in the rule directory of
  the reference.  
  [Ethan Wong](https://github.com/GetToSet)
  [#4664](https://github.com/realm/SwiftLint/pull/4664)

* Add rule identifier to output of Emoji reporter.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4707](https://github.com/realm/SwiftLint/issues/4707)

* Add new `direct_return` rule that triggers on `return` statements returning
  variables that have been declared in the statement before only.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Add `period_spacing` opt-in rule that checks periods are not followed
  by 2 or more spaces in comments.  
  [Julioacarrettoni](https://github.com/Julioacarrettoni)
  [#4624](https://github.com/realm/SwiftLint/pull/4624)

* Allow to pass a rule identifier to the `swiftlint docs` command to open its
  specific documentation website, e.g. `swiftlint docs for_where`.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4707](https://github.com/realm/SwiftLint/issues/4707)

* Allow new Quick APIs `aroundEach` and `justBeforeEach` for
  `quick_discouraged_call`.  
  [David Steinacher](https://github.com/stonko1994)
  [#4626](https://github.com/realm/SwiftLint/issues/4626)

* Add `relative-path` reporter to generate reports with relative file paths.  
  [Roya1v](https://github.com/roya1v)
  [#4660](https://github.com/realm/SwiftLint/issues/4660)

* Let `number_separator` rule trigger on misplaced separators, e.g. `10_00`.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4637](https://github.com/realm/SwiftLint/issues/4637)

* Rewrite `multiline_arguments` rule using SwiftSyntax, ignoring trailing
  closures.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3399](https://github.com/realm/SwiftLint/issues/3399)
  [#3605](https://github.com/realm/SwiftLint/issues/3605)

* Speed up linting by up to 6% updating to use a newer version of
  `SwiftSyntax`.  
  [JP Simard](https://github.com/jpsim)

* Catch more valid `legacy_multiple` violations.  
  [JP Simard](https://github.com/jpsim)

* Catch more valid `no_magic_numbers` violations.  
  [JP Simard](https://github.com/jpsim)

* Add `blanket_disable_command` rule that checks whether
  rules are re-enabled after being disabled.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#4731](https://github.com/realm/SwiftLint/pull/4731)

* Add `invalid_swiftlint_command` rule that validates
  `// swiftlint:enable` and `disable` commands.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#4546](https://github.com/realm/SwiftLint/pull/4546)

* Improve `identifier_name` documentation.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#4767](https://github.com/realm/SwiftLint/issues/4767)

* Adds `include_multiline_strings` option to `indentation_width` rule.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#4248](https://github.com/realm/SwiftLint/issues/4248)

* Adds a new `summary` reporter, that displays the number of violations
  of each rule in a text table.  
  [Martin Redington](https://github.com/mildm8nnered)

### Bug Fixes

* Report violations in all `<scope>_length` rules when the error threshold is
  smaller than the warning threshold.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4645](https://github.com/realm/SwiftLint/issues/4645)

* Consider custom attributes in `attributes` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4599](https://github.com/realm/SwiftLint/issues/4599)

* Fix whitespaces issue in auto-fix of `redundant_optional_initialization`
  rule when multiple variable declaration are involved.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4794](https://github.com/realm/SwiftLint/issues/4794)

* Stop triggering `strict_fileprivate` rule on symbols implementing a protocol
  in the same file.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4692](https://github.com/realm/SwiftLint/issues/4692)

* Fix false positives on `private_subject` rule when using
  subjects inside functions.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#4643](https://github.com/realm/SwiftLint/issues/4643)

* Fix for compiler directives masking subsequent `opening_brace`
  violations.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#3712](https://github.com/realm/SwiftLint/issues/3712)

* Rewrite `explicit_type_interface` rule with SwiftSyntax fixing a
  false-positive in if-case-let statements.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4548](https://github.com/realm/SwiftLint/issues/4548)

* Stop triggering `unused_capture_list` on captured variable that is only
  referenced by a shorthand optional binding (`if let capturedVar { ... }`).  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4804](https://github.com/realm/SwiftLint/issues/4804)

* Ensure that negative literals in initializers do not trigger
  `no_magic_numbers` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4677](https://github.com/realm/SwiftLint/issues/4677)

* Fix caching of `indentation_width` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4121](https://github.com/realm/SwiftLint/issues/4121)

* Updated JUnit reporter to output error count and warning count.  
  [patricks](https://github.com/patricks)
  [#4725](https://github.com/realm/SwiftLint/pull/4725)

* Fix correction on `lower_acl_than_parent` rule for `open` declarations.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#4753](https://github.com/realm/SwiftLint/issues/4753)

* Fix `void_return` rule to support async and async throws functions.  
  [Mathias Schreck](https://github.com/lo1tuma)
  [#4772](https://github.com/realm/SwiftLint/issues/4772)

* Fix false positives in `attributes` rule when using property wrappers
  with keypath arguments.  
  [JP Simard](https://github.com/jpsim)

* Fix for `superfluous_disable_command` not being completely disabled
  by `disable` commands.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#4788](https://github.com/realm/SwiftLint/issues/4788)

* Fixed correction for `trailing_comma` rule wrongly removing trailing
  comments.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#4814](https://github.com/realm/SwiftLint/issues/4814)

## 0.50.3: Bundle of Towels

### Breaking

* None.

### Experimental

* None.

### Enhancements

* The `SwiftLintPlugin` SwiftPM plugin now uses a prebuilt binary on
  macOS.  
  [Tony Arnold](https://github.com/tonyarnold)
  [JP Simard](https://github.com/jpsim)
  [#4558](https://github.com/realm/SwiftLint/issues/4558)

* Don't trigger `shorthand_operator` violations inside a shorthand
  operator function declaration.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#4611](https://github.com/realm/SwiftLint/issues/4611)

* The `balanced_xctest_lifecycle`, `single_test_class`,
  `empty_xctest_method` and `test_case_accessibility` rules will now be
  applied to subclasses of `QuickSpec`, as well as `XCTestCase`, by
  default.  
  [Martin Redington](https://github.com/mildm8nnered)

* Add `test_parent_classes` option to `balanced_xctest_lifecycle`,
  `single_test_class` and `empty_xctest_method` rules.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#4200](https://github.com/realm/SwiftLint/issues/4200)

* Show warnings in the console for Analyzer rules that are listed in the
  `opt_in_rules` configuration section.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4612](https://github.com/realm/SwiftLint/issues/4612)

### Bug Fixes

* Fix configuration parsing error in `unused_declaration` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4612](https://github.com/realm/SwiftLint/issues/4612)

* Skip `defer` statements being last in an `#if` block if the `#if`
  statement is not itself the last statement in a block.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4615](https://github.com/realm/SwiftLint/issues/4615)

* Fix false positives in `empty_enum_arguments` when the called
  expression is an identifier or an init call.  
  [Steffen Matthischke](https://github.com/heeaad)
  [#4597](https://github.com/realm/SwiftLint/issues/4597)

* Fix correction issue in `comma` when there was too much whitespace
  following the comma.  
  [JP Simard](https://github.com/jpsim)

## 0.50.1: Artisanal Clothes Pegs Fixup Edition

### Breaking

* None.

### Experimental

* None.

### Enhancements

* Moved the validation of doc comments in local scopes out of
  `orphaned_doc_comment` and into a new opt-in `local_doc_comment` rule.  
  [JP Simard](https://github.com/jpsim)
  [#4573](https://github.com/realm/SwiftLint/issues/4573)

* SwiftLint's Swift Package Build Tool Plugin will now only scan files
  in the target being built.  
  [Tony Arnold](https://github.com/tonyarnold)
  [#4406](https://github.com/realm/SwiftLint/pull/4406)

### Bug Fixes

* Fix building with `swift build -c release`.  
  [JP Simard](https://github.com/jpsim)
  [#4559](https://github.com/realm/SwiftLint/issues/4559)
  [#4560](https://github.com/realm/SwiftLint/issues/4560)

* Fix false positives in `lower_acl_than_parent` when the nominal parent
  is an extension.  
  [Steffen Matthischke](https://github.com/heeaad)
  [#4564](https://github.com/realm/SwiftLint/issues/4564)

* Fix `minimum_fraction_length` handling in `number_separator`.  
  [JP Simard](https://github.com/jpsim)
  [#4576](https://github.com/realm/SwiftLint/issues/4576)

* Fix false positives in `closure_spacing`.  
  [JP Simard](https://github.com/jpsim)
  [#4565](https://github.com/realm/SwiftLint/issues/4565)
  [#4582](https://github.com/realm/SwiftLint/issues/4582)

* Fix line count calculation for multiline string literals.  
  [JP Simard](https://github.com/jpsim)
  [#4585](https://github.com/realm/SwiftLint/issues/4585)

* Fix false positives in `unused_closure_parameter` when using
  identifiers with backticks.  
  [JP Simard](https://github.com/jpsim)
  [#4588](https://github.com/realm/SwiftLint/issues/4588)

* Fix `type_name` regression where names with backticks would trigger
  violations.  
  [JP Simard](https://github.com/jpsim)
  [#4571](https://github.com/realm/SwiftLint/issues/4571)

## 0.50.0: Artisanal Clothes Pegs

### Breaking

* SwiftLint now requires Swift 5.7 or higher to build.  
  [JP Simard](https://github.com/jpsim)

* Exclude `weak_delegate` rule from autocorrection due to behavioral changes
  leading to potential undefined behavior or bugs.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#3577](https://github.com/realm/SwiftLint/issues/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](https://github.com/jpsim)

* Built-in SwiftLint rules are no longer marked as `public` in
  SwiftLintFramework. This only impacts the programmatic API for the
  SwiftLintFramework module.  
  [JP Simard](https://github.com/jpsim)

### 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](https://github.com/jpsim)
  [#4031](https://github.com/realm/SwiftLint/issues/4031)

* Rewrite 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](https://github.com/marcelofabri)
  [SimplyDanny](https://github.com/SimplyDanny)
  [JP Simard](https://github.com/jpsim)
  [#2915](https://github.com/realm/SwiftLint/issues/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](https://github.com/jpsim)

* Add ability to filter rules for `generate-docs` subcommand.  
  [kattouf](https://github.com/kattouf)

* Add new `excludes_trivial_init` configuration for `missing_docs` rule
  to exclude initializers without any parameters.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#4107](https://github.com/realm/SwiftLint/issues/4107)

* Add new `ns_number_init_as_function_reference` rule to catch `NSNumber.init`
  and `NSDecimalNumber.init` being used as function references since it
  can cause the wrong initializer to be used, causing crashes. See
  [this Swift issue](https://github.com/apple/swift/issues/51036) for more info.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Add `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](https://github.com/rcole34)

* Add methods from SE-0348 to `UnusedDeclarationRule`.  
  [JP Simard](https://github.com/jpsim)

* Include the configured `bind_identifier` in `self_binding` violation
  messages.  
  [JP Simard](https://github.com/jpsim)

* The `self_binding` rule now catches shorthand optional bindings (for example
  `if let self {}`) when using a `bind_identifier` different than `self`.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Add `library_content_provider` file type to `file_types_order` rule
  to allow `LibraryContentProvider` to be ordered independent from `main_type`.  
  [dahlborn](https://github.com/dahlborn)

* Add `test_parent_classes` option to `test_case_accessibility` rule, which
  allows detection in subclasses of XCTestCase.  
  [Martin Redington](https://github.com/mildm8nnered)
  [#4200](https://github.com/realm/SwiftLint/issues/4200)

* Add a new `shorthand_optional_binding` opt-in rule that triggers in Swift 5.7
  when a shadowing optional binding is created in an `if` or `guard` statement.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4202](https://github.com/realm/SwiftLint/issues/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](https://github.com/jpsim)

* Add Swift Package Build Tool Plugin with support for Swift Packages
  and Xcode projects.  
  [Johannes Ebeling](https://github.com/technocidal)
  [#3679](https://github.com/realm/SwiftLint/issues/3679)
  [#3840](https://github.com/realm/SwiftLint/issues/3840)

* Make `private_unit_test` rule correctable.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Disregard 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](https://github.com/SimplyDanny)

* Print violations in realtime if `--progress` and `--output` are both set.  
  [JP Simard](https://github.com/jpsim)

* Trigger `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()`)
  
  [SimplyDanny](https://github.com/SimplyDanny)

* Update `for_where` rule, adding a new configuration
  `allow_for_as_filter` to allow using `for in` with a single `if` inside
  when there's a `return` statement inside the `if`'s body.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#4040](https://github.com/realm/SwiftLint/issues/4040)

* `quick_discouraged_call`, `quick_discouraged_focused_test` and
  `quick_discouraged_pending_test` rules now trigger on subclasses of
  `QuickSpec`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#4420](https://github.com/realm/SwiftLint/issues/4420)

* The `type_name` rule now validates protocol declarations by default.
  You can opt-out by using the `validate_protocols` key in your configuration:

  ```yml
  type_name:
    validate_protocols: false
  ```

  [Marcelo Fabri](https://github.com/marcelofabri)
  [#4430](https://github.com/realm/SwiftLint/issues/4430)

* Report how much memory was used when `--benchmark` is specified.  
  [JP Simard](https://github.com/jpsim)

* Adds `NSError` to the list of types in `discouraged_direct_init`.  
  [jszumski](https://github.com/jszumski)
  [#4508](https://github.com/realm/SwiftLint/issues/4508)

* Fix SwiftLint support on Xcode Cloud.  
  [JagCesar](https://github.com/JagCesar)
  [westerlund](https://github.com/westerlund)
  [#4484](https://github.com/realm/SwiftLint/issues/4484)

* Add `no_magic_numbers` rule to avoid "Magic Numbers".  
  [Henrik Storch](https://github.com/thisisthefoxe)
  [#4031](https://github.com/realm/SwiftLint/issues/4024)

* Add new option `only_enforce_before_trivial_lines` to
  `vertical_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](https://github.com/benjamin-kramer)
  [#3940](https://github.com/realm/SwiftLint/issues/3940)

### Bug Fixes

* Respect `validates_start_with_lowercase` option when linting function names.  
  [Chris Brakebill](https://github.com/braker1nine)
  [#2708](https://github.com/realm/SwiftLint/issues/2708)

* Do not report variables annotated with `@NSApplicationDelegateAdaptor` and
  `@WKExtensionDelegateAdaptor` in `weak_delegate` rule.  
  [Till Hainbach](https://github.com/tillhainbach)
  [#3598](https://github.com/realm/SwiftLint/issues/3456)
  [#3611](https://github.com/realm/SwiftLint/issues/3611)

* Fix false-positives related to the `willMove` lifecycle method in
  `type_contents_order` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#3478](https://github.com/realm/SwiftLint/issues/3478)

* Do no longer autocorrect usage of `NSIntersectionRect` in `legacy_nsgeometry_functions`
  rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#3703](https://github.com/realm/SwiftLint/issues/3703)

* Fix Analyzer rules in Xcode 14.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4208](https://github.com/realm/SwiftLint/issues/4208)

* Add column for SourceKit usage to `rules` command.  
  [JP Simard](https://github.com/jpsim)

* Make `nsobject_prefer_isequal` rule work for nested `@objc` classes. Also consider
  the `@objcMembers` annotation.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Print fixed content at most once to STDOUT.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4211](https://github.com/realm/SwiftLint/issues/4211)

* Fix fatal error when content given via STDIN is corrected in the
  `trailing_newline` rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4234](https://github.com/realm/SwiftLint/issues/4234)

* Fix false-positives from `multiline_arguments_brackets` when a function call has a
  single line trailing closure.  
  [CraigSiemens](https://github.com/CraigSiemens)
  [#4510](https://github.com/realm/SwiftLint/issues/4510)

## 0.49.1: Buanderie Principale

_Note: The default branch for the SwiftLint git repository was renamed from
`master` to `main` on September 1st. Please update any code or automation
accordingly._

### Breaking

* None.

### Experimental

* None.

### Enhancements

* Add new `self_binding` opt-in rule to enforce that `self` identifiers are
  consistently re-bound to a common identifier name. Configure `bind_identifier`
  to the name you want to use. Defaults to `self`.  
  [JP Simard](https://github.com/jpsim)
  [#2495](https://github.com/realm/SwiftLint/issues/2495)

* Add `--output` option to lint and analyze commands to write to a file instead
  of to stdout.  
  [JP Simard](https://github.com/jpsim)
  [#4048](https://github.com/realm/SwiftLint/issues/4048)

* Add `--progress` flag to lint and analyze commands to show a live-updating
  progress bar instead of each file being processed.  
  [JP Simard](https://github.com/jpsim)

* `--fix` now works with `--use-stdin`, printing the output to STDOUT instead
  of crashing.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4127](https://github.com/realm/SwiftLint/issues/4127)

### Bug Fixes

* Migrate `empty_xctest_method` rule to SwiftSyntax fixing some false positives.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#3647](https://github.com/realm/SwiftLint/issues/3647)
  [#3691](https://github.com/realm/SwiftLint/issues/3691)

* Fix false positives in `redundant_discardable_let` when using
  `async let`.  
  [Martin Hosna](https://github.com/mhosna)
  [#4142](https://github.com/realm/SwiftLint/issues/4142)

* Consistently print error/info messages to stderr instead of stdout,
  which wasn't being done for errors regarding remote configurations.  
  [JP Simard](https://github.com/jpsim)

## 0.49.0: Asynchronous Defuzzer

_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](https://github.com/jpsim)

* Code Climate reports now use SHA256 strings as the issue fingerprint
  values.  
  [JP Simard](https://github.com/jpsim)

* Make `comma_inheritance` an opt-in rule.  
  [Steve Madsen](https://github.com/sjmadsen)
  [#4027](https://github.com/realm/SwiftLint/issues/4027)

* The `autocorrect` command that was deprecated in 0.43.0 has now been
  completely removed. Use `--fix` instead.  
  [JP Simard](https://github.com/jpsim)

* Remove the `AutomaticTestableRule` protocol. All examples listed in rules are
  now tested automatically to make sure they are correct.  
  [SimplyDanny](https://github.com/SimplyDanny)

* Deprecate the `--in-process-sourcekit` command line flag. SwiftLint now always
  uses an in-process SourceKit.  
  [JP Simard](https://github.com/jpsim)

### Experimental

* None.

### Enhancements

* Make `duplicate_imports` rule correctable. Fix `duplicate_imports` rule
  reporting redundant violations when more than one duplicate is present.  
  [Timofey Solonin](https://github.com/abdulowork)

* Support for building SwiftLint with bazel.  
  [JP Simard](https://github.com/jpsim)

* Support for writing custom private native rules when building with
  bazel.  
  [JP Simard](https://github.com/jpsim)
  [Keith Smiley](https://github.com/keith)
  [#3516](https://github.com/realm/SwiftLint/issues/3516)

* Make `comma` rule about 10x faster, finding some previously missed cases and
  fixing some previously wrong corrections.  
  [JP Simard](https://github.com/jpsim)

* Make `colon` rule about 7x faster, finding some previously missed cases.  
  [JP Simard](https://github.com/jpsim)

* Make `closure_spacing` rule about 9x faster, finding some previously missed
  cases and fixing some previously wrong corrections.  
  [JP Simard](https://github.com/jpsim)
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4090](https://github.com/realm/SwiftLint/issues/4090)

* Introduce new configuration option `include_compiler_directives` (`true` by
  default) for the `indentation_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](https://github.com/SimplyDanny)
  [#4030](https://github.com/realm/SwiftLint/issues/4030)

* Enable (recursive) globs in `included` file paths.  
  [sarastro-nl](https://github.com/sarastro-nl)

* Custom rules are now broken down per rule instead of in aggregate in
  `--benchmark`.  
  [JP Simard](https://github.com/jpsim)

* The `version` command now has an optional `--verbose` flag that prints out the
  full version info, notably the build ID, which can be used to determine if two
  `swiftlint` executables are identical.  
  [JP Simard](https://github.com/jpsim)

* Update documentation for `multiline_arguments_brackets` and
  `multiline_literal_brackets` to make it immediately obvious that common
  examples will trigger.  
  [chrisjf](https://github.com/chrisjf)
  [#4060](https://github.com/realm/SwiftLint/issues/4060)

* The `--compile-commands` argument can now parse SwiftPM yaml files produced
  when running `swift build` at `.build/{debug,release}.yaml`.  
  [JP Simard](https://github.com/jpsim)

* Add new configuration option `allowed_no_space_operators` to
  `operator_usage_whitespace` rule. It allows to specify custom operators which
  shall not be considered by the rule.  
  [imben123](https://github.com/imben123)

* Add new protocols to remove some boilerplate involved in writing
  SwiftSyntax-based rules.  
  [JP Simard](https://github.com/jpsim)

### Bug Fixes

* Fix false positive in `self_in_property_initialization` rule when using
  closures inside `didSet` and other accessors.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#4041](https://github.com/realm/SwiftLint/issues/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](https://github.com/OrEliyahu)
  [#4012](https://github.com/realm/SwiftLint/issues/4012)

* Fix false positive in `yoda_condition` rule by basing it on SwiftSyntax.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#4081](https://github.com/realm/SwiftLint/issues/4081)

* Fix false negatives in `first_where` rule when filtering array of dictionaries
  with String keys.  
  [KS1019](https://github.com/KS1019)

* Fix broken correction for `explicit_init` rule.  
  [KS1019](https://github.com/KS1019)

## 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 for `lint`/`analyze` commands. Prefer the
  positional paths that can be added last to both commands.  
  [SimplyDanny](https://github.com/SimplyDanny)

### Experimental

* None.

### Enhancements

* Support `iOSApplicationExtension`, `macOSApplicationExtension`,
  `watchOSApplicationExtension`, and `tvOSApplicationExtension` identifiers
  in the `deployment_target` rule. To configure the rule for these identifiers,
  you need to use the keys `iOSApplicationExtension_deployment_target`,
  `macOSApplicationExtension_deployment_target`,
  `watchOSApplicationExtension_deployment_target`, and
  `tvOSApplicationExtension_deployment_target`. Extentions default to
  their counterparts unless they are explicitly defined.  
  [tahabebek](https://github.com/tahabebek)
  [#4004](https://github.com/realm/SwiftLint/issues/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 by `return_arrow_whitespace`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3965](https://github.com/realm/SwiftLint/issues/3965)
  [#3668](https://github.com/realm/SwiftLint/issues/3668)
  [#2728](https://github.com/realm/SwiftLint/issues/2728)

* Support arrays for the `included` and `excluded` options when defining
  a custom rule.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Add back `void_function_in_ternary` opt-in rule to warn against using
  a ternary operator to call `Void` functions.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Support `UIEdgeInsets` type in `prefer_zero_over_explicit_init` rule.  
  [KokiHirokawa](https://github.com/KokiHirokawa)
  [#3986](https://github.com/realm/SwiftLint/issues/3986)

### Bug Fixes

* Ignore array types in `syntactic_sugar` rule if their associated `Index` is
  accessed.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#3502](https://github.com/realm/SwiftLint/issues/3502)

* Prevent crash for private types named `_` in `type_name` rules.  
  [sinoru](https://github.com/sinoru)
  [#3971](https://github.com/realm/SwiftLint/issues/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](https://github.com/SimplyDanny)
  [#3975](https://github.com/realm/SwiftLint/issues/3975)

* Update result builder methods in `unused_declaration` rule fixing some
  false-positives.  
  [SimplyDanny](https://github.com/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](https://github.com/SimplyDanny)
  [#3975](https://github.com/realm/SwiftLint/issues/3975)

* Make sure that include paths prefixed with the name of the original path
  are included in the analysis.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#3705](https://github.com/realm/SwiftLint/issues/3705)

* Do not trigger `unavailable_condition` rule if other `#(un)available`
  checks are involved.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#3985](https://github.com/realm/SwiftLint/issues/3985)

* Update `nimble_operator` to support the operators for `beNil()`.  
  [CraigSiemens](https://github.com/CraigSiemens)

* Avoid false-positive in `let_var_whitespace` rule by allowing custom
  attributes on lines directly before let/var declarations.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#2980](https://github.com/realm/SwiftLint/issues/2980)

## 0.47.1: Smarter Appliance

### Breaking

* None.

### Experimental

* None.

### Enhancements

* Add type-checked analyzer rule version of `ArrayInitRule` named
  `TypesafeArrayInitRule` with identifier `typesafe_array_init` that
  avoids the false positives present in the lint rule.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#3749](https://github.com/realm/SwiftLint/issues/3749)

* Add the `--in-process-sourcekit` command line flag to `lint` and `analyze`
  commands, which has the same effect as setting the `IN_PROCESS_SOURCEKIT`
  environment variable.  
  [Juozas Valancius](https://github.com/juozasvalancius)

* Add a new `artifactbundle` release asset containing `swiftlint` binaries for
  x86 & arm64 macOS.  
  [Juozas Valancius](https://github.com/juozasvalancius)
  [#3840](https://github.com/realm/SwiftLint/issues/3840)

* Add back `return_value_from_void_function` opt-in rule to warn against using
  `return <expression>` in a function that returns `Void`.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Don't skip autocorrect on files that have parser warnings. Only files with
  errors reported by the Swift parser will be skipped.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3343](https://github.com/realm/SwiftLint/issues/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](https://github.com/rcole34)

* Add `unavailable_condition` rule to prefer using `if #unavailable` instead of
  `if #available` with an empty body and an `else` condition when using
  Swift 5.6 or later.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3897](https://github.com/realm/SwiftLint/issues/3897)

* Add `comma_inheritance` rule to validate that inheritance clauses use commas
  instead of `&`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3950](https://github.com/realm/SwiftLint/issues/3950)

### Bug Fixes

* Fix false positives in `unused_closure_parameter` when using parameters with
  backticks.  
  [JP Simard](https://github.com/jpsim)
  [#3628](https://github.com/realm/SwiftLint/issues/3628)

* Improved the `syntactic_sugar` rule's detection accuracy and fixed some
  corrections leading to invalid code.  
  [Paul Taykalo](https://github.com/PaulTaykalo)
  [#3866](https://github.com/realm/SwiftLint/issues/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](https://github.com/jpsim)
  [#3920](https://github.com/realm/SwiftLint/issues/3920)

* Error by default on bad expiring todo date formatting.  
  [Christopher Hale](https://github.com/chrispomeroyhale)
  [#3636](https://github.com/realm/SwiftLint/pull/3626)

* Lint/analyze all files listed in the command even if the `--path` option is
  used.  
  [coffmark](https://github.com/coffmark)

## 0.47.0: Smart Appliance

### Breaking

* SwiftLint now requires Swift 5.5 or higher to build.  
  [JP Simard](https://github.com/jpsim)

* 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. The `SwiftLint` podspec is still supported.  
  [JP Simard](https://github.com/jpsim)

* SwiftLint now requires at least Swift 5.0 installed in order to lint files.  
  [Marcelo Fabri](https://github.com/marcelofabri)

### 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](https://github.com/jpsim)

### Enhancements

* Empty files no longer trigger any violations.  
  [JP Simard](https://github.com/jpsim)
  [#3854](https://github.com/realm/SwiftLint/issues/3854)

* Support recursive globs.  
  [funzin](https://github.com/funzin)
  [JP Simard](https://github.com/jpsim)
  [#3789](https://github.com/realm/SwiftLint/issues/3789)
  [#3891](https://github.com/realm/SwiftLint/issues/3891)

* The `legacy_random` rule is now enabled by default.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* The `deployment_target` rule now supports the `#unavailable` syntax
  added in Swift 5.6.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3896](https://github.com/realm/SwiftLint/issues/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](https://github.com/juozasvalancius)

* Add ability to run only one (focused) example.  
  [PaulTaykalo](https://github.com/PaulTaykalo)
  [#3911](https://github.com/realm/SwiftLint/issues/3911)

### Bug Fixes

* Extend `class_delegate_protocol` to correctly identify cases with the protocol
  body opening brace on a new line.  
  [Tobisaninfo](https://github.com/Tobisaninfo)

* Fix SwiftLint.pkg installer installing multiple copies of SwiftLint.  
  [JP Simard](https://github.com/jpsim)
  [#3815](https://github.com/realm/SwiftLint/issues/3815)
  [#3887](https://github.com/realm/SwiftLint/issues/3887)

## 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](https://github.com/marcelofabri)
  [#3846](https://github.com/realm/SwiftLint/issues/3846)

* Fix false negatives in `closure_parameter_position` rule with Swift 5.6.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3845](https://github.com/realm/SwiftLint/issues/3845)

* Fix regression in `last_where` rule when using Swift 5.6.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3847](https://github.com/realm/SwiftLint/issues/3847)

* Fix regression in `unused_import` rule when using Swift 5.6.  
  [JP Simard](https://github.com/jpsim)
  [#3849](https://github.com/realm/SwiftLint/issues/3849)

* Fix regression in `trailing_closure` rule when using Swift 5.6.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3848](https://github.com/realm/SwiftLint/issues/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](https://github.com/SimplyDanny)
  [#3804](https://github.com/realm/SwiftLint/issues/3804)

* Ignore MARK in multiline comment, fixing cases that would previously crash or
  produce invalid results when correcting.  
  [goranche](https://github.com/goranche)
  [#1749](https://github.com/realm/SwiftLint/issues/1749)
  [#3841](https://github.com/realm/SwiftLint/issues/3841)

* Fix false positive in `EmptyEnumArgumentsRule` rule when using Swift 5.6.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3850](https://github.com/realm/SwiftLint/issues/3850)

## 0.46.3: Detergent Spill

### Breaking

* None.

### Experimental

* None.

### Enhancements

* Change fingerprint generation in `CodeClimateReporter.swift` to use
  the relative file path to better support CI/CD on multiple machines.  
  [HA Pors](https://github.com/hpors)

### Bug Fixes

* Fix crash in the `closure_end_indentation` rule when linting with
  Swift 5.6.  
  [JP Simard](https://github.com/jpsim)
  [#3830](https://github.com/realm/SwiftLint/issues/3830)
  
* Fix default rules section in documentation.  
  [Natan Rolnik](https://github.com/natanrolnik)
  [#3857](https://github.com/realm/SwiftLint/pull/3857)

## 0.46.2: Detergent Package

### Breaking

* None.

### Experimental

* None.

### Enhancements

* None.

### Bug Fixes

* Fix SwiftLint.pkg installer on macOS 11 or later.  
  [JP Simard](https://github.com/jpsim)
  [#3815](https://github.com/realm/SwiftLint/issues/3815)

* Ignore `prefer_self_in_static_references` rule in extensions
  generally.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#3775](https://github.com/realm/SwiftLint/issues/3775)

* Fix `class_delegate_protocol` false positives when using `where`
  clause.  
  [Steven Magdy](https://github.com/StevenMagdy)

## 0.46.1: Detergent Container

### Breaking

* The `weak_delegate` rule has been opt-in due to its high false
  positive rate.  
  [JP Simard](https://github.com/jpsim)
  [#2786](https://github.com/realm/SwiftLint/issues/2786)

### Experimental

* None.

### Enhancements

* Official Docker images are now available. See the
  [Docker section of the README](README.md#docker) for usage
  instructions.  
  [Francisco Javier Trujillo Mata](https://github.com/fjtrujy)

* Allow `unused_setter_value` for overrides.  
  [Adrian Debbeler](https://github.com/grosem)
  [#2585](https://github.com/realm/SwiftLint/issues/2585)

### Bug Fixes

* Fix `convenience_type` false positives when using actors.  
  [JP Simard](https://github.com/jpsim)
  [#3770](https://github.com/realm/SwiftLint/issues/3770)

* Fix false positives in the `prefer_self_in_static_references` rule.  
  [SimplyDanny](https://github.com/simplydanny)
  [#3768](https://github.com/realm/SwiftLint/issues/3768)

* Fix the regex for expiring TODO comments.  
  [Sergei Shirokov](https://github.com/serges147)
  [#3767](https://github.com/realm/SwiftLint/issues/3767)

* Fix crash when parsing multi-line attributes with the `attributes`
  rule.  
  [JP Simard](https://github.com/jpsim)
  [#3761](https://github.com/realm/SwiftLint/issues/3761)

* Fix false positives in `unused_closure_parameter` when using
  list element bindings in SwiftUI.  
  [Paul Williamson](https://github.com/squarefrog)
  [#3790](https://github.com/realm/SwiftLint/issues/3790)

* Fix the cache path not being properly set when using nested
  configurations.  
  [Andrés Cecilia Luque](https://github.com/acecilia)

## 0.45.1: Clothes Drying Hooks

### Breaking

* None.

### Experimental

* None.

### Enhancements

* Update Rule list documentation to distinguish between opt-in and
  on-by-default rules.  
  [Benny Wong](https://github.com/bdotdub)

* Add opt-in `prefer_self_in_static_references` rule to warn if the
  type name is used to reference static members the same type.
  Prefer using `Self` instead which is not affected by renamings.  
  [SimplyDanny](https://github.com/simplydanny)

* Add support for running SwiftLint as a
  [pre-commit](https://pre-commit.com/) hook.  
  [Jesse Crocker](https://github.com/JesseCrocker)
  [Hannes Ljungberg](https://github.com/hannseman)

### Bug Fixes

* Fix `unused_import` rule incorrectly considering `SwiftShims` as a
  used import.  
  [JP Simard](https://github.com/jpsim)

* Fix false positives on `large_tuple` rule when using `async` closures.  
  [Kaitlin Mahar](https://github.com/kmahar)
  [#3753](https://github.com/realm/SwiftLint/issues/3753)

* Fix false positive on `legacy_objc_type` rule when using
  types with names that start with a legacy type name.  
  [Isaac Ressler](https://github.com/iressler)
  [#3555](https://github.com/realm/SwiftLint/issues/3555)

## 0.45.0: Effectful Apparel

### Breaking

* SwiftLint now requires Swift 5.4 or higher to build.  
  [JP Simard](https://github.com/jpsim)

### Experimental

* None.

### Enhancements

* Add `self_in_property_initialization` rule to catch uses of `self`
  inside an inline closure used for initializing a variable. In this case,
  `self` refers to the `NSObject.self` method and likely won't be what you
  expect. You can make the variable `lazy` to be able to refer to the current
  instance with `self` or use `MyClass.self` if you really want to reference
  the method.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Exclude `id` from `identifier_name` by default.  
  [Artem Garmash](https://github.com/agarmash)
  [#3651](https://github.com/realm/SwiftLint/issues/3651)

* Handle `get async` and `get throws` (introduced in Swift 5.5) in the
  `implicit_getter` rule.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3684](https://github.com/realm/SwiftLint/issues/3684)

* Speed up explicit type interface rule.  
  [PaulTaykalo](https://github.com/PaulTaykalo)
  [#3745](https://github.com/realm/SwiftLint/issues/3745)

* Speed up analyzer rules.  
  [PaulTaykalo](https://github.com/PaulTaykalo)
  [#3747](https://github.com/realm/SwiftLint/issues/3747)

### Bug Fixes

* Fix a bug with the `missing_docs` rule where
  `excludes_inherited_types` would not be set.  
  [Ben Fox](https://github.com/bdfox325)

* Fix redundant_optional_initialization autocorrect broken
  in case observer's brace exists.  
  [Naruki Chigira](https://github.com/naru-jpn)
  [#3718](https://github.com/realm/SwiftLint/issues/3718)

* Fix a false positive in the `unneeded_break_in_switch` rule when
  using `do/catch`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3724](https://github.com/realm/SwiftLint/issues/3724)

* Speed up Computed Accessors Order rule.  
  [PaulTaykalo](https://github.com/PaulTaykalo)
  [#3727](https://github.com/realm/SwiftLint/issues/3727)

* [Colon Rule] Fix case when comment is used in function call.  
  [PaulTaykalo](https://github.com/PaulTaykalo)
  [#3740](https://github.com/realm/SwiftLint/issues/3740)

## 0.44.0: Travel Size Lint Roller

### Breaking

* SwiftLint now requires Swift 5.3 or higher to build.  
  [JP Simard](https://github.com/jpsim)

### Experimental

* None.

### Enhancements

* Add configuration options to `missing_docs` rule:
  * `excludes_extensions` defaults to `true` to skip reporting violations
     for extensions with missing documentation comments.
  * `excludes_inherited_types` defaults to `true` to skip reporting
     violations for inherited declarations, like subclass overrides.

  [Ben Fox](https://github.com/bdfox325)

* Fix false negative on `redundant_optional_initialization` rule when variable
  has observers.  
  [Isaac Ressler](https://github.com/iressler)
  [#3621](https://github.com/realm/SwiftLint/issues/3621)

* Make `test_case_accessibility` rule identify invalid test functions
  with parameters.  
  [Keith Smiley](https://github.com/keith)
  [#3612](https://github.com/realm/SwiftLint/pull/3612)

* Add `duplicated_key_in_dictionary_literal` rule to warn against duplicated
  keys in dictionary literals.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Fix the rule name from "Colon" to "Colon Spacing" to improve phrasing.  
  [Radu](https://github.com/raduciobanu002)
  [#3587](https://github.com/realm/SwiftLint/issues/3587)

* Add `discouraged_none_name` opt-in rule to discourage naming cases and
  static/class members "none", which can conflict with Swift's
  `Optional<T>.none` when checking equality.  
  [Kane Cheshire](https://github.com/kanecheshire)
  [#3624](https://github.com/realm/SwiftLint/issues/3624)

* Improve language and positioning of `file_length` warnings when
  `ignore_comment_only_lines: true`.  
  [Steven Grosmark](https://github.com/g-mark)
  [#3654](https://github.com/realm/SwiftLint/pull/3654)

* Add `anonymous_argument_in_multiline_closure` opt-in rule to validate that
  named arguments are used in closures that span multiple lines.  
  [Marcelo Fabri](https://github.com/marcelofabri)

### Bug Fixes

* Fix false positives in `empty_enum_arguments` rule when comparing values
  with a static member (e.g. `if number == .zero`).  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3562](https://github.com/realm/SwiftLint/issues/3562)

* Fix the regex for expiring-todos.  
  [namolnad](https://github.com/namolnad)
  [#3597](https://github.com/realm/SwiftLint/pull/3597)

* Fix `type_contents_order` initializer detection.  
  [StevenMagdy](https://github.com/StevenMagdy)

* Fix autocorrect when there's no space between the tuple the `in` keyword
  on `unneeded_parentheses_in_closure_argument` rule.  
  [p-x9](https://github.com/p-x9)
  [#3633](https://github.com/realm/SwiftLint/issues/3633)

* Fix `unused_capture_list`, `empty_enum_arguments`, `implicit_return` and
  `explicit_type_interface` rules when using Swift 5.4.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3615](https://github.com/realm/SwiftLint/issues/3615)
  [#3685](https://github.com/realm/SwiftLint/issues/3685)

* Fix Xcode build logs with spaces in paths preventing `analyze` from running.  
  [adamawolf](https://github.com/adamawolf)

## 0.43.1: Laundroformat

### Breaking

* None.

### Experimental

* None.

### Enhancements

* None.

### Bug Fixes

* Fix the File Length rule name.  
  [onato](https://github.com/onato)
  [#3560](https://github.com/realm/SwiftLint/issues/3560)

* Re-add `--format` flag to reformat Swift files using SourceKit.
  Only applied with `--fix`/`--autocorrect`.  
  [JP Simard](https://github.com/jpsim)
  [#3571](https://github.com/realm/SwiftLint/issues/3571)

## 0.43.0: Clothes Line Interface

### Breaking

* The command line syntax has slightly changed due to migrating from the
  Commandant command line parsing library to swift-argument-parser.
  For the most part the breaking changes are all to make the syntax more
  unix compliant and intuitive to use. For example, commands such as
  `swiftlint --help` or `swiftlint -h` now work as expected.
  The help output from various commands has greatly improved as well.
  Notably: `swiftlint autocorrect` was removed in favor of
  `swiftlint --fix`.
  Previous commands should continue to work temporarily to help with the
  transition. Please let us know if there's a command that no longer
  works and we'll attempt to add a bridge to help with its transition.  
  [JP Simard](https://github.com/jpsim)

* Configuration files now consistently have their `included`/`excluded`
  relative file paths applied relative to their location in the file
  system. Previously the root configuration file applied these relative
  to the current working directory, but nested configurations applied
  these to their location in the file system.  
  [Frederick Pietschmann](https://github.com/fredpi)
  [JP Simard](https://github.com/jpsim)

* The `discarded_notification_center_observer` is now opt-in due to some
  difficult to resolve false positives, such as
  [#3498](https://github.com/realm/SwiftLint/issues/3498).  
  [JP Simard](https://github.com/jpsim)

### Experimental

* None.

### Enhancements

* Added `allows_single_line` option in `multiline_parameters` rule
  configuration. Defaults to `true`. This enforces parameters in a method
  with multiple parameters to always be in different lines.  
  [Otavio Cordeiro](https://github.com/otaviocc)

* Support relative paths in compilation databases for SwiftLint analyzer
  rules.  
  [JP Simard](https://github.com/jpsim)

* Add opt-in rule `discouraged_assert` to encourage the use of
  `assertionFailure()` and/or `preconditionFailure()` over
  `assert(false)`.  
  [Otavio Cordeiro](https://github.com/otaviocc)

* Adds `balanced_xctest_lifecycle` opt-in rule to enforce balanced `setUp`
  and `tearDown` methods in a test class.  
  [Otavio Cordeiro](https://github.com/otaviocc)
  [#3452](https://github.com/realm/SwiftLint/issues/3452)

* Tweak the auto-correction result console output for clarity.  
  [mokagio](https://github.com/mokagio)
  [#3522](https://github.com/realm/SwiftLint/issues/3522)

* Allow configuring related USRs to skip in UnusedDeclarationRule by
  specifying a list of USRs in the `related_usrs_to_skip` key.
  For example you might have custom source tooling that does something
  with types conforming to a procotol even if that type is never
  explicitly referenced by other code.  
  [JP Simard](https://github.com/jpsim)

* Make `strong_iboutlet` rule correctable.  
  [MaxHaertwig](https://github.com/maxhaertwig)

* Add `legacy_objc_type` opt-in rule to warn against using
  bridged Objective-C reference types instead of Swift value types.  
  [Blake](https://github.com/72A12F4E)
  [#2758](https://github.com/realm/SwiftLint/issues/2758)

* Support Swift Playground control comments in the `comment_spacing`
  rule.  
  [Thomas Goyne](https://github.com/tgoyne)

* [Internal] Integrate OS Signposts to help profile SwiftLint
  performance.  
  [jpsim](https://github.com/jpsim)

* Update CodeClimateReporter to produce relative paths.  
  [bmwalters](https://github.com/bmwalters)

* Add Bool violation reporting in `redundant_type_annotation`.  
  [Artem Garmash](https://github.com/agarmash)
  [#3423](https://github.com/realm/SwiftLint/issues/3423)

* Add a new `capture_variable` analyzer rule to warn about listing a
  non-constant (`var`) variable in a closure's capture list. This
  captures the variable's value at closure creation time instead of
  closure call time, which may be unexpected.  
  [Laszlo Kustra](https://github.com/kustra)

* Log references to a specified module when running the `unused_import`
  by setting the `SWIFTLINT_LOG_MODULE_USAGE=<module-name>` environment
  variable when running analyze.  
  [jpsim](https://github.com/jpsim)

* Add opt-in rule `private_subject` rule which warns against
  public Combine subjects.  
  [Otavio Cordeiro](https://github.com/otaviocc)

### Bug Fixes

* Fix `custom_rules` merging when the parent configuration is based on
  `only_rules`.  
  [Frederick Pietschmann](https://github.com/fredpi)
  [#3468](https://github.com/realm/SwiftLint/issues/3468)

* Fix misleading warnings about rules defined in the `custom_rules` not
  being available (when using multiple configurations).  
  [Frederick Pietschmann](https://github.com/fredpi)
  [#3472](https://github.com/realm/SwiftLint/issues/3472)

* Fix bug that prevented the reconfiguration of a custom rule in a child
  config.  
  [Frederick Pietschmann](https://github.com/fredpi)
  [#3477](https://github.com/realm/SwiftLint/issues/3477)

* Fix typos in configuration options for `file_name` rule.  
  [advantis](https://github.com/advantis)

* Fix issue that prevented the inclusion of a configuration file from a
  parent folder.  
  [Frederick Pietschmann](https://github.com/fredpi)
  [#3485](https://github.com/realm/SwiftLint/issues/3485)

* Fix violation location and misplaced corrections for some function
  references in `explicit_self` rule.  
  [JP Simard](https://github.com/jpsim)

* Fix false positives with result builders in `unused_declaration`.  
  [JP Simard](https://github.com/jpsim)

* Find more unused declarations in `unused_declaration`.  
  [JP Simard](https://github.com/jpsim)

* Fix parsing xcode logs for analyzer rules for target names with
  spaces.  
  [JP Simard](https://github.com/jpsim)
  [#3021](https://github.com/realm/SwiftLint/issues/3021)

## 0.42.0: He Chutes, He Scores

### Breaking

* SwiftLint now requires Swift 5.2 or higher to build.  
  [JP Simard](https://github.com/jpsim)

* SwiftLintFramework can no longer be integrated as a Carthage
  dependency.  
  [JP Simard](https://github.com/jpsim)
  [#3412](https://github.com/realm/SwiftLint/issues/3412)

* `SwiftLint.xcworkspace` and `SwiftLint.xcproject` have been completely
  removed. You can still use Xcode to develop SwiftLint by opening it as
  a Swift Package by typing `xed .` or `xed Package.swift` from your
  shell.  
  [JP Simard](https://github.com/jpsim)
  [#3412](https://github.com/realm/SwiftLint/issues/3412)

* Renamed `statement_level` to `function_level` in `nesting` rule
  configuration.  
  [Skoti](https://github.com/Skoti)

* Separated `type_level` and `function_level` counting in `nesting`
  rule.  
  [Skoti](https://github.com/Skoti)
  [#1151](https://github.com/realm/SwiftLint/issues/1151)

* `function_level` in `nesting` rule defaults to 2 levels.  
  [Skoti](https://github.com/Skoti)

* Added `check_nesting_in_closures_and_statements` in `nesting` rule to
  search for nested types and functions within closures and statements.
  Defaults to `true`.  
  [Skoti](https://github.com/Skoti)

* Renamed `OverridenSuperCallConfiguration` to
  `OverriddenSuperCallConfiguration`.  
  [Bryan Ricker](https://github.com/bricker)
  [#3426](https://github.com/realm/SwiftLint/pull/3426)

### Experimental

* None.

### Enhancements

* Don't report `@UIApplicationDelegateAdaptor` statements in `weak-delegate` rule.  
  [Richard Turton](https://github.com/jrturton)
  [#3286](https://github.com/realm/SwiftLint/issues/3456)

* Don't report `unavailable_function` violations for functions returning
  `Never`.  
  [Artem Garmash](https://github.com/agarmash)
  [#3286](https://github.com/realm/SwiftLint/issues/3286)

* Added `always_allow_one_type_in_functions` option in `nesting` rule
  configuration. Defaults to `false`. This allows to nest one type
  within a function even if breaking the maximum `type_level`.  
  [Skoti](https://github.com/Skoti)
  [#1151](https://github.com/realm/SwiftLint/issues/1151)

* Add option to specify a `child_config` / `parent_config` file
  (local or remote) in any SwiftLint configuration file.
  Allow passing multiple configuration files via the command line.
  Improve documentation for multiple configuration files.  
  [Frederick Pietschmann](https://github.com/fredpi)
  [#1352](https://github.com/realm/SwiftLint/issues/1352)

* Add an `always_keep_imports` configuration option for the
  `unused_import` rule.  
  [Keith Smiley](https://github.com/keith)

* Add `comment_spacing` rule.  
  [Noah Gilmore](https://github.com/noahsark769)
  [#3233](https://github.com/realm/SwiftLint/issues/3233)

* Add `codeclimate` reporter to generate JSON reports in codeclimate
  format. Could be used for GitLab Code Quality MR Widget.  
  [jkroepke](https://github.com/jkroepke)
  [#3424](https://github.com/realm/SwiftLint/issues/3424)

* Add an `override_allowed_terms` configuration parameter to the
  `inclusive_language` rule, with a default value of `mastercard`.  
  [Dalton Claybrook](https://github.com/daltonclaybrook)
  [#3415](https://github.com/realm/SwiftLint/issues/3415)

### Bug Fixes

* Remove `@IBOutlet` and `@IBInspectable` from UnusedDeclarationRule.  
  [Keith Smiley](https://github.com/keith)
  [#3184](https://github.com/realm/SwiftLint/issues/3184)

## 0.41.0: World’s Cleanest Voting Booth

### Breaking

* Changed behavior of `strict` option on `lint` and `analyze` to treat
  all warnings as errors instead of only changing the exit code.  
  [Jeehut](https://github.com/Jeehut)
  [#3312](https://github.com/realm/SwiftLint/issues/3312)

* Removed the `unneeded_notification_center_removal` rule because it was
  based on an incorrect premise.  
  [JP Simard](https://github.com/jpsim)
  [#3338](https://github.com/realm/SwiftLint/issues/3338)

* The `whitelist_rules` configuration key has been renamed to
  `only_rules`.  
  [Dalton Claybrook](https://github.com/daltonclaybrook)

### Experimental

* None.

### Enhancements

* Add `use-alternative-excluding` option to speed up linting in cases
  described in [#3325](https://github.com/realm/SwiftLint/pull/3325).
  This option yields different exclusion behavior.  
  [JohnReeze](https://github.com/JohnReeze)
  [#3304](https://github.com/realm/SwiftLint/issues/3304)

* Add `test_case_accessibility` rule.  
  [Keith Smiley](https://github.com/keith)
  [#3376](https://github.com/realm/SwiftLint/issues/3376)

* Add more details to `CONTRIBUTING.md`.  
  [mknabbe](https://github.com/mknabbe)
  [#1280](https://github.com/realm/SwiftLint/issues/1280)

* Remove `@IBOutlet` and `@IBInspectable` from UnusedDeclarationRule.  
  [Keith Smiley](https://github.com/keith)
  [#3184](https://github.com/realm/SwiftLint/issues/3184)

* Add `allow_multiline_func` configuration option to `opening_brace`
  rule, to allow placing `{` on new line in case of multiline function.
  Defaults to `false`.  
  [Zsolt Kovács](https://github.com/lordzsolt)
  [#1921](https://github.com/realm/SwiftLint/issues/1921)

* Update the `nslocalizedstring_key` rule to validate the `comment`
  argument in addition to the `key` argument.  
  [Dalton Claybrook](https://github.com/daltonclaybrook)
  [#3334](https://github.com/realm/SwiftLint/issues/3334)

* Add `inclusive_language` rule to encourage the use of inclusive
  language that avoids discrimination against groups of people.  
  [Dalton Claybrook](https://github.com/daltonclaybrook)

* Add `prefer_nimble` opt-in rule to encourage using Nimble matchers
  over the XCTest ones.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3293](https://github.com/realm/SwiftLint/issues/3293)

* `unused_closure_parameter` rule now validates closures outside of
  function calls.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1082](https://github.com/realm/SwiftLint/issues/1082)

* Improve documentation for running SwiftLint as Xcode build phase.  
  [Christian Mitteldorf](https://github.com/christiankm)
  [#3169](https://github.com/realm/SwiftLint/issues/3169)

* Add `skip_aligned_constants` (defaults to `true`) and
  `lines_look_around` (defaults to `2`) configuration parameters to the
  `operator_usage_whitespace` rule.  
  [Paul Taykalo](https://github.com/PaulTaykalo)
  [#3388](https://github.com/realm/SwiftLint/issues/3388)

### Bug Fixes

* Fix parsing of Xcode 12 compiler logs for analyzer rules.  
  [JP Simard](https://github.com/jpsim)
  [#3365](https://github.com/realm/SwiftLint/issues/3365)

* Fix some SwiftUI unused declaration rule false positives.  
  [JP Simard](https://github.com/jpsim)
  [#3365](https://github.com/realm/SwiftLint/issues/3365)

* Fix some false positives in rule `explicit_self`.  
  [Sven Münnich](https://github.com/svenmuennich)

* Fix incorrect autocorrection in `prefer_zero_over_explicit_init` rule.  
  [Paul Taykalo](https://github.com/PaulTaykalo)

* Rule `unused_capture_list` should not be triggered by unowned self
  keyword.  
  [hank121314](https://github.com/hank121314)
  [#3389](https://github.com/realm/SwiftLint/issues/3389)

* Fix severity configuration for `indentation_width`.  
  [Samasaur1](https://github.com/Samasaur1)
  [#3346](https://github.com/realm/SwiftLint/issues/3389)

* Fix DuplicateImportsRule's support for import attributes.  
  [Keith Smiley](https://github.com/keith)
  [#3402](https://github.com/realm/SwiftLint/issues/3402)

* Allow "allowed symbols" as first character in `identifier_name`.  
  [JP Simard](https://github.com/jpsim)
  [#3306](https://github.com/realm/SwiftLint/issues/3306)

* Fix false positives with parameterized attributes in `attributes`.  
  [JP Simard](https://github.com/jpsim)
  [#3316](https://github.com/realm/SwiftLint/issues/3316)

* Fix some missed cases in rule `unavailable_function`.  
  [Quinn Taylor](https://github.com/quinntaylor)
  [#3374](https://github.com/realm/SwiftLint/issues/3374)

* Fix incorrect violation message for line length violations.  
  [JP Simard](https://github.com/jpsim)
  [#3333](https://github.com/realm/SwiftLint/issues/3333)

* Fix inconsistency in `operator_usage_whitespace` rule.  
  [Paul Taykalo](https://github.com/PaulTaykalo)
  [#3321](https://github.com/realm/SwiftLint/issues/3321)

* Fix false positives in `convenience_type` rule for types that cannot
  be converted to enums.  
  [ZevEisenberg](https://github.com/ZevEisenberg)
  [#3033](https://github.com/realm/SwiftLint/issues/3033)

* Fix finding a nested config when a single file path is passed.  
  [Seth Friedman](https://github.com/sethfri)

* Fix incorrect calculation of the root path when a directory in the
  tree is passed in as a path argument.  
  [Seth Friedman](https://github.com/sethfri)
  [#3383](https://github.com/realm/SwiftLint/issues/3383)

* Fix rare false positive in `toggle_bool` rule.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3398](https://github.com/realm/SwiftLint/issues/3398)

## 0.40.3: Greased Up Drum Bearings

### Breaking

* None.

### Experimental

* None.

### Enhancements

* Make the `unused_declaration` rule run 3-5 times faster, and
  enable it to detect more occurrences of unused declarations.  
  [JP Simard](https://github.com/jpsim)

* Remove unneeded internal locking overhead, leading to increased
  performance in multithreaded operations.  
  [JP Simard](https://github.com/jpsim)

* Skip correcting file if the swift parser reports a warning or an
  error.  
  [JP Simard](https://github.com/jpsim)
  [#3343](https://github.com/realm/SwiftLint/issues/3343)

### Bug Fixes

* Rule `unused_capture_list` should not be triggered by self keyword.  
  [hank121314](https://github.com/hank121314)
  [#2367](https://github.com/realm/SwiftLint/issues/3267)

* Rule `multiple_closures_with_trailing_closure` no longer triggers when Swift
  5.3's 'multiple trailing closures' feature is used.  
  [Jumhyn](https://github.com/jumhyn)
  [#3295](https://github.com/realm/SwiftLint/issues/3295)

## 0.40.2: Demo Unit

### Breaking

* None.

### Experimental

* None.

### Enhancements

* Improve description for `empty_enum_arguments`.  
  [Lukas Schmidt](https://github.com/lightsprint09)

* Add support for `excluded_match_kinds` custom rule config parameter.  
  [Ryan Demo](https://github.com/ryandemo)

### Bug Fixes

* None.

## 0.40.1: A Baffling Response

### Breaking

* None.

### Experimental

* None.

### Enhancements

* Add support for params files for file paths.  
  [keith](https://github.com/keith)

### Bug Fixes

* Fix .swift-version to use Swift 5.1.  
  [cfiken](https://github.com/cfiken)
  [#3297](https://github.com/realm/SwiftLint/issues/3297)

* Fix test `testDetectSwiftVersion` for Swift 5.2.5.  
  [cfiken](https://github.com/cfiken)
  [#3299](https://github.com/realm/SwiftLint/pull/3299)

## 0.40.0: Washable Mask

### Breaking

* SwiftLint now requires Swift 5.1 or higher to build.  
  [JP Simard](https://github.com/jpsim)

* Improve compile commands json file validation. If you previously
  provided invalid files or arguments, the command will now abort.  
  [Keith Smiley](https://github.com/keith)

### Experimental

* None.

### Enhancements

* JUnit reporter for GitLab artifact:report:junit with better representation of
  found issues.  
  [krin-san](https://github.com/krin-san)
  [#3177](https://github.com/realm/SwiftLint/pull/3177)

* Add opt-in `ibinspectable_in_extension` rule to lint against `@IBInspectable`
  properties in `extensions`.  
  [Keith Smiley](https://github.com/keith)

* Add `computed_accessors_order` rule to validate the order of `get` and `set`
  accessors in computed properties and subscripts.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3158](https://github.com/realm/SwiftLint/issues/3158)

* Extend `empty_enum_arguments` rule to support `if case` and `guard case`.  
  [Zsolt Kovács](https://github.com/lordzsolt)
  [#3103](https://github.com/realm/SwiftLint/issues/3103)

* Add `prefer_zero_over_explicit_init` opt-in rule to enforce using
  `.zero` instead of calling constructor with zero arguments
  (e.g. `CGPoint(x: 0, y: 0)`) when using CoreGraphics types.  
  [Anton Nazarov](https://github.com/MortyMerr)
  [#3190](https://github.com/realm/SwiftLint/issues/3190)  

* Add `swiftlint docs` command to easily open online documentation.  
  [417-72KI](https://github.com/417-72KI)

* Add `unneeded_notification_center_removal` rule to warn against using
  `NotificationCenter.removeObserver(self)` in `deinit` since it's not required
  after iOS 9/macOS 10.11.  
  [Amzd](https://github.com/Amzd)
  [#2755](https://github.com/realm/SwiftLint/issues/2755)  

### Bug Fixes

* Fix UnusedImportRule breaking transitive imports.  
  [keith](https://github.com/keith)

* Fix severity level configuration for `duplicate_imports`.  
  [Yusuke Goto](https://github.com/yusukegoto)

* Fixes false positives for `multiline_parameters_brackets` and
  `multiline_arguments_brackets`.  
  [Noah Gilmore](https://github.com/noahsark769)
  [#3167](https://github.com/realm/SwiftLint/issues/3167)

* Fix conflict of 'opening_brace' with 'implicit_return' for functions
  implicitly returning a closure.  
  [SimplyDanny](https://github.com/SimplyDanny)
  [#3034](https://github.com/realm/SwiftLint/issues/3034)

* Fix false positive on `switch_case_on_newline` rule with `do/catch`
  statements when using Swift 5.3.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3253](https://github.com/realm/SwiftLint/issues/3253)

* Fix false positive uppercase enum case in
  `raw_value_for_camel_cased_codable_enum` rule.  
  [Teameh](https://github.com/teameh)

* Fix false positive in `no_space_in_method_call` rule with multiple trailing
  closures (Swift 5.3).  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3259](https://github.com/realm/SwiftLint/issues/3259)

* Fix false negative in `explicit_acl` rule when using `extension` with
  Swift 5.2+.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3186](https://github.com/realm/SwiftLint/issues/3186)

* `closure_parameter_position` now triggers in closures that are not inside a
  function call and also validates captured variables.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3225](https://github.com/realm/SwiftLint/issues/3225)

* Fix some cases where the output would be incomplete when running
  SwiftLint on Linux.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3214](https://github.com/realm/SwiftLint/issues/3214)

* `compiler_protocol_init` now triggers on `IndexSet(arrayLiteral:)`.  
  [Janak Shah](https://github.com/janakshah)
  [#3284](https://github.com/realm/SwiftLint/pull/3284)

* Fix false positives in `extension_access_modifier` rule when using
  Swift 5.2.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3150](https://github.com/realm/SwiftLint/issues/3150)

## 0.39.2: Stay Home

This is the last release to support building with Swift 5.0.x.

### Breaking

* None.

### Experimental

* None.

### Enhancements

* Add configuration options to the `unused_import` rule to require
  explicit import statements for each module referenced in a source
  file (`require_explicit_imports`). When this setting is enabled,
  an `allowed_transitive_imports` setting may also be specified to allow
  a mapping of modules to transitively imported modules. See
  [the PR](https://github.com/realm/SwiftLint/pull/3123) for details.  
  [JP Simard](https://github.com/jpsim)
  [#3116](https://github.com/realm/SwiftLint/issues/3116)

### Bug Fixes

* Fix more false positives in `implicit_getter` rule in extensions when using
  Swift 5.2.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3149](https://github.com/realm/SwiftLint/issues/3149)

* Fix false positives in `redundant_objc_attribute` rule in extensions when
  using Swift 5.2.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Fix false positives in `attributes` rule when using `rethrows` using
  Swift 5.2.  
  [JP Simard](https://github.com/jpsim)

* Fix false positives in `valid_ibinspectable` rule when defining inspectable
  properties in class extensions with computed properties using Swift 5.2.  
  [JP Simard](https://github.com/jpsim)

## 0.39.1: The Laundromat has a Rotating Door

### Breaking

* The new rules introduced in 0.39.0 that depend on SwiftSyntax have been
  temporarily removed as we work out release packaging issues.
  * `prohibited_nan_comparison`
  * `return_value_from_void_function`
  * `tuple_pattern`
  * `void_function_in_ternary`

  [JP Simard](https://github.com/jpsim)
  [#3105](https://github.com/realm/SwiftLint/issues/3105)

### Experimental

* None.

### Enhancements

* None.

### Bug Fixes

* Fix unused_import rule reported locations and corrections when
  multiple `@testable` imports are involved.  
  [JP Simard](https://github.com/jpsim)

## 0.39.0: A Visitor in the Laundromat

### Breaking

* Replace all uses of `Int`/`Int64`/`NSRange` representing byte offsets
  to use newly introduced `ByteCount` and `ByteRange` values instead.
  This will minimize the risk of accidentally using a byte-based offset
  in character-based contexts.  
  [Paul Taykalo](https://github.com/PaulTaykalo)
  [JP Simard](https://github.com/jpsim)

* SwiftLint now imports [SwiftSyntax](https://github.com/apple/swift-syntax)
  and requires Xcode 11.0 to build.  
  [Marcelo Fabri](https://github.com/marcelofabri)

### Experimental

* None.

### Enhancements

* Add option to pass successfully if no files passed to SwiftLint are lintable.  
  [thedavidharris](https://github.com/thedavidharris)
  [#2608](https://github.com/realm/SwiftLint/issues/2608)

* Add `deinitializer` type content to `type_contents_order` rule instead of
  grouping it with initializers.  
  [Steven Magdy](https://github.com/StevenMagdy)

* Inline test failure messages to make development of SwiftLint easier. Test
  failures in triggering and non-triggering examples will appear inline in
  their respective files so you can immediately see which cases are working
  and which are not.  
  [ZevEisenberg](https://github.com/ZevEisenberg)
  [#3040](https://github.com/realm/SwiftLint/pull/3040)

* Introduce a new `SyntaxRule` that enables writing rules using
  [SwiftSyntax](https://github.com/apple/swift-syntax).  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Add `tuple_pattern` opt-in rule to warn against using
  assigning variables through a tuple pattern when the left side
  of the assignment contains labels.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2203](https://github.com/realm/SwiftLint/issues/2203)

* Add `return_value_from_void_function` opt-in rule to warn against using
  `return <expression>` in a function that is `Void`.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Add `void_function_in_ternary` opt-in rule to warn against using
  a ternary operator to call `Void` functions.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2358](https://github.com/realm/SwiftLint/issues/2358)

* Add `only_after_dot` configuration option to `empty_count` rule. With the
  option enabled, `empty_count` rule will ignore variables named `count`.
  By default, this option is disabled.  
  [Zsolt Kovács](https://github.com/lordzsolt)
  [#827](https://github.com/realm/SwiftLint/issues/827)

* Add `prohibited_nan_comparison` opt-in rule to validate using `isNaN`
  instead of comparing values to the `.nan` constant.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2086](https://github.com/realm/SwiftLint/issues/2086)

* Add case `preview_provider` to the order list of `file_types_order` to fix
  an issue with false positives for `PreviewProvider` subclasses in SwiftUI.  
  [Cihat Gündüz](https://github.com/Jeehut)
  [#2860](https://github.com/realm/SwiftLint/issues/2860)

### Bug Fixes

* Fix false positive in `attributes` rule with `@autoclosure` parameters when
  using Swift 5.2.  
  [Mateusz Matrejek](https://github.com/matrejek)
  [#3079](https://github.com/realm/SwiftLint/issues/3112)

* Fix `discarded_notification_center_observer` false positives when
  capturing observers into an array.  
  [Petteri Huusko](https://github.com/PetteriHuusko)

* Fix crash when non-closed #if was present in file.  
  [PaulTaykalo](https://github.com/PaulTaykalo)

* Fix false positives when line ends with carriage return + line feed.  
  [John Mueller](https://github.com/john-mueller)
  [#3060](https://github.com/realm/SwiftLint/issues/3060)

* Implicit_return description now reports current config correctly.  
  [John Buckley](https://github.com/nhojb)

* Fix false positive in `implicit_getter` rule in extensions when using
  Swift 5.2.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3074](https://github.com/realm/SwiftLint/issues/3074)

* Do not trigger `optional_enum_case_matching` rule on `_?` as the `?` might
  be required in some situations.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3057](https://github.com/realm/SwiftLint/issues/3057)

* Fix false positive in `attributes` rule with `@escaping` parameters when
  using Swift 5.2.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3079](https://github.com/realm/SwiftLint/issues/3079)

* Fix false positive in `empty_string` rule when using multiline string
  literals.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3100](https://github.com/realm/SwiftLint/issues/3100)

## 0.38.2: Machine Repair Manual

### Breaking

* None.

### Experimental

* None.

### Enhancements

* Add option to configure which kinds of expressions should omit their
  `return` keyword by introducing an `included` configuration for the
  `implicit_return` rule. Supported values are `closure`, `function` and
  `getter`. Defaults to all three.  
  [Sven Münnich](https://github.com/svenmuennich)
  [#2870](https://github.com/realm/SwiftLint/issues/2870)

* Add `--correctable` and `--verbose` arguments to the `rules` command
  to allow displaying only correctable rules, and to always print the
  full configuration details regardless of your terminal width.  
  [Optional Endeavors](https://github.com/optionalendeavors)

* Add `capture_group` option to `custom_rules` for more fine-grained placement
  of the location marker for violating code.  
  [pyrtsa](https://github.com/pyrtsa)

* Add `orphaned_doc_comment` rule to catch doc comments that are not attached
  to any declarations.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2989](https://github.com/realm/SwiftLint/issues/2989)

* Add new indentation opt-in rule (`indentation_width`) checking for
  super-basic additive indentation pattern.  
  [Frederick Pietschmann](https://github.com/fredpi)
  [#227](https://github.com/realm/SwiftLint/issues/227)

* Catch previously missed violations in the `optional_enum_case_matching` rule
  when case expressions involved tuples.  
  [JP Simard](https://github.com/jpsim)

* API docs for SwiftLintFramework are now available at
  [realm.github.io/SwiftLint](https://realm.github.io/SwiftLint). `Rules.md`
  now redirects to the [Rule Directory](https://realm.github.io/SwiftLint/rule-directory.html)
  in the API docs. Contributors no longer need to update rule documentation in PRs as this is
  now done automatically. The rule documentation now includes the default configuration.  
  [JP Simard](https://github.com/jpsim)
  [#1653](https://github.com/realm/SwiftLint/issues/1653)
  [#1704](https://github.com/realm/SwiftLint/issues/1704)
  [#2808](https://github.com/realm/SwiftLint/issues/2808)
  [#2933](https://github.com/realm/SwiftLint/issues/2933)
  [#2961](https://github.com/realm/SwiftLint/issues/2961)

### Bug Fixes

* Fix issues in `unused_import` rule when correcting violations in files
  containing `@testable` imports where more than the unused imports would be
  removed.  
  [JP Simard](https://github.com/jpsim)

## 0.38.1: Extra Shiny Pulsator Cap

### Breaking

* None.

### Experimental

* None.

### Enhancements

* Make `weak_delegate` rule correctable.  
  [MaxHaertwig](https://github.com/maxhaertwig)

* Allow `SubstitutionCorrectableRule` to return `nil` instead of a correction
  to indicate that a suitable correction couldn't be found for a specific case.  
  [MaxHaertwig](https://github.com/maxhaertwig)

* Add `enum_case_associated_value_count` opt-in rule.  
  [lakpa](https://github.com/lakpa)
  [#2997](https://github.com/realm/SwiftLint/issues/2997)

* Add `optional_enum_case_matching` opt-in rule to validate that
  optional enum cases are matched without using `?` when using Swift 5.1 or
  above. See [SR-7799](https://bugs.swift.org/browse/SR-7799) for more
  details.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Add `prefer_self_type_over_type_of_self` opt-in rule to enforce using
  `Self` instead of `type(of: self)` when using Swift 5.1 or above.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#3003](https://github.com/realm/SwiftLint/issues/3003)

### Bug Fixes

* Fix crash in `unused_import` rule when unused imports have trailing
  comments.  
  [JP Simard](https://github.com/jpsim)
  [#2990](https://github.com/realm/SwiftLint/issues/2990)

* Handle `@_exported` imports in `unused_import` rule.  
  [JP Simard](https://github.com/jpsim)
  [#2877](https://github.com/realm/SwiftLint/issues/2877)

* Fix false positives from the `unused_declaration` rule involving
  functions in protocol extensions.  
  [JP Simard](https://github.com/jpsim)

* Fix parsing of SwiftLint commands containing a URL in their trailing comment.  
  [Sven Münnich](https://github.com/svenmuennich)

* Added missing parameters to `FileNameConfiguration.consoleDescription`.  
  [timcmiller](https://github.com/timcmiller)
  [#3009](https://github.com/realm/SwiftLint/issues/3009)

* Fix crash when SourceKit returns out of bounds string byte offsets.  
  [JP Simard](https://github.com/jpsim)

## 0.38.0: Toroidal Agitation

### Breaking

* Replace the `SyntaxToken` and `SyntaxMap` structures used in
  public SwiftLintFramework APIs with a new  `SwiftLintSyntaxToken`
  and `SwiftlintSyntaxMap` wrappers over structures returned from
  SourceKitten.  
  [PaulTaykalo](https://github.com/PaulTaykalo)
  [#2955](https://github.com/realm/SwiftLint/issues/2955)

### Experimental

* None.

### Enhancements

* Make `control_statement` rule correctable.  
  [MaxHaertwig](https://github.com/maxhaertwig)

* Add `expiring_todo` opt-in rule to allow developers to mark their
  todos with an expiration date.  
  [Dan Loman](https://github.com/namolnad)
  [#727](https://github.com/realm/SwiftLint/issues/727)

* Support compilation databases for `swiftlint analayze`.  
  [kastiglione](https://github.com/kastiglione)
  [#2962](https://github.com/realm/SwiftLint/issues/2962)

### Bug Fixes

* Fix false positive for LetVarWhitespaceRule.  
  [PaulTaykalo](https://github.com/PaulTaykalo)
  [#2956](https://github.com/realm/SwiftLint/issues/2956)

* Fix for false-positive identical operands rule.  
  [PaulTaykalo](https://github.com/PaulTaykalo)
  [#2953](https://github.com/realm/SwiftLint/issues/2953)

* Fixed false positive in `opening_brace` rule on anonymous closure.  
  [Andrey Uryadov](https://github.com/a-25)
  [#2879](https://github.com/realm/SwiftLint/issues/2879)

## 0.37.0: Double Load

### Breaking

* Replace the `[String: SourceKittenRepresentable]` dictionaries used in
  public SwiftLintFramework APIs with a new `SourceKittenDictionary`
  wrapper over dictionaries returned from SourceKitten.  
  [PaulTaykalo](https://github.com/PaulTaykalo)
  [#2922](https://github.com/realm/SwiftLint/issues/2922)

* Update Commandant dependency to version 0.17.0, removing the
  `antitypical/Result` dependency in favor of the Swift standard
  library's `Result` type.  
  [JP Simard](https://github.com/jpsim)

### Experimental

* None.

### Enhancements

* Speed up many operations by using SwiftLintFile wrapper over File from
  SourceKitten, caching most members derived from the File.  
  [PaulTaykalo](https://github.com/PaulTaykalo)
  [#2929](https://github.com/realm/SwiftLint/issues/2929)

* Speed up Swiftlint by using swift enums instead of raw values for
  dictionary lookups.  
  [PaulTaykalo](https://github.com/PaulTaykalo)
  [#2924](https://github.com/realm/SwiftLint/issues/2924)

* Speed up Identical Operands rule by using syntaxmap instead of regular
  expressions.  
  [PaulTaykalo](https://github.com/PaulTaykalo)
  [#2918](https://github.com/realm/SwiftLint/issues/2918)

* Speed up syntax token lookups, which can improve performance when
  linting large files.  
  [PaulTaykalo](https://github.com/PaulTaykalo)
  [#2916](https://github.com/realm/SwiftLint/issues/2916)  

* Use faster comparison in 'file_types_order' rule.  
  [PaulTaykalo](https://github.com/PaulTaykalo)
  [#2949](https://github.com/realm/SwiftLint/issues/2949)

* Speed up recursively executed rules (all AST rules and some others) by
  avoiding the creation of many intermediate collections when
  accumulating results.  
  [PaulTaykalo](https://github.com/PaulTaykalo)
  [#2951](https://github.com/realm/SwiftLint/issues/2951)

* Add GitHub Actions Logging reporter (`github-actions-logging`).  
  [Norio Nomura](https://github.com/norio-nomura)

### Bug Fixes

* None.

## 0.36.0: 👕👚👗

### Breaking

* SwiftLint now requires Swift 5.0 or higher to build.  
  [JP Simard](https://github.com/jpsim)

### Experimental

* None.

### Enhancements

* Add `contains_over_range_nil_comparison` opt-in rule to prefer
  using `contains` over comparison of `range(of:)` to `nil`.  
  [Colton Schlosser](https://github.com/cltnschlosser)
  [#2776](https://github.com/realm/SwiftLint/issues/2776)

* Make `contains_over_first_not_nil` rule also match `first(where:) == nil`.  
  [Colton Schlosser](https://github.com/cltnschlosser)

* Add two new cases to the Mark rule to detect a Mark using three slashes.  
  [nvanfleet](https://github.com/nvanfleet)
  [#2866](https://github.com/realm/SwiftLint/issues/2866)

* Add `flatmap_over_map_reduce` opt-in rule to prefer
  using `flatMap` over `map { ... }.reduce([], +)`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2883](https://github.com/realm/SwiftLint/issues/2883)

* Add autocorrection to `syntactic_sugar`.  
  [Ivan Vavilov](https://github.com/vani2)

* Make `toggle_bool` rule substitution correctable.  
  [MaxHaertwig](https://github.com/maxhaertwig)

* Optimize the performance of `redundant_void_return` rule.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Support building with Swift 5.1 on Linux.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2874](https://github.com/realm/SwiftLint/issues/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](https://github.com/00FA9A)
  [#2888](https://github.com/realm/SwiftLint/issues/2888)

* Speedup `LetVarWhiteSpacesRule`.  
  [PaulTaykalo](https://github.com/PaulTaykalo)
  [#2901](https://github.com/realm/SwiftLint/issues/2901)  

### Bug Fixes

* Fix running analyzer rules on the output of builds performed with
  Xcode 11 or later.  
  [JP Simard](https://github.com/jpsim)

## 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](https://github.com/atfelix)
  [#2791](https://github.com/realm/SwiftLint/issues/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](https://github.com/marcelofabri)

* Add `contains_over_filter_count` opt-in rule to warn against using
  expressions like `filter(where:).count > 0` instead of `contains(where:)`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2803](https://github.com/realm/SwiftLint/issues/2803)

* Add `contains_over_filter_is_empty` opt-in rule to warn against using
  expressions like `filter(where:).isEmpty` instead of `contains(where:)`.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Add `empty_collection_literal` opt-in rule to prefer using `isEmpty` to
  comparison to `[]` or `[:]`.  
  [Colton Schlosser](https://github.com/cltnschlosser)
  [#2807](https://github.com/realm/SwiftLint/issues/2807)

### Bug Fixes

* Fixed false positive in `colon` rule inside guard and ternary operator.  
  [Andrey Uryadov](https://github.com/a-25)
  [#2806](https://github.com/realm/SwiftLint/issues/2806)

* Release memory created for sourcekitd requests.  
  [Colton Schlosser](https://github.com/cltnschlosser)
  [#2812](https://github.com/realm/SwiftLint/issues/2812)

* Fix `swiftlint rules` output table formatting.  
  [JP Simard](https://github.com/jpsim)
  [#2787](https://github.com/realm/SwiftLint/issues/2787)

* Don't trigger `missing_docs` violations when implementing `deinit`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2690](https://github.com/realm/SwiftLint/issues/2690)

* Fix `unused_import` rule false positive when only operators from the module
  are used.  
  [Timofey Solonin](https://github.com/biboran)
  [#2737](https://github.com/realm/SwiftLint/issues/2737)

* Avoid triggering `redundant_type_annotation` rule when declaring
  `IBInspectable` properties.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2842](https://github.com/realm/SwiftLint/issues/2842)

* Don't trigger `missing_docs` violations on extensions.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2851](https://github.com/realm/SwiftLint/issues/2851)

## 0.34.0: Anti-Static Wool Dryer Balls

### Breaking

* To enable collecting rules, many breaking changes to `SwiftLintFramework`'s
  public API were made the `Linter` type was significantely changed, and a new
  `CollectedLinter` type was introduced. Many public `SwiftLintFramework` APIs
  that interacted with `Linter` have also been affected. More new types and
  protocols were added such as `RuleStorage`, `AnyCollectingRule`,
  `CollectingRule`, `CollectingCorrectableRule`.
  We are not aware of any significant users of the `SwiftLintFramework` 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](https://github.com/elliottwilliams)
  [JP Simard](https://github.com/jpsim)

### Experimental

* Add a two-stage `CollectingRule` protocol to support rules that collect data
  from all files before validating. Collecting rules implement a `collect`
  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](https://github.com/elliottwilliams)
  [#2431](https://github.com/realm/SwiftLint/issues/2431)

* Add a new `unused_declaration` analyzer rule to lint for unused declarations.
  By default, detects unused `fileprivate`, `private` and `internal`
  declarations. Configure the rule with `include_public_and_open: true` to
  also detect unused `public` and `open` declarations.  
  [JP Simard](https://github.com/jpsim)

* Completely remove the `unused_private_declaration` rule. Please use
  `unused_declaration` instead.  
  [JP Simard](https://github.com/jpsim)

### Enhancements

* Added 'file_name_no_space' opt-in rule.  
  [timcmiller](https://github.com/timcmiller)
  [#3007](https://github.com/realm/SwiftLint/issues/3007)

### 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](https://github.com/cltnschlosser)
  [JP Simard](https://github.com/jpsim)

* Several public types in SwiftLintFramework have added `Codable` conformance:
  Location, RuleDescription, RuleKind, StyleViolation, SwiftVersion,
  ViolationSeverity.  
  [JP Simard](https://github.com/jpsim)

* Print full relative path to file in log output when it matches the file name
  of another path being linted.  
  [Keith Smiley](https://github.com/keith)

### Bug Fixes

* Don't trigger `vertical_parameter_alignment` violations when using parameters
  with attributes such as `@ViewBuilder` in function declarations.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2792](https://github.com/realm/SwiftLint/issues/2792)

* Fix false positive in `function_default_parameter_at_end` rule when using
  a closure parameter with default value.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2788](https://github.com/realm/SwiftLint/issues/2788)

## 0.33.0: Worldwide Dryers Conference

### Breaking

* Remove the `weak_computed_property` rule. Please see linked issue for
  discussion and rationale.  
  [JP Simard](https://github.com/jpsim)
  [#2712](https://github.com/realm/SwiftLint/issues/2712)

### Experimental

* None.

### Enhancements

* Add `" - "` delimiter to allow commenting SwiftLint commands without triggering
  `superfluous_disable_command`.  
  [Kevin Randrup](https://github.com/kevinrandrup)

* Make `testSimulateHomebrewTest()` test opt-in because it may fail on unknown
  condition. Set `SWIFTLINT_FRAMEWORK_TEST_ENABLE_SIMULATE_HOMEBREW_TEST`
  environment variable to test like:

  ```terminal.sh-session
  $ SWIFTLINT_FRAMEWORK_TEST_ENABLE_SIMULATE_HOMEBREW_TEST=1 \
  swift test --filter testSimulateHomebrewTest
  ```  
  
  [Norio Nomura](https://github.com/norio-nomura)

* Add option to configure how nested types should be separated in file names by
  introducting `nested_type_separator` configuration for the `file_name` rule.  
  [Frederick Pietschmann](https://github.com/fredpi)
  [#2717](https://github.com/realm/SwiftLint/issues/2717)

* Add `unowned_variable_capture` opt-in rule to warn against unowned captures
  in closures when using Swift 5.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2097](https://github.com/realm/SwiftLint/issues/2097)

* Don't trigger a `no_fallthrough_only` violation if next case is an
  `@unknown default`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2696](https://github.com/realm/SwiftLint/issues/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](https://bugs.swift.org/browse/SR-10077) for details).  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2676](https://github.com/realm/SwiftLint/issues/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](https://github.com/marcelofabri)
  [#2612](https://github.com/realm/SwiftLint/issues/2612)

### Bug Fixes

* Don't trigger `redundant_void_return` violations when using `subscript` as the
  return type is required.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Skip module import if cursor info is missing module info.  
  [alvarhansen](https://github.com/alvarhansen)
  [#2746](https://github.com/realm/SwiftLint/issues/2746)

* Don't trigger `file_types_order` violations in files only containing
  extensions.  
  [Sam Rayner](https://github.com/samrayner)
  [#2749](https://github.com/realm/SwiftLint/issues/2749)

* Force-unwrapping `self` should trigger a violation of the `force_unwrapping`
  rule.  
  [Dalton Claybrook](https://github.com/daltonclaybrook)
  [#2759](https://github.com/realm/SwiftLint/issues/2759)

## 0.32.0: Wash-N-Fold-N-Reduce

### Breaking

* None.

### Experimental

* None.

### Enhancements

* Add `reduce_boolean` rule to prefer simpler constructs over `reduce(Boolean)`.  
  [Xavier Lowmiller](https://github.com/xavierLowmiller)
  [#2675](https://github.com/realm/SwiftLint/issues/2675)

* Add `nsobject_prefer_isequal` rule to warn against implementing `==` on an
  `NSObject` subclass as calling `isEqual` (i.e. when using the class from
  Objective-C) will not use the defined `==` method.  
  [Matthew Healy](https://github.com/matthew-healy)
  [#2663](https://github.com/realm/SwiftLint/pull/2663)

* Add `reduce_into` opt-in rule to encourage the use of `reduce(into:_:)`
  instead of `reduce(_:_:)` which is less performant.  
  [Dalton Claybrook](https://github.com/daltonclaybrook)
  [#2658](https://github.com/realm/SwiftLint/issues/2658)

* Remove @ mark to fix invalid link in Rules.md.  
  [Hiroki Nagasawa](https://github.com/pixyzehn)
  [#2669](https://github.com/realm/SwiftLint/pull/2669)

* Add new opt-in rule `file_types_order` to specify how the types in a file
  should be sorted.  
  [Cihat Gündüz](https://github.com/Dschee)
  [#2294](https://github.com/realm/SwiftLint/issues/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](https://github.com/Dschee)
  [#2294](https://github.com/realm/SwiftLint/issues/2294)

* Add `nslocalizedstring_require_bundle` rule to ensure calls to
  `NSLocalizedString` specify the bundle where the strings file is located.  
  [Matthew Healy](https://github.com/matthew-healy)
  [#2595](https://github.com/realm/SwiftLint/issues/2595)

* `contains_over_first_not_nil` rule now also checks for `firstIndex(where:)`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2678](https://github.com/realm/SwiftLint/issues/2678)

* Add `unused_capture_list` rule to ensure that all references in a closure
  capture list are used.  
  [Dalton Claybrook](https://github.com/daltonclaybrook)
  [#2715](https://github.com/realm/SwiftLint/issues/2715)

* SwiftLint can now be compiled using Xcode 10.2.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [Norio Nomura](https://github.com/norio-nomura)
  [#2693](https://github.com/realm/SwiftLint/issues/2693)

### Bug Fixes

* Fix bug where SwiftLint ignores excluded files list in a nested configuration
  file.  
  [Dylan Bruschi](https://github.com/Bruschidy54)
  [#2447](https://github.com/realm/SwiftLint/issues/2447)

* `colon` rule now catches violations when declaring generic types with
  inheritance or protocol conformance.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2628](https://github.com/realm/SwiftLint/issues/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](https://github.com/jsloop42)
  [#2684](https://github.com/realm/SwiftLint/issues/2684)

* Fix false positives on `number_separator` when the number is wrapped in
  parentheses.  
  [Dalton Claybrook](https://github.com/daltonclaybrook)
  [#2683](https://github.com/realm/SwiftLint/issues/2683)

* Fix false positives on `sorted_first_last` when calling `firstIndex` and
  `lastIndex` method.  
  [Taiki Komaba](https://github.com/r-plus)
  [#2700](https://github.com/realm/SwiftLint/issues/2700)

* Fix crash when running on Linux with Swift 5 without specifying a `--path`
  value or specifying an empty string.  
  [Keith Smiley](https://github.com/keith)
  [#2703](https://github.com/realm/SwiftLint/issues/2703)

* Fix false positives on `explicit_acl` and `explicit_top_level_acl` rules when
  declaring extensions that add protocol conformances with Swift 5.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2705](https://github.com/realm/SwiftLint/issues/2705)

* Let `disable all` command override `superfluous_disable_command` rule.  
  [Frederick Pietschmann](https://github.com/fredpi)
  [#2670](https://github.com/realm/SwiftLint/issues/2670)

* Fix issues in `explict_acl`, `redundant_set_access_control` and
  `explicit_top_level_acl` rules when using Swift 5.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2694](https://github.com/realm/SwiftLint/issues/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](https://github.com/marcelofabri)
  [#2589](https://github.com/realm/SwiftLint/issues/2589)

* Add `weak_computed_property` rule to warn against using `weak` in a computed
  property as it has no effect.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2596](https://github.com/realm/SwiftLint/issues/2596)

* Add `SwiftVersion.five` and automatically detect it when computing
  `SwiftVersion.current`.  
  [JP Simard](https://github.com/jpsim)

* Make `redundant_objc_attribute` rule autocorrectable.  
  [Daniel Metzing](https://github.com/dirtydanee)

* 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](https://github.com/BenStaveleyTaylor)
  [#2620](https://github.com/realm/SwiftLint/issues/2620)

* `nimble_operator` now warns about `beTrue()` and `beFalse()`.  
  [Igor-Palaguta](https://github.com/Igor-Palaguta)
  [#2613](https://github.com/realm/SwiftLint/issues/2613)

* Warn if a configured rule is not enabled.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1350](https://github.com/realm/SwiftLint/issues/1350)

* Add `exclude_ranges` option to `number_separator` for exclusion.  
  [Cihat Gündüz](https://github.com/Dschee)
  [#2637](https://github.com/realm/SwiftLint/issues/2637)

### Bug Fixes

* Fix false positives on `no_grouping_extension` rule when using `where`
  clause.  
  [Almaz Ibragimov](https://github.com/almazrafi)

* Fix `explicit_type_interface` when used in statements.  
  [Daniel Metzing](https://github.com/dirtydanee)
  [#2154](https://github.com/realm/SwiftLint/issues/2154)

* Fix `lower_acl_than_parent` when linting with Swift 5.  
  [JP Simard](https://github.com/jpsim)
  [#2607](https://github.com/realm/SwiftLint/issues/2607)

* Fix `let_var_whitespace` with `#warning`.  
  [Igor-Palaguta](https://github.com/Igor-Palaguta)
  [#2544](https://github.com/realm/SwiftLint/issues/2544)

* Fix excessive `superfluous_disable_command` violations being reported when
  using an invalid rule identifier in a disable command.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2623](https://github.com/realm/SwiftLint/issues/2623)

* Fix `explicit_type_interface` with `allow_redundancy` when assigning type
  references to variables.  
  [Cihat Gündüz](https://github.com/Dschee)
  [#2636](https://github.com/realm/SwiftLint/issues/2636)

* Fix `unused_closure_parameter` when argument is named `self`.  
  [Cihat Gündüz](https://github.com/Dschee)
  [#2437](https://github.com/realm/SwiftLint/issues/2437)

* Fix `first_where` for some calls on Realm collection types.  
  [Cihat Gündüz](https://github.com/Dschee)
  [#1930](https://github.com/realm/SwiftLint/issues/1930)

## 0.30.1: Localized Stain Remover

### Breaking

* None.

### Experimental

* Silence `CodingKeys` violations in `unused_private_declaration` since these
  should always be intentional violations.  
  [Kim de Vos](https://github.com/kimdv)
  [#2573](https://github.com/realm/SwiftLint/issues/2573)

### Enhancements

* Add `nslocalizedstring_key` opt-in rule to validate that keys used in
  `NSLocalizedString` calls are static strings, so `genstrings` will be
  able to find them.  
  [Marcelo Fabri](https://github.com/marcelofabri)

### Bug Fixes

* Fix false positives on `trailing_closure` rule when using anonymous closure
  calls.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2159](https://github.com/realm/SwiftLint/issues/2159)

* Fix false positives on `array_init` rule when using prefix operators.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1877](https://github.com/realm/SwiftLint/issues/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](https://github.com/luvacu)
  [#591](https://github.com/realm/SwiftLint/issues/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](https://github.com/sammy-sc)
  [#1881](https://github.com/realm/SwiftLint/issues/1881)

* Add `unused_setter_value` rule to validate that setter arguments are
  used in properties.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1136](https://github.com/realm/SwiftLint/issues/1136)

* Add `only_single_muted_parameter` configuration on `trailing_closure` rule
  to only enforce using trailing closure on functions that take one single
  muted parameter.  
  [Marcelo Fabri](https://github.com/marcelofabri)

### Bug Fixes

* Fix false positives on `identical_operands` rule when the right side of the
  operand has a chained optional.  
  [JP Simard](https://github.com/jpsim)
  [#2564](https://github.com/realm/SwiftLint/issues/2564)

## 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](https://github.com/jpsim)
  [#2561](https://github.com/realm/SwiftLint/issues/2561)

### Enhancements

* Add `strong_iboutlet` opt-in rule to enforce that `@IBOutlet`s are not
  declared as `weak`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2433](https://github.com/realm/SwiftLint/issues/2433)

### Bug Fixes

* Fix inaccessible custom rules in nested configurations.  
  [Timofey Solonin](https://github.com/biboran)
  [#1815](https://github.com/realm/SwiftLint/issues/1815)
  [#2441](https://github.com/realm/SwiftLint/issues/2441)

* Improve `superfluous_disable_command` to warn against disabling non-existent
  rules.  
  [Kim de Vos](https://github.com/kimdv)
  [#2348](https://github.com/realm/SwiftLint/issues/2348)

* Fix false positives on `identical_operands` rule when the right side of the
  operand does not terminate.  
  [Xavier Lowmiller](https://github.com/xavierLowmiller)
  [#2467](https://github.com/realm/SwiftLint/issues/2467)

## 0.29.3: Entangled Agitator

### Breaking

* None.

### Experimental

* Skip `@IBInspectable` and `deinit` declarations in
  `unused_private_declaration`.  
  [JP Simard](https://github.com/jpsim)

### Enhancements

* Allow configuring `discouraged_object_literal` rule to only discourage one
  kind of object literal.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2439](https://github.com/realm/SwiftLint/issues/2439)

* Adds `xct_specific_matcher` opt-in rule to enforce specific matchers
  over `XCTAssertEqual` and `XCTAssertNotEqual`.  
  [Ornithologist Coder](https://github.com/ornithocoder)
  [#1874](https://github.com/realm/SwiftLint/issues/1874)

* Add `last_where` opt-in rule that warns against using
  `.filter { /* ... */ }.last` in collections, as
  `.last(where: { /* ... */ })` is more efficient.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Add `unused_control_flow_label` rule to validate that control flow labels are
  used.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2227](https://github.com/realm/SwiftLint/issues/2227)

### Bug Fixes

* Fix false positives on `first_where` rule when calling `filter` without a
  closure parameter (for example on a Realm collection).  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Fix false positives on `sorted_first_last` rule when calling `sorted` with
  a different argument than `by:` (e.g. on a Realm collection).  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2533](https://github.com/realm/SwiftLint/issues/2533)

* Fix false positives on `redundant_objc_attribute` rule when using nested
  types.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2539](https://github.com/realm/SwiftLint/issues/2539)

* Fix false positives on `vertical_whitespace_between_cases` rule when a blank
  line is present but it contains trailing whitespace.  
  [Ben Staveley-Taylor](https://github.com/BenStaveleyTaylor)
  [#2538](https://github.com/realm/SwiftLint/issues/2538)

## 0.29.2: Washateria

### Breaking

* None.

### Experimental

* None.

### Enhancements

* Add new opt-in rule `vertical_whitespace_opening_braces` to warn against empty
  lines after opening braces.  
  [Cihat Gündüz](https://github.com/Dschee)
  [#1518](https://github.com/realm/SwiftLint/issues/1518)

* Add new opt-in rule `vertical_whitespace_closing_braces` to warn against empty
  lines before closing braces.  
  [Cihat Gündüz](https://github.com/Dschee)
  [#1518](https://github.com/realm/SwiftLint/issues/1518)

* Improve performance for `unused_private_declaration` and `unused_import` rules
  for large files.  
  [Niil Öhlin](https://github.com/niilohlin)

* Add new `legacy_hashing` rule to encourage the use of Swift 4.2's new hashing
  interface.  
  [Kim de Vos](https://github.com/kimdv)
  [#2108](https://github.com/realm/SwiftLint/issues/2108)

* Improve `private_unit_test` rule to allow private classes with `@objc`
  attribute.  
  [Kim de Vos](https://github.com/kimdv)
  [#2282](https://github.com/realm/SwiftLint/issues/2282)

* Support glob patterns without the star.  
  [Maksym Grebenets](https://github.com/mgrebenets)

* Make `modifier_order` rule autocorrectable.  
  [Timofey Solonin](https://github.com/biboran)
  [#2353](https://github.com/realm/SwiftLint/issues/2353)

### Bug Fixes

* Fix false positives in `redundant_objc_attribute` for private declarations
  under `@objcMembers`.  
  [Daniel Metzing](https://github.com/dirtydanee)
  [#2499](https://github.com/realm/SwiftLint/issues/2499)

* Fix an error when pulling SwiftLint as a dependency using Carthage.  
  [JP Simard](https://github.com/jpsim)

* Non-string values specified in `swiftlint_version` now fail the lint if
  it doesn't match the version.  
  [JP Simard](https://github.com/jpsim)
  [#2518](https://github.com/realm/SwiftLint/issues/2518)

## 0.29.1: There’s Always More Laundry

### Breaking

* None.

### Experimental

* None.

### Enhancements

* Add `redundant_objc_attribute` to warn against already implied `@objc`
  attribute.  
  [Daniel Metzing](https://github.com/dirtydanee)
  [#2193](https://github.com/realm/SwiftLint/issues/2193)

* Add `vertical_whitespace_between_cases` opt-in rule to enforce a single
  empty line between switch cases.  
  [Cihat Gündüz](https://github.com/Dschee)
  [#1517](https://github.com/realm/SwiftLint/issues/1517)

* Add `multiline_arguments_brackets` opt-in rule to warn against multiline
  function call arguments with surrounding brackets without newline.  
  [Cihat Gündüz](https://github.com/Dschee)
  [#2306](https://github.com/realm/SwiftLint/issues/2306)

* Add `multiline_literal_brackets` opt-in rule to warn against multiline
  literal arrays & dictionaries with surrounding brackets without newline.  
  [Cihat Gündüz](https://github.com/Dschee)
  [#2306](https://github.com/realm/SwiftLint/issues/2306)

* Add `multiline_parameters_brackets` opt-in rule to warn against multiline
  function definition parameters with surrounding brackets without newline.  
  [Cihat Gündüz](https://github.com/Dschee)
  [#2306](https://github.com/realm/SwiftLint/issues/2306)

* Ignore unspecified modifiers in `modifier_order`.  
  [Timofey Solonin](https://github.com/biboran)
  [#2435](https://github.com/realm/SwiftLint/issues/2435)

* The `lint` command now exits with a code of 2 when not using pinned
  version defined as `swiftlint_version` in the configuration file.  
  [Kim de Vos](https://github.com/kimdv)
  [#2074](https://github.com/realm/SwiftLint/issues/2074)

### Bug Fixes

* Fix false positive in `nimble_operator` rule.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2489](https://github.com/realm/SwiftLint/issues/2489)

* Fix false positives on `explicit_type_interface` rule when
  configured with option `allowRedundancy` set to `true`.  
  [Cihat Gündüz](https://github.com/Dschee)
  [#2425](https://github.com/realm/SwiftLint/issues/2425)

* Only mark custom rules as 'enabled in your config' in the output of the
  `rules` command when there are one or more configured custom rules.  
  [jhildensperger](https://github.com/jhildensperger)

* Fix wrong correction when removing testable imports with the `unused_import`
  rule.  
  [JP Simard](https://github.com/jpsim)

* Fix false positive with the `unused_import` rule when importing Foundation
  when there are attributes in that file requiring Foundation.  
  [JP Simard](https://github.com/jpsim)

## 0.29.0: A Laundry List of Changes

### Breaking

* SwiftLint now requires Swift 4.2 or higher to build.  
  [JP Simard](https://github.com/jpsim)

### Experimental

* None.

### Enhancements

* Improve the performance of saving or reading cached lint results on platforms
  with CommonCrypto.  
  [JP Simard](https://github.com/jpsim)

* Add `markdown` reporter which outputs markdown-formatted tables, ideal for
  rendering in GitLab or GitHub.  
  [Dani Vela](https://github.com/madcato)

* Add `testSimulateHomebrewTest()` to `IntegrationTests` that simulates test in
  `homebrew-core/Formula/swiftlint.rb` within sandbox.  
  [Norio Nomura](https://github.com/norio-nomura)

### Bug Fixes

* Fix compiler warnings when building with Swift 4.2 introduced in the last
  release.  
  [JP Simard](https://github.com/jpsim)

* Fix false positive in `explicit_init` rule.  
  [Dominic Freeston](https://github.com/dominicfreeston)

* Fix `toggle_bool` false positive violation when comparing object parameter to
  an equally named variable.  
  [Timofey Solonin](https://github.com/biboran)
  [#2471](https://github.com/realm/SwiftLint/issues/2471)

* Fix false positive on file_name rule with specific patterns.  
  [Cihat Gündüz](https://github.com/Dschee)
  [#2417](https://github.com/realm/SwiftLint/issues/2417)

* Fix crash in `no_fallthrough_only` and potentially other rules when linting
  files with unicode characters in certain locations.  
  [JP Simard](https://github.com/jpsim)
  [#2276](https://github.com/realm/SwiftLint/issues/2276)

* Fix violations with no character/column location not being reported in
  `xcpretty`. Now violations with no column location default to a column value
  of `1` indicating the start of the line.  
  [JP Simard](https://github.com/jpsim)
  [#2267](https://github.com/realm/SwiftLint/issues/2267)

## 0.28.2: EnviroBoost Plus

### Breaking

* None.

### Experimental

* None.

### Enhancements

* Add `SWIFTLINT_DISABLE_SOURCEKIT` environment variable to allow running
  SwiftLint without connecting to SourceKit. This will run a subset of rules
  that don't require SourceKit, which is useful when running in a sandboxed
  setting such as in Homebrew's CI.  
  [Norio Nomura](https://github.com/norio-nomura)

### Bug Fixes

* None.

## 0.28.1: EnviroBoost

This is the last release to support building with Swift 4.0 and Swift 4.1.

### Breaking

* None.

### Experimental

* None.

### Enhancements

* None.

### Bug Fixes

* Improve the performance of collecting which files to lint by up to 3.5x.  
  [JP Simard](https://github.com/jpsim)

* Improve the performance of looking up cached lint results by up to 10x for
  complex configurations.  
  [JP Simard](https://github.com/jpsim)

## 0.28.0: EcoBoost

### Breaking

* Completely remove the `--use-tabs` option of the `autocorrect` command that
  was deprecated in 0.24.1. In its place, define an `indentation` key in your
  configuration files.  
  [JP Simard](https://github.com/jpsim)

### Experimental

* Add a new `swiftlint analyze` command which can lint Swift files using the
  full type-checked AST. Rules of the `AnalyzerRule` type will be added over
  time. The compiler log path containing the clean `swiftc` build command
  invocation (incremental builds will fail) must be passed to `analyze` via
  the `--compiler-log-path` flag, e.g.
  `--compiler-log-path /path/to/xcodebuild.log`.  
  [JP Simard](https://github.com/jpsim)

* Add an `explicit_self` analyzer rule to enforce the use of explicit references
  to `self.` when accessing instance variables or functions.  
  [JP Simard](https://github.com/jpsim)
  [#321](https://github.com/realm/SwiftLint/issues/321)

* Add an `unused_import` analyzer rule to lint for unnecessary imports.  
  [JP Simard](https://github.com/jpsim)
  [#2248](https://github.com/realm/SwiftLint/issues/2248)

* Add an `unused_private_declaration` analyzer rule to lint for unused private
  declarations.  
  [JP Simard](https://github.com/jpsim)

### Enhancements

* Add `legacy_random` opt-in rule to encourage the use of `.random(in:)`
  instead of `arc4random`, `arc4random_uniform`, and `drand48`.  
  [Joshua Kaplan](https://github.com/yhkaplan)

* Improve performance of `line_length` and
  `multiple_closures_with_trailing_closure` rules.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Add `closure_body_length` opt-in rule to enforce the maximum number
  of lines a closure should have. Requires Swift 4.2.  
  [Ornithologist Coder](https://github.com/ornithocoder)
  [#52](https://github.com/realm/SwiftLint/issues/52)

* Add SonarQube reporter.  
  [Yusuke Ohashi](https://github.com/junkpiano)
  [#2350](https://github.com/realm/SwiftLint/issues/2350)

* Add `prohibited_interface_builder` opt-in rule to validate that `@IBOutlet`s
  and `@IBAction`s are not used.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2365](https://github.com/realm/SwiftLint/issues/2365)

* Add `inert_defer` rule to validate that `defer` is not used at the end of a
  scope.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2123](https://github.com/realm/SwiftLint/issues/2123)

* Add `toggle_bool` opt-in rule which suggests using `someBool.toggle()` over
  `someBool = !someBool`. Requires Swift 4.2.  
  [Dalton Claybrook](https://github.com/daltonclaybrook)
  [#2369](https://github.com/realm/SwiftLint/issues/2369)

* Add `identical_operands` opt-in rule to validate that operands are different
  expressions in comparisons.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1371](https://github.com/realm/SwiftLint/issues/1371)

* Add `collection_alignment` opt-in rule to validate that all elements in a
  collection literal are aligned vertically.  
  [Dalton Claybrook](https://github.com/daltonclaybrook)
  [#2326](https://github.com/realm/SwiftLint/issues/2326)

* Add `static_operator` opt-in rule to enforce that operators are declared as
  static functions instead of free functions.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2395](https://github.com/realm/SwiftLint/issues/2395)

* Specify what type of compiler protocol initializer violated the
  `compiler_protocol_init` rule.  
  [Timofey Solonin](https://github.com/biboran)
  [#2422](https://github.com/realm/SwiftLint/issues/2422)

### Bug Fixes

* Fix `comma` rule false positives on object literals (for example, images).  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2345](https://github.com/realm/SwiftLint/issues/2345)

* Fix false positive on `file_name` rule when using nested types.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2325](https://github.com/realm/SwiftLint/issues/2325)

* Fix crash on `multiline_function_chains` rule when using some special
  characters inside the function calls.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2360](https://github.com/realm/SwiftLint/issues/2360)

* Change `autocorrect --format` to run format before autocorrect, fixing
  conflicts between default indentation and rules which modify indentation
  (i.e. `closure_end_indentation`).  
  [Ornithologist Coder](https://github.com/ornithocoder)
  [#2374](https://github.com/realm/SwiftLint/issues/2374)

* Fix false positive on `empty_count` rule when assessing binary, octal and
  hexadecimal integer literals.  
  [Timofey Solonin](https://github.com/biboran)
  [#2423](https://github.com/realm/SwiftLint/issues/2423)

## 0.27.0: Heavy Duty

### Breaking

* None.

### Enhancements

* Append `modifier_order` description with failure reason.  
  [Daniel Metzing](https://github.com/dirtydanee)
  [#2269](https://github.com/realm/SwiftLint/pull/2269)

* Decrease default severity of `superfluous_disable_command` to `warning`.  
  [Frederick Pietschmann](https://github.com/fredpi)
  [#2250](https://github.com/realm/SwiftLint/issues/2250)

* Don't touch files when running `autocorrect --format` if the contents haven't
  changed.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2249](https://github.com/realm/SwiftLint/issues/2249)

* Add `only_enforce_after_first_closure_on_first_line` configuration
  to `multiline_arguments`.  
  [Mike Ciesielka](https://github.com/maciesielka)
  [#1896](https://github.com/realm/SwiftLint/issues/1896)

* Add `anyobject_protocol` opt-in rule which suggests using `AnyObject` over
  `class` for class-only protocols.  
  [Ornithologist Coder](https://github.com/ornithocoder)
  [#2283](https://github.com/realm/SwiftLint/issues/2283)

* Add options `prefix_pattern` and `suffix_pattern` to rule `file_name`.  
  [Cihat Gündüz](https://github.com/Dschee)
  [#2309](https://github.com/realm/SwiftLint/issues/2309)

* Add new bool config option `if_only` to rule `conditional_returns_on_newline`
  to specify that the rule should only be applied to `if` statements.  
  [Cihat Gündüz](https://github.com/Dschee)
  [#2307](https://github.com/realm/SwiftLint/issues/2307)

* Add support for globs in `excluded` file paths.  
  [Keith Smiley](https://github.com/keith)
  [#2316](https://github.com/realm/SwiftLint/pull/2316)

* Add `only_private` configuration to `prefixed_toplevel_constant` rule.  
  [Keith Smiley](https://github.com/keith)
  [#2315](https://github.com/realm/SwiftLint/pull/2315)

* Make rule `explicit_type_interface` compatible with rule
  `redundant_type_annotation` via new option `allow_redundancy`.  
  [Cihat Gündüz](https://github.com/Dschee)
  [#2312](https://github.com/realm/SwiftLint/issues/2312)

* Add `missing_docs` rule to warn against undocumented declarations.  
  [Nef10](https://github.com/Nef10)
  [Andrés Cecilia Luque](https://github.com/acecilia)
  [#1652](https://github.com/realm/SwiftLint/issues/1652)

### Bug Fixes

* Fix an issue with `control_statement` where commas in clauses prevented the
  rule from applying.  
  [Allen Wu](https://github.com/allewun)

* Fix `explicit_enum_raw_value`, `generic_type_name`, `implicit_return`,
  `required_enum_case`, `quick_discouraged_call`, `array_init`,
  `closure_parameter_position` and `unused_closure_parameter` rules
  when linting with Swift 4.2.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Fix `identifier_name` rule false positives with `enum` when linting
  using Swift 4.2.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [Jacob Greenfield](https://github.com/Coder-256)
  [#2231](https://github.com/realm/SwiftLint/issues/2231)

* Fix a crash when running with Swift 4.2.  
  [Norio Nomura](https://github.com/norio-nomura)
  [SR-7954](https://bugs.swift.org/browse/SR-7954)

* Fix false positive on `attributes` rule when linting a line that is below
  a line with a declaration that has attributes.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2297](https://github.com/realm/SwiftLint/issues/2297)

* `redundant_optional_initialization` rule now lints local variables.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2233](https://github.com/realm/SwiftLint/issues/2233)

* Fix autocorrection for `redundant_type_annotation` rule.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2314](https://github.com/realm/SwiftLint/issues/2314)

## 0.26.0: Maytagged Pointers

### Breaking

* SwiftLint now requires Swift 4.0 or higher to build.  
  [JP Simard](https://github.com/jpsim)

* The `fallthrough` rule is now opt-in.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1892](https://github.com/realm/SwiftLint/issues/1892)

### Enhancements

* Add optional filename verification to the `file_header` rule.
  All occurrences in the pattern of the `SWIFTLINT_CURRENT_FILENAME`
  placeholder are replaced by the name of the validated file.  
  [Anders Hasselqvist](https://github.com/nevil)
  [#1079](https://github.com/realm/SwiftLint/issues/1079)

* Updates the `untyped_error_in_catch` rule to support autocorrection.  
  [Daniel Metzing](https://github.com/dirtydanee)

* Add `no_fallthrough_only` rule to check that `case` statements do not
  contain only a `fallthrough`.  
  [Austin Belknap](https://github.com/dabelknap)

* Add `indented_cases` support to `switch_case_alignment` rule.  
  [Shai Mishali](https://github.com/freak4pc)
  [#2119](https://github.com/realm/SwiftLint/issues/2119)

* Add opt-in `modifier_order` to enforce the order of declaration modifiers.
  Requires Swift 4.1 or later.  
  [Jose Cheyo Jimenez](https://github.com/masters3d)
  [Daniel Metzing](https://github.com/dirtydanee)
  [#1472](https://github.com/realm/SwiftLint/issues/1472)
  [#1585](https://github.com/realm/SwiftLint/issues/1585)

* Validate implicit `subscript` getter in `implicit_getter` rule when using
  Swift 4.1 or later.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#898](https://github.com/realm/SwiftLint/issues/898)

* Add `unavailable_function` opt-in rule to validate that functions that are
  currently unimplemented (using a placeholder `fatalError`) are marked with
  `@available(*, unavailable)`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2127](https://github.com/realm/SwiftLint/issues/2127)

* Updates the `closure_end_indentation` rule to support autocorrection.  
  [Eric Horacek](https://github.com/erichoracek)

* Updates the `literal_expression_end_indentation` rule to support
  autocorrection.  
  [Eric Horacek](https://github.com/erichoracek)

* Add a new `multiline_function_chains` rule to validate that chained function
  calls start either on the same line or one per line.  
  [Eric Horacek](https://github.com/erichoracek)
  [#2214](https://github.com/realm/SwiftLint/issues/2214)

* Improves the `mark` rule's autocorrection.  
  [Eric Horacek](https://github.com/erichoracek)

* Add `redundant_set_access_control` rule to warn against using redundant
  setter ACLs on variable declarations.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1869](https://github.com/realm/SwiftLint/issues/1869)

* Add a new `ignores_interpolated_strings` config parameter to the `line_length`
  rule to ignore lines that include interpolated strings from this rule.  
  [Michael Gray](https://github.com/mishagray)
  [#2100](https://github.com/realm/SwiftLint/pull/2100)

* Add a new `ignores_default_parameters` config parameter to the
  `function_parameter_count` rule to ignore default parameter when calculating
  parameter count. True by default.  
  [Varun P M](https://github.com/varunpm1)
  [#2171](https://github.com/realm/SwiftLint/issues/2171)

* Add `empty_xctest_method` opt-in rule which warns against empty
  XCTest methods.  
  [Ornithologist Coder](https://github.com/ornithocoder)
  [#2190](https://github.com/realm/SwiftLint/pull/2190)

* Add `function_default_parameter_at_end` opt-in rule to validate that
  parameters with defaults are located toward the end of the parameter list in a
  function declaration.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2176](https://github.com/realm/SwiftLint/issues/2176)

* Add `file_name` opt-in rule validating that file names contain the name of a
  type or extension declared in the file (if any).  
  [JP Simard](https://github.com/jpsim)
  [#1420](https://github.com/realm/SwiftLint/issues/1420)

* Add `redundant_type_annotation` opt-in rule which warns against
  unnecessary type annotations for variables.  
  [Šimon Javora](https://github.com/sjavora)
  [#2239](https://github.com/realm/SwiftLint/pull/2239)

* Add `convenience_type` opt-in rule to validate that types hosting only static
  members should be enums to avoid instantiation.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1871](https://github.com/realm/SwiftLint/issues/1871)  

* Support for passing multiple path arguments.  
  [Ben Asher](https://github.com/benasher44)
  [#810](https://github.com/realm/SwiftLint/issues/810)

### Bug Fixes

* Update `LowerACLThanParent` rule to not lint extensions.  
  [Keith Smiley](https://github.com/keith)
  [#2164](https://github.com/realm/SwiftLint/pull/2164)

* Fix operator usage spacing nested generics false positive.  
  [Eric Horacek](https://github.com/erichoracek)
  [#1341](https://github.com/realm/SwiftLint/issues/1341)
  [#1897](https://github.com/realm/SwiftLint/issues/1897)

* Fix autocorrection for several rules
  (`empty_parentheses_with_trailing_closure`, `explicit_init`,
  `joined_default_parameter`, `redundant_optional_initialization` and
  `unused_closure_parameter`) when used with preprocessor macros.  
  [John Szumski](https://github.com/jszumski)
  [Marcelo Fabri](https://github.com/marcelofabri)

* Fix `unneeded_parentheses_in_closure_argument` false negatives when multiple
  violations are nested.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2188](https://github.com/realm/SwiftLint/issues/2188)

* Fix false negatives in `implicit_return` rule when using closures as
  function arguments.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2187](https://github.com/realm/SwiftLint/issues/2187)

* Fix false positives in `attributes` rule when `@testable` is used.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2211](https://github.com/realm/SwiftLint/issues/2211)

* Fix false positives in `prohibited_super_call` rule.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2212](https://github.com/realm/SwiftLint/issues/2212)

* Fix a false positive in `unused_closure_parameter` rule when a parameter
  is used in a string interpolation.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2062](https://github.com/realm/SwiftLint/issues/2062)

* Fixes a case where the `closure_end_indentation` rule wouldn't lint the end
  indentation of non-trailing closure parameters.  
  [Eric Horacek](https://github.com/erichoracek)
  [#2121](https://github.com/realm/SwiftLint/issues/2121)

## 0.25.1: Lid Locked

This is the last release to support building with Swift 3.2 and Swift 3.3.
The next release will require Swift 4.0 or higher to build.

### Breaking

* None.

### Enhancements

* Add `LowerACLThanParent` rule.  
  [Keith Smiley](https://github.com/keith)
  [#2136](https://github.com/realm/SwiftLint/pull/2136)

* Add `UIOffsetMake` to `legacy_constructor` rule.  
  [Nealon Young](https://github.com/nealyoung)
  [#2126](https://github.com/realm/SwiftLint/issues/2126)

* Add a new `excluded` config parameter to the `explicit_type_interface` rule
  to exempt certain types of variables from the rule.  
  [Rounak Jain](https://github.com/rounak)
  [#2028](https://github.com/realm/SwiftLint/issues/2028)

* Add `empty_string` opt-in rule to validate against comparing strings to `""`
  instead of using `.isEmpty`.  
  [Davide Sibilio](https://github.com/idevid)

* Add `untyped_error_in_catch` opt-in rule to warn against declaring errors
  without an explicit type in catch statements instead of using the implicit
  `error` variable.  
  [Daniel Metzing](https://github.com/dirtydanee)
  [#2045](https://github.com/realm/SwiftLint/issues/2045)

* Add `all` keyword for use in disable / enable statement:
  `// swiftlint:disable all`.
  It allows disabling SwiftLint entirely, in-code, for a particular section.  
  [fredpi](https://github.com/fredpi)
  [#2071](https://github.com/realm/SwiftLint/issues/2071)

* Adds `--force-exclude` option to `lint` and `autocorrect` commands, which will
  force SwiftLint to exclude files specified in the config `excluded` even if
  they are explicitly specified with `--path`.  
  [Ash Furrow](https://github.com/ashfurrow)
  [#2051](https://github.com/realm/SwiftLint/issues/2051)

* Adds `discouraged_optional_collection` opt-in rule to encourage the use of
  empty collections instead of optional collections.  
  [Ornithologist Coder](https://github.com/ornithocoder)
  [#1885](https://github.com/realm/SwiftLint/issues/1885)

* Add 4.1.0, 4.1.1 and 4.2.0 to Swift version detection.  
  [Norio Nomura](https://github.com/norio-nomura)
  [#2143](https://github.com/realm/SwiftLint/issues/2143)

* Support building with Swift 4.1.  
  [Norio Nomura](https://github.com/norio-nomura)
  [#2038](https://github.com/realm/SwiftLint/issues/2038)

### Bug Fixes

* Fixes an issue with the `yoda_condition` rule where the severity would always
  display as a warning, and the reason would display as the severity type.  
  [Twig](https://github.com/Twigz)

* Fix TODOs lint message to state that TODOs should be resolved instead of
  avoided.  
  [Adonis Peralta](https://github.com/donileo)
  [#150](https://github.com/realm/SwiftLint/issues/150)

* Fix some cases where `colon` rule wouldn't autocorrect dictionary literals.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2050](https://github.com/realm/SwiftLint/issues/2050)

* Fix linux crash on sources with surrogate pair emojis as variable names.  
  [Cyril Lashkevich](https://github.com/notorca)

* Make `legacy_constructor` rule more reliable, especially for autocorrecting.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2098](https://github.com/realm/SwiftLint/issues/2098)

* Fix `colon` rule autocorrect when preprocessor macros are present.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2099](https://github.com/realm/SwiftLint/issues/2099)

* Fix crash when saving cache if there're entries referring to the same path
  but with different capitalization.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2032](https://github.com/realm/SwiftLint/issues/2032)

* Fix several rules (`empty_enum_arguments`, `explicit_init`
  `empty_parentheses_with_trailing_closure`, `joined_default_parameter`,
  `redundant_optional_initialization`, `redundant_void_return` and
  `unused_closure_parameter`) rules autocorrection inside functions or other
  declarations.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Fix `redundant_void_return` rule autocorrect when preprocessor macros are
  present.  
  [John Szumski](https://github.com/jszumski)
  [#2115](https://github.com/realm/SwiftLint/issues/2115)

* Fix issue where the autocorrect done message used the plural form of "files"
  even if only 1 file changed.  
  [John Szumski](https://github.com/jszumski)

* Fix false positives in `attributes` rule when using Swift 4.1.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2125](https://github.com/realm/SwiftLint/issues/2125)
  [#2141](https://github.com/realm/SwiftLint/issues/2141)

## 0.25.0: Cleaning the Lint Filter

### Breaking

* None.

### Enhancements

* Adds `discouraged_optional_boolean` opt-in rule to discourage
  the use of optional booleans.  
  [Ornithologist Coder](https://github.com/ornithocoder)
  [#2011](https://github.com/realm/SwiftLint/issues/2011)

### Bug Fixes

* Fix some cases where `colon` rule wouldn't be autocorrected.  
  [Manabu Nakazawa](https://github.com/mshibanami)

* Fix false positives in `explicit_acl` rule when declaring functions and
  properties in protocols or implementing `deinit`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2014](https://github.com/realm/SwiftLint/issues/2014)

* Fix false negatives in `unneeded_parentheses_in_closure_argument` rule
  when using `_` as one of the closure arguments.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2017](https://github.com/realm/SwiftLint/issues/2017)

* Fix several rules that use attributes when linting with a Swift 4.1 toolchain.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2019](https://github.com/realm/SwiftLint/issues/2019)

* Don't trigger violations in `let_var_whitespace` rule when using local
  variables when linting with a Swift 4.1 toolchain.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2021](https://github.com/realm/SwiftLint/issues/2021)

* Improve `type_name` rule violations to be positioned on the type name.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2021](https://github.com/realm/SwiftLint/issues/2021)

* Use SourceKit to validate `associatedtype` and `typealias` in `type_name` rule
  when linting with Swift 4.1.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2021](https://github.com/realm/SwiftLint/issues/2021)

* Fix some cases where violations would still be triggered when using the
  `ignores_function_declarations` configuration of `line_length` rule.  
  [Manabu Nakazawa](https://github.com/mshibanami)

* Fix false positive in `empty_enum_arguments` rule when using closures.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2041](https://github.com/realm/SwiftLint/issues/2041)

* Fix false positives in `force_unwrapping` rule when declaring functions that
  return implicitly unwrapped collections (for example `[Int]!` or
  `[AnyHashable: Any]!`).  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#2042](https://github.com/realm/SwiftLint/issues/2042)

* Fix directories with a `.swift` suffix being treated as files.  
  [Jamie Edge](https://github.com/JamieEdge)
  [#1948](https://github.com/realm/SwiftLint/issues/1948)

## 0.24.2: Dented Tumbler

### Breaking

* None.

### Enhancements

* None.

### Bug Fixes

* No longer log if the `indentation` key isn't set in the configuration file.  
  [JP Simard](https://github.com/jpsim)
  [#1998](https://github.com/realm/SwiftLint/issues/1998)

## 0.24.1: Dented Tumbler

### Breaking

* None.

### Enhancements

* Invalidate cache when Swift patch version changes.  
  [Norio Nomura](https://github.com/norio-nomura)

* Add `private_action` opt-in rule which warns against public
  @IBAction methods.  
  [Ornithologist Coder](https://github.com/ornithocoder)
  [#1931](https://github.com/realm/SwiftLint/issues/1931)

* Add `yoda_condition` opt-in rule which warns when Yoda conditions are used.
  That is, when the constant portion of the expression is on the left side of a
  conditional statement.  
  [Daniel Metzing](https://github.com/dirtydanee)
  [#1924](https://github.com/realm/SwiftLint/issues/1924)

* Indentation can now be specified via a configuration file.  
  [Noah McCann](https://github.com/nmccann)
  [RubenSandwich](https://github.com/RubenSandwich)
  [#319](https://github.com/realm/SwiftLint/issues/319)

* Add `required_enum_case` opt-in rule which allows enums that
  conform to protocols to require one or more cases.  Useful for
  result enums.  
  [Donald Ritter](https://github.com/donald-m-ritter)

* Add `discouraged_object_literal` opt-in rule which encourages initializers
  over object literals.  
  [Ornithologist Coder](https://github.com/ornithocoder)
  [#1987](https://github.com/realm/SwiftLint/issues/1987)

* Adds `prefixed_toplevel_constant` opt-in rule which encourages top-level
  constants to be prefixed by `k`.  
  [Ornithologist Coder](https://github.com/ornithocoder)
  [#1907](https://github.com/realm/SwiftLint/issues/1907)

* Added `explicit_acl` opt-in rule to enforce explicit access control levels.  
  [Josep Rodriguez](https://github.com/joseprl89)
  [#1822](https://github.com/realm/SwiftLint/issues/1649)

### Bug Fixes

* Fix false positives in `control_statement` rule when methods with keyword
  names are used.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1946](https://github.com/realm/SwiftLint/issues/1946)

* Fix false positives in `for_where` rule when pattern matching (`if case`)
  is used.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1968](https://github.com/realm/SwiftLint/issues/1968)

* Fix false positives in `unused_closure_parameter` rule when closure is wrapped
  in parentheses.  
  [JP Simard](https://github.com/jpsim)
  [#1979](https://github.com/realm/SwiftLint/issues/1979)

## 0.24.0: Timed Dry

### Breaking

* SwiftLint now requires Xcode 9 and Swift 3.2+ to build.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Remove `SwiftExpressionKind.other`.  
  [Marcelo Fabri](https://github.com/marcelofabri)

### Enhancements

* Add `sorted_first_last` opt-in rule to encourage using `min()` or `max()`
  over `sorted().first` or `sorted().last`.  
  [Tom Quist](https://github.com/tomquist)
  [#1932](https://github.com/realm/SwiftLint/issues/1932)

* Add `quick_discouraged_focused_test` opt-in rule which warns against
  focused tests in Quick tests.  
  [Ornithologist Coder](https://github.com/ornithocoder)
  [#1905](https://github.com/realm/SwiftLint/issues/1905)

* Add `override_in_extension` opt-in rule that warns against overriding
  declarations in an `extension`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1884](https://github.com/realm/SwiftLint/issues/1884)

* Add `[f,x]{describe, context, itBehavesLike}` to `quick_discouraged_call`
  rule.  
  [Ornithologist Coder](https://github.com/ornithocoder)
  [#1903](https://github.com/realm/SwiftLint/issues/1903)

* Add `quick_discouraged_pending_test` opt-in rule which warns against
  pending tests in Quick tests.  
  [Ornithologist Coder](https://github.com/ornithocoder)
  [#1909](https://github.com/realm/SwiftLint/issues/1909)

* Speed up equality tests for `[Rule]` and `Configuration` values.  
  [JP Simard](https://github.com/jpsim)

* Make `Configuration` conform to `Hashable`.  
  [JP Simard](https://github.com/jpsim)

* Speed up reading cached results by about 200%.  
  [JP Simard](https://github.com/jpsim)

* Add `catch` to the statements checked by the `control_statement` rule.  
  [JP Simard](https://github.com/jpsim)

* Make `sorted_imports` correctable.  
  [Samuel Susla](https://github.com/sammy-sc)
  [JP Simard](https://github.com/jpsim)
  [#1822](https://github.com/realm/SwiftLint/issues/1822)

* Make `sorted_imports` only validate within "groups" of imports on directly
  adjacent lines.  
  [Samuel Susla](https://github.com/sammy-sc)
  [JP Simard](https://github.com/jpsim)
  [#1822](https://github.com/realm/SwiftLint/issues/1822)

### Bug Fixes

* Extend `first_where` and `contains_over_first_not_nil` rules to also detect
  cases where calls to `filter` and `first` are parenthesized.  
  [Tom Quist](https://github.com/tomquist)

* Correct equality tests for `Configuration` values. They previously didn't
  account for `warningThreshold` or `cachePath`.  
  [JP Simard](https://github.com/jpsim)

* Fix false positive in `multiline_parameters` rule when parameter is a closure
  with default value.  
  [Ornithologist Coder](https://github.com/ornithocoder)
  [#1912](https://github.com/realm/SwiftLint/issues/1912)

* Fix caching on Linux.  
  [JP Simard](https://github.com/jpsim)

* Fix crashes due to races.  
  [JP Simard](https://github.com/jpsim)

* Fix `String.characters` deprecation warnings when compiling with Swift
  4.0.2.  
  [JP Simard](https://github.com/jpsim)

## 0.23.1: Rewash: Forgotten Load Edition

### Breaking

* None.

### Enhancements

* None.

### Bug Fixes

* Fix false positive in `array_init` rule when using a `map` that
  doesn't take a closure.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1878](https://github.com/realm/SwiftLint/issues/1878)

* `superfluous_disable_command` rule can now be disabled as expected when
  using `// swiftlint:disable superfluous_disable_command`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1890](https://github.com/realm/SwiftLint/issues/1890)

## 0.23.0: Permanent Press Cycle

### Breaking

* None.

### Enhancements

* Fix csv reporter to output records with new lines.  
  [atetlaw](https://github.com/atetlaw)

* Add `contains_over_first_not_nil` rule to encourage using `contains` over
  `first(where:) != nil`.  
  [Samuel Susla](https://github.com/sammy-sc)
  [#1514](https://github.com/realm/SwiftLint/issues/1514)

* Add `fallthrough` rule that flags usage of `fallthrough`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1834](https://github.com/realm/SwiftLint/issues/1834)

* Improve `colon` rule to catch violations in dictionary types
  (e.g. `[String: Int]`), when using `Any` and on function calls.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1074](https://github.com/realm/SwiftLint/issues/1074)
  [#1389](https://github.com/realm/SwiftLint/issues/1389)

* Add `switch_case_alignment` rule to validate that `case` and `default`
  statements are vertically aligned with their enclosing `switch` statement.  
  [Austin Lu](https://github.com/austinlu)

* Add `array_init` opt-in rule to validate that `Array(foo)` should be preferred
  over `foo.map({ $0 })`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1271](https://github.com/realm/SwiftLint/issues/1271)

* Truncate long configuration console descriptions to fit in the console window
  when running `swiftlint rules`.  
  [JP Simard](https://github.com/jpsim)
  [#1002](https://github.com/realm/SwiftLint/issues/1002)

* Add `multiline_arguments` opt-in rule that warns to either keep
  all the arguments of a function call on the same line,
  or one per line.  
  [Marcel Jackwerth](https://github.com/sirlantis)

* Add `unneeded_break_in_switch` rule to validate that no extra `break`s are
  added in `switch` statements.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1870](https://github.com/realm/SwiftLint/issues/1870)

* Add `literal_expression_end_indentation` opt-in rule to validate that
  array and dictionary literals ends have the same indentation as the line
  that started them.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1435](https://github.com/realm/SwiftLint/issues/1435)

### Bug Fixes

* Improve how `opening_brace` rule reports violations locations.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1811](https://github.com/realm/SwiftLint/issues/1811)

* Fix false negatives in `unneeded_parentheses_in_closure_argument` rule
  when using capture lists.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1817](https://github.com/realm/SwiftLint/issues/1817)

* Fix handling of attributes (`lazy`, `objc`, etc.) for the `let_var_whitespace`
  rule.  
  [David Catmull](https://github.com/Uncommon)
  [#1770](https://github.com/realm/SwiftLint/issues/1770)
  [#1812](https://github.com/realm/SwiftLint/issues/1812)

* Fix false positives in `for_where` rule when using `if var` inside `for`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1838](https://github.com/realm/SwiftLint/issues/1838)

* Fix false positive in `class_delegate_protocol` rule when using Swift 4.0.1.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1856](https://github.com/realm/SwiftLint/issues/1856)

* Print multi-line configuration values in a single line when running
  `swiftlint rules` to avoid breaking the table format.  
  [JP Simard](https://github.com/jpsim)
  [#1002](https://github.com/realm/SwiftLint/issues/1002)

* Ignore SwiftLint commands (`swiftlint:(disable|enable)`) in `file_header`
  rule, making it work better with `superfluous_disable_command` rule.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1810](https://github.com/realm/SwiftLint/issues/1810)

* Fix false negatives in `generic_type_name`, `identifier_name` and `type_name`
  rules when using `allowed_symbols`.  
  [Marcelo Fabri](https://github.com/marcelofabri)

## 0.22.0: Wrinkle-free

### Breaking

* Nested configurations will now be merged with parent configurations rather
  than replace them outright.  
  [Stéphane Copin](https://github.com/stephanecopin)
  [JP Simard](https://github.com/jpsim)
  [#676](https://github.com/realm/SwiftLint/issues/676)

### Enhancements

* Add `is_disjoint` rule to encourage using `Set.isDisjoint(with:)` over
  `Set.intersection(_:).isEmpty`.  
  [JP Simard](https://github.com/jpsim)

* Add `xctfail_message` rule to enforce XCTFail
  calls to include a description of the assertion.  
  [Ornithologist Coder](https://github.com/ornithocoder)
  [#1370](https://github.com/realm/SwiftLint/issues/1370)

* Add `joined_default_parameter` correctable opt-in rule to discourage
  explicit usage of the default separator.  
  [Ornithologist Coder](https://github.com/ornithocoder)
  [#1093](https://github.com/realm/SwiftLint/issues/1093)
  [#1757](https://github.com/realm/SwiftLint/issues/1757)

* Files with extensions other than `.swift` can now be used as arguments
  to `--file` when linting or autocorrecting.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1721](https://github.com/realm/SwiftLint/issues/1721)

* Allow `()?`, `Void?`, `()!`, and `Void!` as return types in
  `redundant_void_return` rule.  
  [Ryan Booker](https://github.com/ryanbooker)
  [#1761](https://github.com/realm/SwiftLint/issues/1761)

* Add `single_test_class` opt-in rule to validate that test files
  only contain a single `QuickSpec` or `XCTestCase` subclass.  
  [Ornithologist Coder](https://github.com/ornithocoder)
  [#1779](https://github.com/realm/SwiftLint/issues/1779)

* Produce an error when a `// swiftlint:disable` command does not silence
  any violations.  
  [JP Simard](https://github.com/jpsim)
  [#1102](https://github.com/realm/SwiftLint/issues/1102)

* Add `quick_discouraged_call` opt-in rule to discourage calls and object
  initialization inside 'describe' and 'context' block in Quick tests.  
  [Ornithologist Coder](https://github.com/ornithocoder)
  [#1781](https://github.com/realm/SwiftLint/issues/1781)

* Invalidate cache when Swift version changes.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Add `pattern_matching_keywords` opt-in rule to enforce moving `let` and `var`
  keywords outside tuples in a `switch`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#202](https://github.com/realm/SwiftLint/issues/202)

* Add `explicit_enum_raw_value` opt-in rule to allow refactoring the
  Swift API without breaking the API contract.  
  [Mazyod](https://github.com/mazyod)
  [#1778](https://github.com/realm/SwiftLint/issues/1778)

* Add `no_grouping_extension` opt-in rule to disallow the use of extensions
  for code grouping purposes within the same file.  
  [Mazyod](https://github.com/mazyod)
  [#1767](https://github.com/realm/SwiftLint/issues/1767)

* Improve `syntactic_sugar` violation message to be type-specific.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1803](https://github.com/realm/SwiftLint/issues/1803)

* Add `multiple_closures_with_trailing_closure` rule that disallows trailing
  closure syntax when passing more than one closure argument to a function.  
  [Erik Strottmann](https://github.com/erikstrottmann)
  [#1801](https://github.com/realm/SwiftLint/issues/1801)

### Bug Fixes

* Fix false positive on `force_unwrapping` rule when declaring
  local variable with implicity unwrapped type.  
  [Otávio Lima](https://github.com/otaviolima)
  [#1710](https://github.com/realm/SwiftLint/issues/1710)

* Fix the warning message and autocorrection of `vertical_whitespace` rule to
  display the maximum empty lines allowed if `max_empty_lines` is greater
  than 1.  
  [Hossam Ghareeb](https://github.com/hossamghareeb)
  [#1763](https://github.com/realm/SwiftLint/issues/1763)

* Fix for the wrong configuration being used when using `--path` and a
  configuration exists in a parent directory.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1744](https://github.com/realm/SwiftLint/issues/1744)

* Fix false positive on `unused_enumerated` rule with complex variable
  bindings.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1787](https://github.com/realm/SwiftLint/issues/1787)

* Fix incorrect violations and autocorrections on
  `unneeded_parentheses_in_closure_argument` rule that were generated in some
  cases (mainly when using chained method calls with closures).  
  [Marcelo Fabri](https://github.com/marcelofabri)

## 0.21.0: Vintage Washboard

### Breaking

* Xcode 8.3 or later and Swift 3.1 or later are required to build.  
  [Norio Nomura](https://github.com/norio-nomura)

### Enhancements

* Rules are now categorized as `lint`, `idiomatic`, `style`, `metrics`
  or `performance`. Currently this is just used for documentation purposes
  when you run `swiftlint rules` or `swiftlint generate-docs`.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Add [rules documentation](Rules.md) generation.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1078](https://github.com/realm/SwiftLint/issues/1078)

* Add `private_over_fileprivate` correctable rule to check for top-level usages
  of `fileprivate` and recommend `private` instead. This is in line with
  SE-0169's goal "for `fileprivate` to be used rarely". There is a also a new
  `strict_fileprivate` opt-in rule that will mark every `fileprivate`
  as a violation (especially useful with Swift 4).  
  [Jose Cheyo Jimenez](https://github.com/masters3d)
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1469](https://github.com/realm/SwiftLint/issues/1469)
  [#1058](https://github.com/realm/SwiftLint/issues/1058)

* Add `let_var_whitespace` opt-in rule to enforce that `let`/`var` declarations
  should be separated from other statements by a single blank line.  
  [Uncommon](https://github.com/Uncommon)
  [#1461](https://github.com/realm/SwiftLint/issues/1461)

* Improve performance when linting and correcting on Linux,
  matching macOS behavior.  
  [JP Simard](https://github.com/jpsim)
  [#1577](https://github.com/realm/SwiftLint/issues/1577)

* Don't trigger `implicit_getter` violations when attributes (such as `mutating`
  or `@inline`) are present.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1309](https://github.com/realm/SwiftLint/issues/1309)
  [#1589](https://github.com/realm/SwiftLint/issues/1589)

* Add `--use-tabs` option to `AutoCorrectOptions`, enabling formatting using
  tabs over spaces.  
  [Cody Winton](https://github.com/codytwinton)
  [#1327](https://github.com/realm/SwiftLint/issues/1327)

* Improve `autocorrect` performance by running it in parallel.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1578](https://github.com/realm/SwiftLint/issues/1578)

* Support building with Xcode 9 beta 3 in Swift 3.2 mode.  
  [JP Simard](https://github.com/jpsim)

* Add support for optional `error` severity level configuration.  
  [Jamie Edge](https://github.com/JamieEdge)
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1647](https://github.com/realm/SwiftLint/issues/1647)

* Add `unneeded_parentheses_in_closure_argument` opt-in correctable rule that
  warns against using parentheses around argument declarations in closures.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1483](https://github.com/realm/SwiftLint/issues/1483)

* Add `--disabled` flag to `swiftlint rules` to print only rules that are
  not enabled in the configuration.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Add `ignore_comment_only_lines` boolean configuration option
  to `file_length` rule. With the option enabled, `file_length` will
  ignore lines which have only comments.  
  [Samuel Susla](https://github.com/sammy-SC)
  [#1165](https://github.com/realm/SwiftLint/issues/1165)

* Improve `file_header` rule description.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1492](https://github.com/realm/SwiftLint/issues/1492)

* Add `trailing_closure` opt-in rule that validates that trailing
  closure syntax should be used whenever possible.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#54](https://github.com/realm/SwiftLint/issues/54)

* Shebang (`#!`) in the beginning of a file is now ignored by all rules.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1294](https://github.com/realm/SwiftLint/issues/1294)

* Add `block_based_kvo` rule that enforces the usage of the new block based
  KVO API added when linting with Swift 3.2 or later.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1714](https://github.com/realm/SwiftLint/issues/1714)

* Make `file_header` rule ignore doc comments.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1719](https://github.com/realm/SwiftLint/issues/1719)

* Allow using environment variables in a configuration file in the form of
  `${SOME_VARIABLE}`. The variables will be expanded when the configuration
  is first loaded.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1512](https://github.com/realm/SwiftLint/issues/1512)

* Treat `yes`, `no`, `on` and `off` as strings (and not booleans) when loading
  configuration files.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1424](https://github.com/realm/SwiftLint/issues/1424)

* Add `discouraged_direct_init` rule that discourages direct
  initialization of certain types.  
  [Ornithologist Coder](https://github.com/ornithocoder)
  [#1306](https://github.com/realm/SwiftLint/issues/1306)

### Bug Fixes

* Fix false positive on `redundant_discardable_let` rule when using
  `while` statements.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1669](https://github.com/realm/SwiftLint/issues/1669)

* Fix all custom rules not being applied when any rule is configured
  incorrectly.  
  [Jamie Edge](https://github.com/JamieEdge)
  [#1586](https://github.com/realm/SwiftLint/issues/1586)

* Fix crash when using `--config` with a relative path and
  `--path` with a file.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1694](https://github.com/realm/SwiftLint/issues/1694)

* Fix `mark` rule corrections generating invalid code in some cases.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1029](https://github.com/realm/SwiftLint/issues/1029)

* Fix false positive in `empty_enum_arguments` rule when using wildcards and
  `where` clauses.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1722](https://github.com/realm/SwiftLint/issues/1722)

* Fix false positive in `large_tuple` rule when using throwing closure.  
  [Liquidsoul](https://github.com/liquidsoul)

* Make `vertical_parameter_alignment` more robust, fixing false positives and
  detecting previously missed violations.  
  [JP Simard](https://github.com/jpsim)
  [#1488](https://github.com/realm/SwiftLint/issues/1488)

## 0.20.1: More Liquid Fabric Softener

### Breaking

* None.

### Enhancements

* None.

### Bug Fixes

* Fix typo in `FatalErrorMessageRule`.  
  [Alexander Lash](https://github.com/abl)

* Don't trigger an `extension_access_modifier` violation when all extension
  members are `open`, as `open extension` is not supported by Swift.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1629](https://github.com/realm/SwiftLint/issues/1629)

* Don't trigger a `vertical_parameter_alignment_on_call` violation when
  trailing closures are used.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1635](https://github.com/realm/SwiftLint/issues/1635)

* Make `vertical_parameter_alignment_on_call` more flexible when multiline
  parameters are used.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1630](https://github.com/realm/SwiftLint/issues/1630)
  [#1643](https://github.com/realm/SwiftLint/issues/1643)

* Use the directory's `.swiftlint.yml` when `--path` is used.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1631](https://github.com/realm/SwiftLint/issues/1631)

## 0.20.0: Liquid Fabric Softener

### Breaking

* None.

### Enhancements

* Detect more violations of `force_unwrapping` when using subscripts.  
  [Otávio Lima](https://github.com/otaviolima)

* Match `(Void)` as return type in the `void_return` rule.  
  [Anders Hasselqvist](https://github.com/nevil)

* 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](https://github.com/ornithocoder)

* Update `function_parameter_count` rule to ignore overridden methods.  
  [Markus Gasser](https://github.com/frenetisch-applaudierend)
  [#1562](https://github.com/realm/SwiftLint/issues/1562)

* Skip files with valid cache & no violations when auto correcting.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1554](https://github.com/realm/SwiftLint/issues/1554)

* Don't trigger violations from the `private_unit_test` rule when a method has
  parameters.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1532](https://github.com/realm/SwiftLint/issues/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](https://github.com/marcelofabri)
  [#1525](https://github.com/realm/SwiftLint/issues/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](https://github.com/marcelofabri)
  [#1546](https://github.com/realm/SwiftLint/issues/1546)

* Add `vertical_parameter_alignment_on_call` opt-in rule that validates that
  parameters are vertically aligned on a method call.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1037](https://github.com/realm/SwiftLint/issues/1037)

* Add `code_literal` and `image_literal` boolean configuration options to
  `object_literal` rule. They allow to only check for one or the other
  literal type instead of both together.  
  [Cihat Gündüz](https://github.com/Dschee)
  [#1587](https://github.com/realm/SwiftLint/issues/1587)

### Bug Fixes

* Fix false positive in `empty_enum_arguments` rule when calling methods.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1597](https://github.com/realm/SwiftLint/issues/1597)

* Fix crash in `unused_closure_parameter` rule when using unicode identifiers.  
  [Woo-Sik Byun](https://github.com/woosiki)
  [Marcelo Fabri](https://github.com/marcelofabri)

* Fix two false positives in `force_unwrapping` rule.  
  [Otávio Lima](https://github.com/otaviolima)
  [#614](https://github.com/realm/SwiftLint/issues/614)
  [#977](https://github.com/realm/SwiftLint/issues/977)
  [#1614](https://github.com/realm/SwiftLint/issues/1614)

* Fix custom rules not working correctly with comment commands.  
  [JP Simard](https://github.com/jpsim)
  [#1558](https://github.com/realm/SwiftLint/issues/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](https://github.com/jpsim)
  [#1531](https://github.com/realm/SwiftLint/issues/1531)

* Fix `empty_count` rule false positive in words that include "count".  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1622](https://github.com/realm/SwiftLint/issues/1622)

* Use `validates_start_with_lowercase` key when decoding configurations for
  `generic_type_name`, `identifier_name` and `type_name` rules. This key was
  used on the docs, but internally `validates_start_lowercase` was used.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1626](https://github.com/realm/SwiftLint/issues/1626)

## 0.19.0: Coin-Operated Machine

### Breaking

* Remove support for Swift 2.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1453](https://github.com/realm/SwiftLint/issues/1453)

* Remove `missing_docs` and `valid_docs` rules since
  they were already disabled.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1453](https://github.com/realm/SwiftLint/issues/1453)

* Add `modificationDate(forFileAtPath:)` function requirement to
  `LintableFileManager` protocol.  
  [Victor Pimentel](https://github.com/victorpimentel)

* Several breaking changes to `LinterCache`.  
  [Victor Pimentel](https://github.com/victorpimentel)
  [JP Simard](https://github.com/jpsim)

* Remove `Configuration.hash` property.  
  [Victor Pimentel](https://github.com/victorpimentel)

* Rename `ConditionalReturnsOnNewline` struct to
  `ConditionalReturnsOnNewlineRule` to match rule naming conventions.  
  [JP Simard](https://github.com/jpsim)

### Enhancements

* Cache linter results for files unmodified since the previous linter run.  
  [Victor Pimentel](https://github.com/victorpimentel)
  [JP Simard](https://github.com/jpsim)
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1184](https://github.com/realm/SwiftLint/issues/1184)
  [#1550](https://github.com/realm/SwiftLint/issues/1550)

* Add opt-in configurations to `generic_type_name`, `identifier_name` and
  `type_name` rules to allow excluding non-alphanumeric characters and names
  that start with uppercase.  
  [Javier Hernández](https://github.com/jaherhi)
  [#541](https://github.com/realm/SwiftLint/issues/541)

* Adds support for `excluded` in custom rules to exclude files.  
  [Nigel Flack](https://github.com/nigelflack)
  [#1437](https://github.com/realm/SwiftLint/issues/1437)

* Make `trailing_comma` rule autocorrectable.  
  [Samuel Susla](https://github.com/sammy-SC)
  [Jeremy David Giesbrecht](https://github.com/SDGGiesbrecht)
  [#1326](https://github.com/realm/SwiftLint/issues/1326)

* Added `no_extension_access_modifier` opt-in rule to disallow access modifiers
  completely, à la SE-0119.  
  [Jose Cheyo Jimenez](https://github.com/masters3d)
  [#1457](https://github.com/realm/SwiftLint/issues/1457)

* Add lowercase and missing colon checks to the `mark` rule.  
  [Jason Moore](https://github.com/xinsight)

* Improve violation reason wording in `function_body_length`,
  `large_type`, and `type_body_length` rules.  
  [ultimatedbz](https://github.com/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` or `open`).  
  [J. Cheyo Jimenez](https://github.com/masters3d)
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#58](https://github.com/realm/SwiftLint/issues/58)

* Add `implicit_return` opt-in rule that warns against using the `return`
  keyword when it can be omitted inside closures.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1194](https://github.com/realm/SwiftLint/issues/1194)

* Add option to `unused_optional_binding` rule to ignore `try?`
  in `guard` statements.  
  [Sega-Zero](https://github.com/Sega-Zero)
  [#1432](https://github.com/realm/SwiftLint/issues/1432)

* Add `empty_enum_arguments` correctable rule that warns against using
  silent associated values inside a `case`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1425](https://github.com/realm/SwiftLint/issues/1425)
  [#1549](https://github.com/realm/SwiftLint/issues/1549)

* Remove `file.zip` from the `Pods` directory when installing SwiftLint via
  CocoaPods.  
  [Hesham Salman](https://github.com/heshamsalman)
  [#1507](https://github.com/realm/SwiftLint/issues/1507)

* Add `protocol_property_accessors_order` correctable rule that validates
  that the order of accessors is `get set` when declaring variables
  in protocols.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1504](https://github.com/realm/SwiftLint/issues/1504)

* Make `Region` & `Command` structs conform to `Equatable`.  
  [JP Simard](https://github.com/jpsim)

* Make `closure_spacing` a `CorrectableRule`.  
  [J. Cheyo Jimenez](https://github.com/masters3d)

### Bug Fixes

* `emoji` and `checkstyle` reporter output report sorted by file name.  
  [norio-nomura](https://github.com/norio-nomura)
  [#1429](https://github.com/realm/SwiftLint/issues/1429)

* Prevent false positive in `shorthand_operator` rule.  
  [sammy-SC](https://github.com/sammy-SC)
  [#1254](https://github.com/realm/SwiftLint/issues/1254)

* Fix typo in `DiscardedNotificationCenterObserverRule`.  
  [Spencer Kaiser](https://github.com/spencerkaiser)

* Fix `empty_parameters` rule with Swift 3.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1460](https://github.com/realm/SwiftLint/issues/1460)

* Prevent triggering `redundant_optional_initialization` rule
  on a `lazy var` since it needs initialization.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1334](https://github.com/realm/SwiftLint/issues/1334)

* Fix `ignores_case_statements` key in `cyclomatic_complexity` description.  
  [Jeff Blagdon](https://github.com/jefflovejapan)
  [#1434](https://github.com/realm/SwiftLint/issues/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](https://github.com/rjhodge)
  [JP Simard](https://github.com/jpsim)
  [#1520](https://github.com/realm/SwiftLint/issues/1520)

* Fix crash or incorrect violation location with strings including multi-byte
  unicode characters.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1006](https://github.com/realm/SwiftLint/issues/1006)

* Fix false positive in `syntactic_sugar` rule when using nested types named
  `Optional`, `ImplicitlyUnwrappedOptional`, `Array` or `Dictionary`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1508](https://github.com/realm/SwiftLint/issues/1508)

* Fix false positives in `prohibited_super_call` & `overridden_super_call` rules
  where calls to `super` were done in nested scopes such as `defer` blocks.  
  [JP Simard](https://github.com/jpsim)
  [#1301](https://github.com/realm/SwiftLint/issues/1301)

* Fix non-root configurations logging configuration warnings more than once.  
  [JP Simard](https://github.com/jpsim)
  [#949](https://github.com/realm/SwiftLint/issues/949)

* Fix some overlapping `// swiftlint` commands not being applied.  
  [JP Simard](https://github.com/jpsim)
  [#1388](https://github.com/realm/SwiftLint/issues/1388)

## 0.18.1: Misaligned Drum

### Breaking

* None.

### Enhancements

* None.

### Bug Fixes

* Compile releases in the 'Release' configuration rather than 'Debug'.  
  [JP Simard](https://github.com/jpsim)

## 0.18.0: Misaligned Drum

### Breaking

* 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](https://github.com/norio-nomura)
  [#1412](https://github.com/realm/SwiftLint/issues/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:

  ```yaml
  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
  ```

  [JP Simard](https://github.com/jpsim)

### Enhancements

* Support compiling with Xcode 8.3 and Swift 3.1.  
  [Keith Smiley](https://github.com/keith)

* Fix false positives on `for_where` rule and skip violation on
  complex conditions.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1387](https://github.com/realm/SwiftLint/issues/1387)

* Print YAML configuration errors in locatable format compatible with Xcode's
  Issue Navigator.
  ![A list of issues and an editor open in Xcode with one line in the editor being highlighted with an error overlay.](https://cloud.githubusercontent.com/assets/33430/24688866/f18d40f4-19fd-11e7-8f17-72f1fca20406.png)
  [JP Simard](https://github.com/jpsim)

### Bug Fixes

* Fix --lenient enforcement not being applied to all violations.  
  [aaroncrespo](https://github.com/aaroncrespo)
  [#1391](https://github.com/realm/SwiftLint/issues/1391)

* Fix false positives in `unused_optional_binding` rule.  
  [Daniel Rodríguez Troitiño](https://github.com/drodriguez)
  [#1376](https://github.com/realm/SwiftLint/issues/1376)

* Fix false positives in `redundant_discardable_let` rule.  
  [Jeremy David Giesbrecht](https://github.com/SDGGiesbrecht)
  [#1415](https://github.com/realm/SwiftLint/issues/1415)

## 0.17.0: Extra Rinse Cycle

### Breaking

* `variable_name` rule (`VariableNameRule`) is now `identifier_name`
  (`IdentifierNameRule`) as it validates other identifiers as well.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#663](https://github.com/realm/SwiftLint/issues/663)

* Fix `sorted_imports` rule to sort ignoring case.  
  [Keith Smiley](https://github.com/keith)
  [#1185](https://github.com/realm/SwiftLint/issues/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](https://github.com/marcelofabri)

### Enhancements

* Add `implicitly_unwrapped_optional` opt-in rule that warns against using
  implicitly unwrapped optionals, except cases when this IUO is an IBOutlet.  
  [Siarhei Fedartsou](https://github.com/SiarheiFedartsou)
  [#56](https://github.com/realm/SwiftLint/issues/56)

* Performance improvements to `generic_type_name`,
  `redundant_nil_coalescing`, `mark`, `first_where` and
  `vertical_whitespace` rules.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Add `discarded_notification_center_observer` rule that warns when the result
  of `NotificationCenter.addObserver(forName:object:queue:using:)` is not stored
  so it can be removed later.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1062](https://github.com/realm/SwiftLint/issues/1062)

* Add `notification_center_detachment` rule that warns against an object
  removing itself from `NotificationCenter` in an unsafe location.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1061](https://github.com/realm/SwiftLint/issues/1061)

* Accept `AnyObject` and `NSObjectProtocol` in `class_delegate_protocol`.  
  [Jon Shier](https://github.com/jshier)
  [#1261](https://github.com/realm/SwiftLint/issues/1261)

* Add `ignores_function_declarations` and `ignores_comments` as options to
  `LineLengthRule`.  
  [Michael L. Welles](https://github.com/mlwelles)
  [#598](https://github.com/realm/SwiftLint/issues/598)
  [#975](https://github.com/realm/SwiftLint/issues/975)

* Add `for_where` rule that validates that `where` is used in a `for` loop
  instead of a single `if` expression inside the loop.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1228](https://github.com/realm/SwiftLint/issues/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](https://github.com/marcelofabri)
  [#1278](https://github.com/realm/SwiftLint/issues/1278)

* Add `ignores_case_statements` as option to `CyclomaticComplexityRule`.  
  [Michael L. Welles](https://github.com/mlwelles)
  [#1298](https://github.com/realm/SwiftLint/issues/1298)

* Add correctable `redundant_discardable_let` rule that warns when
  `let _ = foo()` is used to discard a result from a function instead of
  `_ = foo()`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1232](https://github.com/realm/SwiftLint/issues/1232)

* Accept global and local variables in `implicit_getter` rule.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Add `--enabled` (or `-e`) switch to the `rules` CLI command, to only display
  enabled rules.  
  [Natan Rolnik](https://github.com/NatanRolnik)
  [#1270](https://github.com/realm/SwiftLint/issues/1270)

* Now `nesting` rule can be configured with a type and statement level.  
  [Hayashi Tatsuya](https://github.com/sora0077)
  [#1318](https://github.com/realm/SwiftLint/issues/1318)

* Add `explicit_type_interface` opt-in rule that validates that the properties
  have an explicit type interface.  
  [Kim de Vos](https://github.com/kimdv)

* Add `--lenient` CLI option to `lint` command. Facilitates running a lint task
  that doesn't fail a pipeline of other tasks.  
  [aaroncrespo](https://github.com/aaroncrespo)
  [#1322](https://github.com/realm/SwiftLint/issues/1322)

* Add `fatal_error_message` opt-in rule that validates that `fatalError()` calls
  have a message.  
  [Kim de Vos](https://github.com/kimdv)
  [#1348](https://github.com/realm/SwiftLint/issues/1348)

### Bug Fixes

* Fix crashes when accessing cached regular expressions when linting in
  parallel.  
  [JP Simard](https://github.com/jpsim)
  [#1344](https://github.com/realm/SwiftLint/issues/1344)

* Fix a false positive on `large_tuple` rule when using closures.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1234](https://github.com/realm/SwiftLint/issues/1234)

* Fix `force_unwrap` false positive for bool negation.  
  [Aaron McTavish](https://github.com/aamctustwo)
  [#918](https://github.com/realm/SwiftLint/issues/918)

* Fix false positive and wrong correction on `number_separator` rule.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1242](https://github.com/realm/SwiftLint/issues/1242)

* Retain closure parameter types when they are specified during autocorrect.  
  [Allen Zeng](https://github.com/allen-zeng)
  [#1175](https://github.com/realm/SwiftLint/issues/1175)

* Fix `redundant_void_return` matches if return type starts with Void~.  
  [Hayashi Tatsuya](https://github.com/sora0077)

* Ignore `unused_closure_parameter` rule on closures that are called inline.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1161](https://github.com/realm/SwiftLint/issues/1161)

* Disable `valid_docs` and `missing_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](https://github.com/jpsim)
  [#728](https://github.com/realm/SwiftLint/issues/728)

* Fix false positive on `large_tuple` rule when using generics inside a tuple.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1257](https://github.com/realm/SwiftLint/issues/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](https://github.com/marcelofabri)
  [#1237](https://github.com/realm/SwiftLint/issues/1237)

* Reimplement `switch_case_on_newline` rule to be an `ASTRule` and be more
  reliable, fixing some false negatives and false positives.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1268](https://github.com/realm/SwiftLint/issues/1268)

* Fix `closure_end_indentation` rule false positive when using single-line
  closures.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1216](https://github.com/realm/SwiftLint/issues/1216)

* Fix `todo` rule messages when the comment is not on a new line.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1304](https://github.com/realm/SwiftLint/issues/1304)

* Fix false negative on `unused_closure_parameter` rule.  
  [Hayashi Tatsuya](https://github.com/sora0077)

* Fix `checkstyle` report format.  
  [Yuki Oya](https://github.com/YukiOya)

## 0.16.1: Commutative Fabric Sheets

### Breaking

* None.

### Enhancements

* Improve `unused_optional_binding` rule on tuples check.  
  [Rafael Machado](https://github.com/rakaramos)

* Update `variable_name` to ignore overrides.  
  [Aaron McTavish](https://github.com/aamctustwo)
  [#1169](https://github.com/realm/SwiftLint/issues/1169)

* Update `number_separator` rule to allow for specifying
  minimum length of fraction.  
  [Bjarke Søndergaard](https://github.com/bjarkehs)
  [#1200](https://github.com/realm/SwiftLint/issues/1200)

* Update `legacy_constant` rule to support `CGFloat.pi` and `Float.pi`.  
  [Aaron McTavish](https://github.com/aamctustwo)
  [#1198](https://github.com/realm/SwiftLint/issues/1198)

### Bug Fixes

* Fix false positives on `shorthand_operator` rule.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1156](https://github.com/realm/SwiftLint/issues/1156)
  [#1163](https://github.com/realm/SwiftLint/issues/1163)

* Fix false positive on `redundant_optional_initialization` rule.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1159](https://github.com/realm/SwiftLint/issues/1159)

* Fix false positive on `operator_usage_whitespace` rule with decimal
  literals in exponent format.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1153](https://github.com/realm/SwiftLint/issues/1153)

* Fix `excluded` configuration not excluding files.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1166](https://github.com/realm/SwiftLint/issues/1166)

* Disable commutative operations on `shorthand_operator` rule.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1182](https://github.com/realm/SwiftLint/issues/1182)
  [#1183](https://github.com/realm/SwiftLint/issues/1183)
  [#1211](https://github.com/realm/SwiftLint/issues/1211)

* Fix crash when running in a Sandboxed environment, which also fixes Homebrew
  distribution. Set the `SWIFTLINT_SWIFT_VERSION` environment variable to either
  `2` or `3` to force that operation mode, bypassing the Swift version
  determined from SourceKit.  
  [JP Simard](https://github.com/jpsim)

## 0.16.0: Maximum Energy Efficiency Setting

### Breaking

* Several API breaking changes were made to conform to the Swift 3 API Design
  Guidelines. We apologize for any inconvenience this may have caused.  
  [JP Simard](https://github.com/jpsim)

### Enhancements

* Speed up linting by caching linter results across invocations.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#868](https://github.com/realm/SwiftLint/issues/868)

* Speed up linting by processing multiple files and rules concurrently.  
  [JP Simard](https://github.com/jpsim)
  [#1077](https://github.com/realm/SwiftLint/issues/1077)

* Make many operations in SwiftLintFramework safe to call in multithreaded
  scenarios, including accessing `Linter.styleViolations`.  
  [JP Simard](https://github.com/jpsim)
  [#1077](https://github.com/realm/SwiftLint/issues/1077)

* Permit unsigned and explicitly-sized integer types in `valid_ibinspectable`.  
  [Daniel Duan](https://github.com/dduan)

* Make `nimble_operator` rule correctable.  
  [Vojta Stavik](https://github.com/VojtaStavik)

* Add `vertical_parameter_alignment` rule that checks if parameters are
  vertically aligned for multi-line function declarations.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1033](https://github.com/realm/SwiftLint/issues/1033)

* Add more helpful reason strings to TrailingCommaRule.  
  [Matt Rubin](https://github.com/mattrubin)

* Add `class_delegate_protocol` rule that warns against protocol declarations
  that aren't marked as `: class` or `@objc`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1039](https://github.com/realm/SwiftLint/issues/1039)

* Add correctable `redundant_optional_initialization` rule that warns against
  initializing optional variables with `nil`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1052](https://github.com/realm/SwiftLint/issues/1052)

* `redundant_nil_coalescing` rule is now correctable.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Make `number_separator` rule correctable.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* `empty_parentheses_with_trailing_closure` rule is now correctable.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Add correctable `redundant_void_return` rule that warns against
  explicitly adding `-> Void` to functions.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1066](https://github.com/realm/SwiftLint/issues/1066)

* Add an opt-in rule that enforces alphabetical sorting of imports.  
  [Scott Berrevoets](https://github.com/sberrevoets)
  [#900](https://github.com/realm/SwiftLint/issues/900)

* `type_name` rule forces enum values to be UpperCamelCase again
  when used with Swift 2.3.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1090](https://github.com/realm/SwiftLint/issues/1090)

* Make `weak_delegate` rule ignore computed properties.  
  [Rafael Machado](https://github.com/rakaramos)
  [#1089](https://github.com/realm/SwiftLint/issues/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](https://github.com/marcelofabri)
  [#1060](https://github.com/realm/SwiftLint/issues/1060)

* Now `number_separator` rule can be configured with a minimum length.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1109](https://github.com/realm/SwiftLint/issues/1109)

* Add `compiler_protocol_init` rule that flags usage of initializers
  declared in protocols used by the compiler such as `ExpressibleByArrayLiteral`
  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](https://github.com/marcelofabri)
  [#1096](https://github.com/realm/SwiftLint/issues/1096)

* Add `large_tuple` configurable rule that validates that tuples shouldn't
  have too many members.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1065](https://github.com/realm/SwiftLint/issues/1065)

* Add `generic_type_name` rule that validates generic constraint type names.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#51](https://github.com/realm/SwiftLint/issues/51)

* Update `vertical_whitespace` rule to allow configuration of the number of
  consecutive empty lines before a violation using `max_empty_lines`.
  The default value is still 1 line.  
  [Aaron McTavish](https://github.com/aamctustwo)
  [#769](https://github.com/realm/SwiftLint/issues/769)

* Add check to ignore urls in `line_length` rule when `ignores_urls`
  configuration is enabled.  
  [Javier Hernández](https://github.com/jaherhi)
  [#384](https://github.com/realm/SwiftLint/issues/384)

* Add `shorthand_operator` rule that validates that shorthand operators should
  be used when possible.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#902](https://github.com/realm/SwiftLint/issues/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](https://github.com/jpsim)
  [#221](https://github.com/realm/SwiftLint/issues/221)

* Add internal support for deprecated rule aliases.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#973](https://github.com/realm/SwiftLint/issues/973)

* Add `unused_optional_binding` rule that will check for optional bindings
  not being used.  
  [Rafael Machado](https://github.com/rakaramos)
  [#1116](https://github.com/realm/SwiftLint/issues/1116)

### Bug Fixes

* Ignore close parentheses on `vertical_parameter_alignment` rule.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1042](https://github.com/realm/SwiftLint/issues/1042)

* `syntactic_sugar` rule now doesn't flag declarations that can't be fixed.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#928](https://github.com/realm/SwiftLint/issues/928)

* Fix false positives on `closure_parameter_position` and
  `unused_closure_parameter` rules with Swift 2.3.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1019](https://github.com/realm/SwiftLint/issues/1019)

* Fix crash on `trailing_comma` rule with Swift 2.3.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#921](https://github.com/realm/SwiftLint/issues/921)

* Fix out of range exception in `AttributesRule`.  
  [JP Simard](https://github.com/jpsim)
  [#1105](https://github.com/realm/SwiftLint/issues/1105)

* Fix `variable_name` and `type_name` rules on Linux.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* Fix linting directories with names ending with `.swift`.  
  [JP Simard](https://github.com/jpsim)

* Fix running `swiftlint version` when building with Swift Package Manager.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1045](https://github.com/realm/SwiftLint/issues/1045)

* Fix false positive on `vertical_parameter_alignment` rule when breaking line
  in a default parameter declaration.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1129](https://github.com/realm/SwiftLint/issues/1129)

## 0.15.0: Hand Washable Holiday Linens 🎄

### Breaking

* `line_length` rule now has a default value of `120` for warnings.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1008](https://github.com/realm/SwiftLint/issues/1008)

### Enhancements

* 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.  

  [Marcelo Fabri](https://github.com/marcelofabri)
  [#326](https://github.com/realm/SwiftLint/issues/326)

* `operator_usage_whitespace` rule is now correctable.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* `implicit_getter` and `mark` rule performance improvements.  
  [Marcelo Fabri](https://github.com/marcelofabri)

* HTML reports now display a relative path to files.  
  [Jamie Edge](https://github.com/JamieEdge)

* `colon` rule now validates colon position in dictionaries too. You can disable
  this new validation with the `apply_to_dictionaries` configuration.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#603](https://github.com/realm/SwiftLint/issues/603)

* Add `first_where` opt-in rule that warns against using
  `.filter { /* ... */ }.first` in collections, as
  `.first(where: { /* ... */ })` is often more efficient.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1005](https://github.com/realm/SwiftLint/issues/1005)

### Bug Fixes

* `FunctionParameterCountRule` also ignores generic initializers.  
  [Mauricio Hanika](https://github.com/mAu888)

* Grammar checks.  
  [Michael Helmbrecht](https://github.com/mrh-is)

* Fix the validity and styling of the HTML reporter.  
  [Jamie Edge](https://github.com/JamieEdge)

* Fix false positive in `empty_parentheses_with_trailing_closure` rule.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1021](https://github.com/realm/SwiftLint/issues/1021)

* Fix false positive in `switch_case_on_newline` when switching
  over a selector.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1020](https://github.com/realm/SwiftLint/issues/1020)

* Fix crash in `closure_parameter_position` rule.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1026](https://github.com/realm/SwiftLint/issues/1026)

* Fix false positive in `operator_usage_whitespace` rule when
  using image literals.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#1028](https://github.com/realm/SwiftLint/issues/1028)

## 0.14.0: Super Awesome Retractable Drying Rack

### Breaking

* 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](https://github.com/jpsim)
  [Norio Nomura](https://github.com/norio-nomura)

### Enhancements

* 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 the `LINUX_SOURCEKIT_LIB_PATH`
  environment variable. A preconfigured Docker image is available on Docker Hub
  by the ID of `norionomura/sourcekit:302`.  
  [JP Simard](https://github.com/jpsim)
  [Norio Nomura](https://github.com/norio-nomura)
  [#732](https://github.com/realm/SwiftLint/issues/732)

* Add `dynamic_inline` rule to discourage combination of `@inline(__always)`
  and `dynamic` function attributes.  
  [Daniel Duan](https://github.com/dduan)

* Add `number_separator` opt-in rule that enforces that underscores are
  used as thousand separators in large numbers.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#924](https://github.com/realm/SwiftLint/issues/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](https://github.com/marcelofabri)
  [#844](https://github.com/realm/SwiftLint/issues/844)

* `FunctionParameterCountRule` now ignores initializers.  
  [Denis Lebedev](https://github.com/garnett)
  [#544](https://github.com/realm/SwiftLint/issues/544)

* Add `EmojiReporter`: a human friendly reporter.  
  [Michał Kałużny](https://github.com/justMaku)

* Add `redundant_string_enum_value` rule that warns against String enums
  with redundant value assignments.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#946](https://github.com/realm/SwiftLint/issues/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 the `always_on_same_line` and
  `always_on_line_above` keys.  

  [Marcelo Fabri](https://github.com/marcelofabri)
  [#846](https://github.com/realm/SwiftLint/issues/846)

* Add `empty_parentheses_with_trailing_closure` rule that checks for
  empty parentheses after method call when using trailing closures.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#885](https://github.com/realm/SwiftLint/issues/885)

* Add `closure_parameter_position` rule that validates that closure
  parameters are in the same line as the opening brace.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#931](https://github.com/realm/SwiftLint/issues/931)

* `type_name` rule now validates `typealias` and `associatedtype` too.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#49](https://github.com/realm/SwiftLint/issues/49)
  [#956](https://github.com/realm/SwiftLint/issues/956)

* Add `ProhibitedSuperRule` opt-in rule that warns about methods calling
  to super that should not, for example `UIViewController.loadView()`.  
  [Aaron McTavish](https://github.com/aamctustwo)
  [#970](https://github.com/realm/SwiftLint/issues/970)

* Add correctable `void_return` rule to validate usage of `-> Void`
  over `-> ()`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [JP Simard](https://github.com/jpsim)
  [#964](https://github.com/realm/SwiftLint/issues/964)

* Add correctable `empty_parameters` rule to validate usage of `() ->`
  over `Void ->`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#573](https://github.com/realm/SwiftLint/issues/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](https://github.com/marcelofabri)
  [#626](https://github.com/realm/SwiftLint/issues/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](https://github.com/marcelofabri)
  [JP Simard](https://github.com/jpsim)
  [#982](https://github.com/realm/SwiftLint/issues/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](https://github.com/marcelofabri)
  [#619](https://github.com/realm/SwiftLint/issues/619)

### Bug Fixes

* Fix `weak_delegate` rule reporting a violation for variables containing
  but not ending in `delegate`.  
  [Phil Webster](https://github.com/philwebster)

* Fix `weak_delegate` rule reporting a violation for variables in protocol
  declarations.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#934](https://github.com/realm/SwiftLint/issues/934)

* Fix `trailing_comma` rule reporting a violation for commas in comments.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#940](https://github.com/realm/SwiftLint/issues/940)

* Fix XML reporters not escaping characters.  
  [Fabian Ehrentraud](https://github.com/fabb)
  [#968](https://github.com/realm/SwiftLint/issues/968)

* Fix specifying multiple rule identifiers in comment commands.  
  [JP Simard](https://github.com/jpsim)
  [#976](https://github.com/realm/SwiftLint/issues/976)

* Fix invalid CSS in HTML reporter template.  
  [Aaron McTavish](https://github.com/aamctustwo)
  [#981](https://github.com/realm/SwiftLint/issues/981)

* Fix crash when correcting `statement_position` rule when there are
  multi-byte characters in the file.  
  [Marcelo Fabri](https://github.com/marcelofabri)

## 0.13.2: Light Cycle

### Breaking

* None.

### Enhancements

* `TrailingCommaRule` now only triggers when a declaration is multi-line
  when using `mandatory_comma: true`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#910](https://github.com/realm/SwiftLint/issues/910)
  [#911](https://github.com/realm/SwiftLint/issues/911)

### Bug Fixes

* Fix `MarkRule` reporting a violation for `// MARK: -`, which is valid.  
  [JP Simard](https://github.com/jpsim)
  [#778](https://github.com/realm/SwiftLint/issues/778)

## 0.13.1: Heavy Cycle

### Breaking

* None.

### Enhancements

* Add `ImplicitGetterRule` to warn against using `get` on computed read-only
  properties.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#57](https://github.com/realm/SwiftLint/issues/57)

* Add `WeakDelegateRule` rule to enforce delegate instance variables to be
  marked as `weak`.  
  [Olivier Halligon](https://github.com/AliSoftware)

* Add `SyntacticSugar` rule that enforces that shorthanded syntax should be
  used when possible, for example `[Int]` instead of `Array<Int>`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#319](https://github.com/realm/SwiftLint/issues/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](https://github.com/jpsim)
  [#861](https://github.com/realm/SwiftLint/issues/861)

* Add `NimbleOperatorRule` opt-in rule that enforces using
  [operator overloads](https://github.com/Quick/Nimble/#operator-overloads)
  instead of free matcher functions when using
  [Nimble](https://github.com/Quick/Nimble).  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#881](https://github.com/realm/SwiftLint/issues/881)

* `closure_spacing` rule now accepts empty bodies with a space.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#875](https://github.com/realm/SwiftLint/issues/875)

* Add `TrailingCommaRule` to enforce/forbid trailing commas in arrays and
  dictionaries. The default is to forbid them, but this can be changed with
  the `mandatory_comma` configuration.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#883](https://github.com/realm/SwiftLint/issues/883)

* Add support for `fileprivate` in `PrivateOutletRule` and
  `PrivateUnitTestRule`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#781](https://github.com/realm/SwiftLint/issues/781)
  [#831](https://github.com/realm/SwiftLint/issues/831)

* Make `MarkRule` correctable.  
  [kohtenko](https://github.com/kohtenko)

### Bug Fixes

* Rule out a few invalid `@IBInspectable` cases in `valid_ibinspectable`.  
  [Daniel Duan](https://github.com/dduan)

* Fix a few edge cases where malformed `MARK:` comments wouldn't trigger a
  violation.  
  [JP Simard](https://github.com/jpsim)
  [#805](https://github.com/realm/SwiftLint/issues/805)

* Now lints single files passed to `--path` even if this file is excluded
  from the configuration file (`.swiftlint.yml`).  
  [JP Simard](https://github.com/jpsim)

* Fixed error severity configuration in `colon` rule.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#863](https://github.com/realm/SwiftLint/issues/863)

* `switch_case_on_newline` rule should ignore trailing comments.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#874](https://github.com/realm/SwiftLint/issues/874)

* `switch_case_on_newline` rule shouldn't trigger on enums.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#878](https://github.com/realm/SwiftLint/issues/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](https://github.com/sadefigu)
  [#872](https://github.com/realm/SwiftLint/issues/872)

## 0.13.0: MakeYourClothesCleanAgain

### Breaking

* None.

### Enhancements

* Add `ignores_comment` configuration for `trailing_whitespace` rule.  
  [Javier Hernández](https://github.com/jaherhi)
  [#576](https://github.com/realm/SwiftLint/issues/576)

* Added HTML reporter, identifier is `html`.  
  [Johnykutty Mathew](https://github.com/Johnykutty)

* Add `SuperCallRule` opt-in rule that warns about methods not calling to super.  
  [Angel G. Olloqui](https://github.com/angelolloqui)
  [#803](https://github.com/realm/SwiftLint/issues/803)

* Add `RedundantNilCoalesingRule` opt-in rule that warns against `?? nil`.  
  [Daniel Beard](https://github.com/daniel-beard)
  [#764](https://github.com/realm/SwiftLint/issues/764)

* Added opt-in rule to makes closure expressions spacing consistent.  
  [J. Cheyo Jimenez](https://github.com/masters3d)
  [#770](https://github.com/realm/SwiftLint/issues/770)

* Adds `allow_private_set` configuration for the `private_outlet` rule.  
  [Rohan Dhaimade](https://github.com/HaloZero)

* Swift 2.3 support.  
  [Norio Nomura](https://github.com/norio-nomura)
  [Syo Ikeda](https://github.com/ikesyo)

* Color literals count as single characters to avoid unintentional line length
  violations.  
  [Jonas](https://github.com/VFUC)
  [#742](https://github.com/realm/SwiftLint/issues/742)

* Add `SwitchCaseOnNewlineRule` opt-in rule that enforces a newline after
  `case pattern:` in a `switch`.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#681](https://github.com/realm/SwiftLint/issues/681)

* Add `ValidIBInspectableRule` rule that checks if `@IBInspectable` declarations
  are valid. An `@IBInspectable` is valid if:
  * It's declared as a `var` (not `let`)
  * Its type is explicit (not inferred)
  * Its type is one of the
  [supported types](http://help.apple.com/xcode/mac/8.0/#/devf60c1c514)  

  [Marcelo Fabri](https://github.com/marcelofabri)
  [#756](https://github.com/realm/SwiftLint/issues/756)

* Add `ExplicitInitRule` opt-in rule to discourage calling `init` directly.  
  [Matt Taube](https://github.com/mtaube)
  [#715](https://github.com/realm/SwiftLint/pull/715)

### Bug Fixes

* Fixed whitespace being added to TODO messages.  
  [W. Bagdon](https://github.com/wbagdon)
  [#792](https://github.com/realm/SwiftLint/issues/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](https://github.com/masters3d)
  [#772](https://github.com/realm/SwiftLint/issues/772)

* Correctable rules no longer apply corrections if the rule is locally disabled.  
  [J. Cheyo Jimenez](https://github.com/masters3d)
  [#601](https://github.com/realm/SwiftLint/issues/601)

* Fixed regex bug in Mark Rule where MARK could not be used with only a hyphen
  but no descriptive text: `// MARK: -`.  
  [Ruotger Deecke](https://github.com/roddi)
  [#778](https://github.com/realm/SwiftLint/issues/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](https://github.com/cfilipov)
  [#786](https://github.com/realm/SwiftLint/issues/786)

* Fixed: `ConditionalReturnsOnNewline` now respects severity configuration.  
  [Rohan Dhaimade](https://github.com/HaloZero)
  [#783](https://github.com/realm/SwiftLint/issues/783)

* Fixed: `ConditionalReturnsOnNewline` now checks if `return` is a keyword,
  avoiding false positives.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#784](https://github.com/realm/SwiftLint/issues/784)

* `ForceUnwrappingRule` did not recognize force unwraps in return statements
  using subscript.  
  [Norio Nomura](https://github.com/norio-nomura)
  [#813](https://github.com/realm/SwiftLint/issues/813)

## 0.12.0: Vertical Laundry

### Breaking

* 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](https://github.com/cfilipov)

### Enhancements

* Add `--enable-all-rules` CLI option to `lint` command to facilitate running
  all rules, even opt-in and disabled ones, ignoring `whitelist_rules`.  
  [JP Simard](https://github.com/jpsim)
  [#1170](https://github.com/realm/SwiftLint/issues/1170)

### Bug Fixes

* Made Vertical Whitespace Rule added in 0.11.2 opt-in due to performance
  issues.  
  [JP Simard](https://github.com/jpsim)
  [#772](https://github.com/realm/SwiftLint/issues/772)

## 0.11.2: Communal Clothesline

This release has seen a phenomenal uptake in community contributions!

### Breaking

* None.

### Enhancements

* Add `MarkRule` rule to enforce `// MARK` syntax.  
  [Krzysztof Rodak](https://github.com/krodak)
  [#749](https://github.com/realm/SwiftLint/issues/749)

* Add `PrivateOutletRule` opt-in rule to enforce `@IBOutlet`
  instance variables to be `private`.  
  [Olivier Halligon](https://github.com/AliSoftware)

* Add content of the todo statement to message.  
  [J. Cheyo Jimenez](https://github.com/masters3d)
  [#478](https://github.com/realm/SwiftLint/issues/478)

* Add `LegacyNSGeometryFunctionsRule` rule. Add `NSSize`, `NSPoint`, and
  `NSRect` constants and constructors to existing rules.  
  [David Rönnqvist](https://github.com/d-ronnqvist)

* Added Vertical Whitespace Rule.  
  [J. Cheyo Jimenez](https://github.com/masters3d)
  [#548](https://github.com/realm/SwiftLint/issues/548)

* Removed ConditionalBindingCascadeRule.  
  [J. Cheyo Jimenez](https://github.com/masters3d)
  [#701](https://github.com/realm/SwiftLint/issues/701)

* Allow setting `flexible_right_spacing` configuration for the `colon` rule.  
  [Shai Mishali](https://github.com/freak4pc)
  [#730](https://github.com/realm/SwiftLint/issues/730)

* Add Junit reporter.  
  [Matthew Ellis](https://github.com/matthewellis)

* LeadingWhitespaceRule is now auto correctable.  
  [masters3d](https://github.com/masters3d)

* Add included regex for custom rules to control what files are processed.  
  [bootstraponline](https://github.com/bootstraponline)
  [#689](https://github.com/realm/SwiftLint/issues/689)

* Add rule to check for private unit tests (private unit tests don't get run
  by XCTest).  
  [Cristian Filipov](https://github.com/cfilipov)

* Add configuration for setting a warning threshold.  
  [woodhamgh](https://github.com/woodhamgh)
  [696](https://github.com/realm/SwiftLint/issues/696)

* Adds 'ConditionalReturnsOnNewLineRule' rule.  
  [Rohan Dhaimade](https://github.com/HaloZero)

* Made `- returns:` doc optional for initializers.  
  [Mohpor](https://github.com/mohpor)
  [#557](https://github.com/realm/SwiftLint/issues/557)

### Bug Fixes

* Fixed CustomRule Regex.  
  [J. Cheyo Jimenez](https://github.com/masters3d)
  [#717](https://github.com/realm/SwiftLint/issues/717)
  [#726](https://github.com/realm/SwiftLint/issues/726)

* Allow disabling custom rules in code.  
  [J. Cheyo Jimenez](https://github.com/masters3d)
  [#515](https://github.com/realm/SwiftLint/issues/515)

* Fix LegacyConstructorRule when using variables instead of numbers.  
  [Sarr Blaise](https://github.com/bsarr007)
  [#646](https://github.com/realm/SwiftLint/issues/646)

* Fix force_unwrapping false positive inside strings.  
  [Daniel Beard](https://github.com/daniel-beard)
  [#721](https://github.com/realm/SwiftLint/issues/721)

## 0.11.1: Cuddles... Or Else! <!-- markdownlint-disable-line MD026 -->

### Breaking

* None.

### Enhancements

* Added `statement_mode` configuration to  the `statement_position` rule. The
  `default` mode keeps the current SwiftLint behavior of keeping `else` and
  `catch` statements on the same line as the closing brace before them. The
  `uncuddled_else`configuration requires the `else` and `catch` to be on a new
  line with the same leading whitespace as the brace.  
  [Mike Skiba](https://github.com/ateliercw)
  [#651](https://github.com/realm/SwiftLint/issues/651)

### Bug Fixes

* Remove extraneous argument label added in LegacyCGGeometryFunctionsRule
  autocorrect.  
  [Sarr Blaise](https://github.com/bsarr007)
  [643](https://github.com/realm/SwiftLint/issues/643)

## 0.11.0: Laundromat Format

### Breaking

* Now `type_name` allows lowercase enum values to match the Swift API Design
  Guidelines.  
  [Jorge Bernal](https://github.com/koke)
  [#654](https://github.com/realm/SwiftLint/issues/654)

* Embedding frameworks needed by `swiftlint` was moved from
  SwiftLintFramework Xcode target to the swiftlint target.
  The `SwiftLintFramework.framework` product built by the
  SwiftLintFramework target no longer contains unnecessary frameworks or
  multiple copies of the Swift libraries.  
  [Norio Nomura](https://github.com/norio-nomura)

### Enhancements

* Add `--format` option to `autocorrect` 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](https://github.com/jpsim)

* Improve error messages for invalid configuration files.  
  [Brian Hardy](https://github.com/lyricsboy)

* Added the user-configurable option `ignores_empty_lines` to the
  `trailing_whitespace` rule. It can be used to control whether the
  `TrailingWhitespaceRule` should report and correct whitespace-indented empty
  lines. Defaults to `false`. Added unit tests.  
  [Reimar Twelker](https://github.com/raginmari)

### Bug Fixes

* Fix false positive in conditional binding cascade violation.  
  [Norio Nomura](https://github.com/norio-nomura)
  [#642](https://github.com/realm/SwiftLint/issues/642)

* Another conditional binding fix, this time for enum that has two parameters
  or an if statement with two case tests.  
  [Andrew Rahn](https://github.com/paddlefish)
  [#667](https://github.com/realm/SwiftLint/issues/667)

* Fix regression in CommaRule ignoring violations when the comma is followed
  by a comment.  
  [Norio Nomura](https://github.com/norio-nomura)
  [#683](https://github.com/realm/SwiftLint/issues/683)

## 0.10.0: `laundry-select` edition

### Breaking

* None.

### Enhancements

* Now `libclang.dylib` and `sourcekitd.framework` are dynamically loaded at
  runtime by SourceKittenFramework to use the versions included in the Xcode
  version specified by `xcode-select -p` or custom toolchains.  
  [Norio Nomura](https://github.com/norio-nomura)
  [#167](https://github.com/jpsim/SourceKitten/issues/167)

* Add `LegacyCGGeometryFunctionsRule` rule.  
  [Sarr Blaise](https://github.com/bsarr007)
  [#625](https://github.com/realm/SwiftLint/issues/625)

* SwiftLint no longer crashes when SourceKitService crashes.  
  [Norio Nomura](https://github.com/norio-nomura)

* Rewrite `conditional_binding_cascade` rule.  
  [Norio Nomura](https://github.com/norio-nomura)
  [#617](https://github.com/realm/SwiftLint/issues/617)

* Add autocorrect for `ReturnArrowWhitespaceRule`.  
  [Craig Siemens](https://github.com/CraigSiemens)

### Bug Fixes

* Failed to launch swiftlint when Xcode.app was placed at non standard path.  
  [Norio Nomura](https://github.com/norio-nomura)
  [#593](https://github.com/realm/SwiftLint/issues/593)

* `ClosingBraceRule` no longer triggers across line breaks.  
  [Josh Friend](https://github.com/joshfriend)
  [#592](https://github.com/realm/SwiftLint/issues/592)

* `LegacyConstantRule` and `LegacyConstructorRule` failed to `autocorrect`.  
  [Norio Nomura](https://github.com/norio-nomura)
  [#623](https://github.com/realm/SwiftLint/issues/623)

## 0.9.2: Multiple Exhaust Codes

### Breaking

* None.

### Enhancements

* Return different exit codes to distinguish between types of errors:
  * 0: No errors, maybe warnings in non-strict mode
  * 1: Usage or system error
  * 2: Style violations of severity "Error"
  * 3: No style violations of severity "Error", but violations of severity
       "warning" with `--strict`

  [JP Simard](https://github.com/jpsim)
  [#166](https://github.com/realm/SwiftLint/issues/166)

* `VariableNameRule` now accepts symbols starting with more than one uppercase
  letter to allow for names like XMLString or MIMEType.  
  [Erik Aigner](https://github.com/eaigner)
  [#566](https://github.com/realm/SwiftLint/issues/566)

### Bug Fixes

* Avoid overwriting files whose contents have not changed.  
  [Neil Gall](https://github.com/neilgall)
  [#574](https://github.com/realm/SwiftLint/issues/574)

* Fix `CommaRule` mismatch between violations and corrections.  
  [Norio Nomura](https://github.com/norio-nomura)
  [#466](https://github.com/realm/SwiftLint/issues/466)

* Fix more false positives in `ForceUnwrappingRule`.  
  [Norio Nomura](https://github.com/norio-nomura)
  [#546](https://github.com/realm/SwiftLint/issues/546)
  [#547](https://github.com/realm/SwiftLint/issues/547)

## 0.9.1: Air Duct Cleaning

### Breaking

* None.

### Enhancements

* None.

### Bug Fixes

* Fix force unwrap rule missed cases with quotes.  
  [Norio Nomura](https://github.com/norio-nomura)
  [#535](https://github.com/realm/SwiftLint/issues/535)

* Fix issues with nested `.swiftlint.yml` file resolution.  
  [Norio Nomura](https://github.com/norio-nomura)
  [#543](https://github.com/realm/SwiftLint/issues/543)

## 0.9.0: Appliance Maintenance

### Breaking

* `Linter.reporter` has been removed and `Configuration.reporterFromString(_:)`
  has been renamed to a free function: `reporterFromString(_:)`.  
  [JP Simard](https://github.com/jpsim)

* `_ConfigProviderRule` & `ConfigurableRule` have been removed and their
  requirements have been moved to `Rule`.  
  [JP Simard](https://github.com/jpsim)

* `Configuration(path:optional:silent)` has been changed to
  `Configuration(path:rootPath:optional:quiet:)`.  
  [JP Simard](https://github.com/jpsim)

* The static function `Configuration.rulesFromDict(_:ruleList:)` has been moved
  to an instance method: `RuleList.configuredRulesWithDictionary(_:)`.  
  [JP Simard](https://github.com/jpsim)

* The `rules` parameter in the `Configuration` initializer has been renamed to
  `configuredRules`.  
  [JP Simard](https://github.com/jpsim)

* 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](https://github.com/realm/SwiftLint/pull/507) for a
  complete record of this change.  
  [JP Simard](https://github.com/jpsim)
  [#479](https://github.com/realm/SwiftLint/issues/479)

* All instances of the abbreviation "config" in the API have been expanded to
  "configuration". The `--config` command line parameter and
  `use_nested_configs` configuration key are unaffected.  
  [JP Simard](https://github.com/jpsim)

* The `use_nested_configs` configuration key has been deprecated and its value
  is now ignored. Nested configuration files are now always considered.  
  [JP Simard](https://github.com/jpsim)

### Enhancements

* `swiftlint lint` now accepts an optional `--reporter` parameter which
  overrides existing `reporter` values in the configuration file. Choose between
  `xcode` (default), `json`, `csv` or `checkstyle`.  
  [JP Simard](https://github.com/jpsim)
  [#440](https://github.com/realm/SwiftLint/issues/440)

* `swiftlint rules` now shows a configuration description for all rules.  
  [JP Simard](https://github.com/jpsim)

* `lint` and `autocorrect` commands now accept a `--quiet` flag that prevents
  status messages like `Linting <file>` & `Done linting` from being logged.  
  [JP Simard](https://github.com/jpsim)
  [#386](https://github.com/realm/SwiftLint/issues/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 to `included:\n  - Source`.  
  [JP Simard](https://github.com/jpsim)
  [#120](https://github.com/realm/SwiftLint/issues/120)

* Improve performance of `FunctionParameterCountRule`.  
  [Norio Nomura](https://github.com/norio-nomura)

* Improve performance of `ColonRule`.  
  [Norio Nomura](https://github.com/norio-nomura)

### Bug Fixes

* Fix case sensitivity of keywords for `valid_docs`.  
  [Ankit Aggarwal](https://github.com/aciidb0mb3r)
  [#298](https://github.com/realm/SwiftLint/issues/298)

* Fixed inconsistencies between violations & corrections in
  `StatementPositionRule`.  
  [JP Simard](https://github.com/jpsim)
  [#466](https://github.com/realm/SwiftLint/issues/466)

* A warning will now be logged when invalid top-level keys are included in the
  configuration file.  
  [JP Simard](https://github.com/jpsim)
  [#120](https://github.com/realm/SwiftLint/issues/120)

* Fixed `LegacyConstructorRule` from correcting legacy constructors in string
  literals.  
  [JP Simard](https://github.com/jpsim)
  [#466](https://github.com/realm/SwiftLint/issues/466)

* Fixed an issue where `variable_name` or `type_name` would always report a
  violation when configured with only a `warning` value on either `min_length`
  or `max_length`.  
  [JP Simard](https://github.com/jpsim)
  [#522](https://github.com/realm/SwiftLint/issues/522)

## 0.8.0: High Heat

### Breaking

* Setting only warning on `SeverityLevelsConfig` rules now disables the error
  value.  
  [Robin Kunde](https://github.com/robinkunde)
  [#409](https://github.com/realm/SwiftLint/issues/409)

* `enabled_rules` has been renamed to `opt_in_rules`.  
  [Daniel Beard](https://github.com/daniel-beard)

### Enhancements

* Add `whitelist_rules` rule whitelists in config files.  
  [Daniel Beard](https://github.com/daniel-beard)
  [#256](https://github.com/realm/SwiftLint/issues/256)

* Improve performance of `ColonRule`, `LineLengthRule` & `syntaxKindsByLine`.  
  [Norio Nomura](https://github.com/norio-nomura)

* Add command to display rule description:
  `swiftlint rules <rule identifier>`.  
  [Tony Li](https://github.com/crazytonyli)
  [#392](https://github.com/realm/SwiftLint/issues/392)

* Add `FunctionParameterCountRule`.  
  [Denis Lebedev](https://github.com/garnett)
  [#415](https://github.com/realm/SwiftLint/issues/415)

* Measure complexity of nested functions separately in
  `CyclomaticComplexityRule`.  
  [Denis Lebedev](https://github.com/garnett)
  [#424](https://github.com/realm/SwiftLint/issues/424)

* Added exception for multi-line `if`/`guard`/`while` conditions to allow
  opening brace to be on a new line in `OpeningBraceRule`.  
  [Scott Hoyt](https://github.com/scottrhoyt)
  [#355](https://github.com/realm/SwiftLint/issues/355)

* The `rules` command now prints a table containing values for: `identifier`,
  `opt-in`, `correctable`, `enabled in your config` & `configuration`.  
  [JP Simard](https://github.com/jpsim)
  [#392](https://github.com/realm/SwiftLint/issues/392)

* Reduce maximum memory usage.  
  [Norio Nomura](https://github.com/norio-nomura)

### Bug Fixes

* Fix more false positives in `ValidDocsRule`.  
  [diogoguimaraes](https://github.com/diogoguimaraes)
  [#451](https://github.com/realm/SwiftLint/issues/451)

* Fix `trailing_newline` autocorrect to handle more than one violation per
  line.  
  [Daniel Beard](https://github.com/daniel-beard)
  [#465](https://github.com/realm/SwiftLint/issues/465)

* Fix complexity measurement for switch statements in `CyclomaticComplexityRule`.  
  [Denis Lebedev](https://github.com/garnett)
  [#461](https://github.com/realm/SwiftLint/issues/461)

## 0.7.2: Appliance Manual

### Breaking

* None.

### Enhancements

* None.

### Bug Fixes

* Fix several false positives in `ValidDocsRule`.  
  [diogoguimaraes](https://github.com/diogoguimaraes)
  [#375](https://github.com/realm/SwiftLint/issues/375)

## 0.7.1: Delicate Cycle

### Breaking

* None.

### Enhancements

* Improve performance of `MissingDocsRule`.  
  [Norio Nomura](https://github.com/norio-nomura)

* Added `CustomRules`.  
  [Scott Hoyt](https://github.com/scottrhoyt)
  [#123](https://github.com/realm/SwiftLint/issues/123)

* Added opt-in `ForceUnwrappingRule` to issue warnings for all forced
  unwrappings.  
  [Benjamin Otto](https://github.com/Argent)
  [#55](https://github.com/realm/SwiftLint/issues/55)

### Bug Fixes

* Fix several false positives in `ValidDocsRule`.  
  [diogoguimaraes](https://github.com/diogoguimaraes)
  [#375](https://github.com/realm/SwiftLint/issues/375)

## 0.7.0: Automatic Permanent Press

### Breaking

* Replaced all uses of `XPCDictionary` with
  `[String: SourceKitRepresentable]`.  
  [JP Simard](https://github.com/jpsim)

* `VariableNameMinLengthRule` and `VariableNameMaxLengthRule` have been
  removed. `VariableNameRule` now has this functionality.  
  [Scott Hoyt](https://github.com/scottrhoyt)

* `ViolationLevelRule` has been removed. This functionality is now provided
  by `ConfigProviderRule` and `SeverityLevelsConfig`.  
  [Scott Hoyt](https://github.com/scottrhoyt)

### Enhancements

* `TypeBodyLengthRule` now does not count comment or whitespace lines.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#369](https://github.com/realm/SwiftLint/issues/369)

* `FunctionBodyLengthRule` now does not count comment or whitespace lines.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#258](https://github.com/realm/SwiftLint/issues/258)

* All `Rule`s are now configurable in at least their severity: `SeverityConfig`.  
  [Scott Hoyt](https://github.com/scottrhoyt)
  [#371](https://github.com/realm/SwiftLint/issues/371)
  [#130](https://github.com/realm/SwiftLint/issues/130)
  [#268](https://github.com/realm/SwiftLint/issues/268)

* `TypeNameRule` and `VariableNameRule` conform to `ConfigProviderRule` using
  `NameConfig` to support `min_length`, `max_length`, and `excluded` names.  
  [Scott Hoyt](https://github.com/scottrhoyt)
  [#388](https://github.com/realm/SwiftLint/issues/388)
  [#259](https://github.com/realm/SwiftLint/issues/259)
  [#191](https://github.com/realm/SwiftLint/issues/191)

* Add `CyclomaticComplexityRule`.  
  [Denis Lebedev](https://github.com/garnett)

### Bug Fixes

* Fix crash caused by infinite recursion when using nested config files.  
  [JP Simard](https://github.com/jpsim)
  [#368](https://github.com/realm/SwiftLint/issues/368)

* Fix crash when file contains NULL character.  
  [Norio Nomura](https://github.com/norio-nomura)
  [#379](https://github.com/realm/SwiftLint/issues/379)

## 0.6.0: Steam Cycle

### Breaking

* `ParameterizedRule` is removed. Use `ConfigurableRule` instead.  
  [Scott Hoyt](https://github.com/scottrhoyt)
  [#353](https://github.com/realm/SwiftLint/issues/353)

* To activate a `Rule`, it must be added to the global `masterRuleList`.  
  [Scott Hoyt](https://github.com/scottrhoyt)

### Enhancements

* `ConfigurableRule` protocol allows for improved rule configuration. See
  `CONTRIBUTING` for more details.  
  [Scott Hoyt](https://github.com/scottrhoyt)
  [#303](https://github.com/realm/SwiftLint/issues/303)

* `VariableNameMinLengthRule` now supports excluding certain variable names
  (e.g. "id").  
  [Scott Hoyt](https://github.com/scottrhoyt)
  [#231](https://github.com/realm/SwiftLint/issues/231)

* `ViolationLevelRule` provides default `ConfigurableRule` implementation for
  rules that only need integer error and warning levels.  
  [Scott Hoyt](https://github.com/scottrhoyt)

* Add AutoCorrect for StatementPositionRule.  
  [Raphael Randschau](https://github.com/nicolai86)

* Add AutoCorrect for CommaRule.  
  [Raphael Randschau](https://github.com/nicolai86)

* Add AutoCorrect for LegacyConstructorRule.  
  [Raphael Randschau](https://github.com/nicolai86)

* Improve performance of `LineLengthRule`.  
  [Norio Nomura](https://github.com/norio-nomura)

* Add ConditionalBindingCascadeRule.  
  [Aaron McTavish](https://github.com/aamctustwo)
  [#202](https://github.com/realm/SwiftLint/issues/202)

* Opt-in rules are now supported.  
  [JP Simard](https://github.com/jpsim)
  [#256](https://github.com/realm/SwiftLint/issues/256)

* Add LegacyConstantRule.  
  [Aaron McTavish](https://github.com/aamctustwo)
  [#319](https://github.com/realm/SwiftLint/issues/319)

* Add opt-in rule to encourage checking `isEmpty` over comparing `count` to
  zero.  
  [JP Simard](https://github.com/jpsim)
  [#202](https://github.com/realm/SwiftLint/issues/202)

* Add opt-in "Missing Docs" rule to detect undocumented public declarations.  
  [JP Simard](https://github.com/jpsim)

### Bug Fixes

* None.

## 0.5.6: Bug FixLint

### Breaking

* None.

### Enhancements

* Improve performance by reducing calls to SourceKit.  
  [Norio Nomura](https://github.com/norio-nomura)

### Bug Fixes

* Fix homebrew deployment issues.  
  [Norio Nomura](https://github.com/norio-nomura)

* AutoCorrect for TrailingNewlineRule only removes at most one line.  
  [John Estropia](https://github.com/JohnEstropia)

* `valid_docs` did not detect tuple as return value.  
  [Norio Nomura](https://github.com/norio-nomura)
  [#324](https://github.com/realm/SwiftLint/issues/324)

* Escape strings when using CSV reporter.  
  [JP Simard](https://github.com/jpsim)

## 0.5.5: Magic Drying Fluff Balls™

<http://www.amazon.com/Magic-Drying-Fluff-Balls-Softening/dp/B001EIW1SG>

### Breaking

* None.

### Enhancements

* None.

### Bug Fixes

* Always fail if a YAML configuration file was found but could not be parsed.  
  [JP Simard](https://github.com/jpsim)
  [#310](https://github.com/realm/SwiftLint/issues/310)

* Make commands with modifiers work for violations with line-only locations.  
  [JP Simard](https://github.com/jpsim)
  [#316](https://github.com/realm/SwiftLint/issues/316)

## 0.5.4: Bounce™

### Breaking

* Remove `Location.init(file:offset:)` in favor of the more explicit
  `Location.init(file:byteOffset:)` & `Location.init(file:characterOffset:)`.  
  [JP Simard](https://github.com/jpsim)

### Enhancements

* Add `checkstyle` reporter to generate XML reports in the Checkstyle 4.3
  format.  
  [JP Simard](https://github.com/jpsim)
  [#277](https://github.com/realm/SwiftLint/issues/277)

* Support command comment modifiers (`previous`, `this` & `next`) to limit the
  command's scope to a single line.  
  [JP Simard](https://github.com/jpsim)
  [#222](https://github.com/realm/SwiftLint/issues/222)

* Add nested `.swiftlint.yml` configuration support.  
  [Scott Hoyt](https://github.com/scottrhoyt)
  [#299](https://github.com/realm/SwiftLint/issues/299)

### Bug Fixes

* Fix multibyte handling in many rules.  
  [JP Simard](https://github.com/jpsim)
  [#279](https://github.com/realm/SwiftLint/issues/279)

* Fix an `NSRangeException` crash.  
  [Norio Nomura](https://github.com/norio-nomura)
  [#294](https://github.com/realm/SwiftLint/issues/294)

* The `valid_docs` rule now handles multibyte characters.  
  [Norio Nomura](https://github.com/norio-nomura)
  [#295](https://github.com/realm/SwiftLint/issues/295)

## 0.5.3: Mountain Scent

### Breaking

* None.

### Enhancements

* Improve autocorrect for OpeningBraceRule.  
  [Yasuhiro Inami](https://github.com/inamiy)

* Add autocorrect for ColonRule.  
  [Brian Partridge](https://github.com/brianpartridge)

* Add ClosingBraceRule.  
  [Yasuhiro Inami](https://github.com/inamiy)

### Bug Fixes

* Fix false positives in ValidDocsRule.  
  [JP Simard](https://github.com/jpsim)
  [#267](https://github.com/realm/SwiftLint/issues/267)

## 0.5.2: Snuggle™

### Breaking

* None.

### Enhancements

* Performance improvements & unicode fixes (via SourceKitten).  
  [Norio Nomura](https://github.com/norio-nomura)

### Bug Fixes

* Fix `ValidDocsRule` false positive when documenting functions with closure
  parameters.  
  [diogoguimaraes](https://github.com/diogoguimaraes)
  [#267](https://github.com/realm/SwiftLint/issues/267)

## 0.5.1: Lint Tray Malfunction

### Breaking

* None.

### Enhancements

* None.

### Bug Fixes

* Make linting faster than 0.5.0, but slower than 0.4.0.  
  [Norio Nomura](https://github.com/norio-nomura)
  [#119](https://github.com/jpsim/SourceKitten/issues/119)

* Re-introduce `--use-script-input-files` option for `lint` & `autocorrect`
  commands. Should also fix some issues when running SwiftLint from an Xcode
  build phase.  
  [JP Simard](https://github.com/jpsim)
  [#264](https://github.com/realm/SwiftLint/issues/264)

## 0.5.0: Downy™

### Breaking

* `init()` is no longer a member of the `Rule` protocol.  
  [JP Simard](https://github.com/jpsim)

### Enhancements

* Add legacy constructor rule.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#202](https://github.com/realm/SwiftLint/issues/202)

* The `VariableNameRule` now allows variable names when the entire name is
  capitalized. This allows stylistic usage common in cases like `URL` and other
  acronyms.  
  [Marcelo Fabri](https://github.com/marcelofabri)
  [#161](https://github.com/realm/SwiftLint/issues/161)

* Add `autocorrect` command to automatically correct certain violations
  (currently only `trailing_newline`, `trailing_semicolon` &
  `trailing_whitespace`).  
  [JP Simard](https://github.com/jpsim)
  [#5](https://github.com/realm/SwiftLint/issues/5)

* Allow to exclude files from `included` directory with `excluded`.  
  [Michal Laskowski](https://github.com/michallaskowski)

### Bug Fixes

* Statement position rule no longer triggers for non-keyword uses of `catch` and
  `else`.  
  [JP Simard](https://github.com/jpsim)
  [#237](https://github.com/realm/SwiftLint/issues/237)

* Fix issues with multi-byte characters.  
  [JP Simard](https://github.com/jpsim)
  [#234](https://github.com/realm/SwiftLint/issues/234)

## 0.4.0: Wrinkle Release

### Breaking

* API: Rename RuleExample to RuleDescription, remove StyleViolationType and
  combine Rule().identifier and Rule().example into Rule.description.  
  [JP Simard](https://github.com/jpsim)
  [#183](https://github.com/realm/SwiftLint/issues/183)

### Enhancements

* The `VariableNameRule` now allows capitalized variable names when they are
  declared static. This allows stylistic usage common in cases like
  `OptionSetType` subclasses.  
  [Will Fleming](https://github.com/wfleming)

* Add `VariableNameMaxLengthRule` and `VariableNameMinLengthRule` parameter
  rules. Remove length checks on `VariableNameRule`.  
  [Mickael Morier](https://github.com/mmorier)

* Add trailing semicolon rule.  
  [JP Simard](https://github.com/jpsim)

* Add force try rule.  
  [JP Simard](https://github.com/jpsim)

* Support linting from Input Files provided by Run Script Phase of Xcode with
  `--use-script-input-files`.  
  [Norio Nomura](https://github.com/norio-nomura)
  [#193](https://github.com/realm/SwiftLint/pull/193)

### Bug Fixes

* All rules now print their identifiers in reports.  
  [JP Simard](https://github.com/jpsim)
  [#180](https://github.com/realm/SwiftLint/issues/180)

* `ControlStatementRule` now detects all violations.  
  [Mickael Morier](https://github.com/mmorier)
  [#187](https://github.com/realm/SwiftLint/issues/187)

* `ControlStatementRule` no longer triggers a violation for acceptable use of
  parentheses.  
  [Mickael Morier](https://github.com/mmorier)
  [#189](https://github.com/realm/SwiftLint/issues/189)

* Nesting rule no longer triggers a violation for enums nested one level deep.  
  [JP Simard](https://github.com/jpsim)
  [#190](https://github.com/realm/SwiftLint/issues/190)

* `ColonRule` now triggers a violation even if equal operator is collapse to
  type and value.  
  [Mickael Morier](https://github.com/mmorier)
  [#135](https://github.com/realm/SwiftLint/issues/135)

* Fix an issue where logs would be printed asynchronously over each other.  
  [JP Simard](https://github.com/jpsim)
  [#200](https://github.com/realm/SwiftLint/issues/200)

## 0.3.0: Wrinkly Rules

### Breaking

* `swiftlint rules` now just prints a list of all available rules and their
  identifiers.  
  [JP Simard](https://github.com/jpsim)

### Enhancements

* Support for Swift 2.1.  
  [JP Simard](https://github.com/jpsim)

* 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](https://github.com/S2dentik)

* Added `Comma Rule` to ensure there is a single space after a comma.  
  [Alex Culeva](https://github.com/S2dentik)

* Add rule identifier to all linter reports.  
  [zippy1978](https://github.com/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](https://github.com/S2dentik)

* Print to stderr for all informational logs. Only reporter outputs is logged to
  stdout.  
  [JP Simard](https://github.com/jpsim)

* JSON and CSV reporters now only print at the very end of the linting
  process.  
  [JP Simard](https://github.com/jpsim)

* Add support for `guard` statements to ControlStatementRule.  
  [David Potter](https://github.com/Tableau-David-Potter)

* Lint parameter variables.  
  [JP Simard](https://github.com/jpsim)

### Bug Fixes

* Custom reporters are now supported even when not running with `--use-stdin`.  
  [JP Simard](https://github.com/jpsim)
  [#151](https://github.com/realm/SwiftLint/issues/151)

* Deduplicate files in the current directory.  
  [JP Simard](https://github.com/jpsim)
  [#154](https://github.com/realm/SwiftLint/issues/154)

## 0.2.0: Tumble Dry

### Breaking

* SwiftLint now exclusively supports Swift 2.0.  
  [JP Simard](https://github.com/jpsim)
  [#77](https://github.com/realm/SwiftLint/issues/77)

* `ViolationSeverity` now has an associated type of `String` and two members:
  `.Warning` and `.Error`.  
  [JP Simard](https://github.com/jpsim)
  [#113](https://github.com/realm/SwiftLint/issues/113)

### Enhancements

* 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](https://github.com/jpsim)
  [#1](https://github.com/realm/SwiftLint/issues/1)
  [#3](https://github.com/realm/SwiftLint/issues/3)
  [#20](https://github.com/realm/SwiftLint/issues/20)
  [#26](https://github.com/realm/SwiftLint/issues/26)

* Updated `TypeNameRule` and `VariableNameRule` to allow private type & variable
  names to start with an underscore.  
  [JP Simard](https://github.com/jpsim)

* Disable and re-enable rules from within source code comments using
  `// swiftlint:disable $IDENTIFIER` and `// swiftlint:enable $IDENTIFIER`.  
  [JP Simard](https://github.com/jpsim)
  [#4](https://github.com/realm/SwiftLint/issues/4)

* Add `--strict` lint flag which makes the lint fail if there are any
  warnings.  
  [Keith Smiley](https://github.com/keith)

* Violations are now printed to stderr.  
  [Keith Smiley](https://github.com/keith)

* Custom reporters are now supported. Specify a value for the `reporter:` key in
  your configuration file. Available reporters are `xcode` (default), `json`,
  `csv`.  
  [JP Simard](https://github.com/jpsim)
  [#42](https://github.com/realm/SwiftLint/issues/42)

### Bug Fixes

* Improve performance of `TrailingWhitespaceRule`.  
  [Keith Smiley](https://github.com/keith)

* Allow newlines in function return arrow.  
  [JP Simard](https://github.com/jpsim)

## 0.1.2: FabricSoftenerRule

### Breaking

* None.

### Enhancements

* Added `OperatorFunctionWhitespaceRule` to make sure that
  you use whitespace around operators when defining them.  
  [Akira Hirakawa](https://github.com/akirahrkw)
  [#60](https://github.com/realm/SwiftLint/issues/60)

* Added `ReturnArrowWhitespaceRule` to make sure that
  you have 1 space before return arrow and return type.  
  [Akira Hirakawa](https://github.com/akirahrkw)

* Support linting from standard input (use `--use-stdin`).  
  [JP Simard](https://github.com/jpsim)
  [#78](https://github.com/realm/SwiftLint/issues/78)

* Improve performance of `TrailingNewlineRule`.  
  [Keith Smiley](https://github.com/keith)

* Lint parentheses around switch statements.  
  [Keith Smiley](https://github.com/keith)

### Bug Fixes

* None.

## 0.1.1: Top Loading

### Breaking

* The `Rule` and `ASTRule` protocol members are now non-static.  
  [aarondaub](https://github.com/aarondaub)

* Split `Rule` into `Rule` and `ParameterizedRule` protocols.  
  [aarondaub](https://github.com/aarondaub)
  [#21](https://github.com/realm/SwiftLint/issues/21)

### Enhancements

* Added a command line option `--path` to specify a path to lint.  
  [Lars Lockefeer](https://github.com/larslockefeer)
  [#16](https://github.com/realm/SwiftLint/issues/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](https://github.com/pawrsccouk)
  [#30](https://github.com/realm/SwiftLint/issues/30)

* Added `rules` command to display which rules are currently applied along
  with examples.  
  [Chris Eidhof](https://github.com/chriseidhof)

* Cache parsing to reduce execution time by more than 50%.  
  [Nikolaj Schumacher](https://github.com/nschum)

* Added `ControlStatementRule` to make sure that if/for/while/do statements
  do not wrap their conditionals in parentheses.  
  [Andrea Mazzini](https://github.com/andreamazz)

* Character position is now included in violation location where appropriate.  
  [JP Simard](https://github.com/jpsim)
  [#62](https://github.com/realm/SwiftLint/issues/62)

* The following rules now conform to `ASTRule`:
  FunctionBodyLength, Nesting, TypeBodyLength, TypeName, VariableName.  
  [JP Simard](https://github.com/jpsim)

### Bug Fixes

* Trailing newline and file length violations are now displayed in Xcode.  
  [JP Simard](https://github.com/jpsim)
  [#43](https://github.com/realm/SwiftLint/issues/43)

## 0.1.0: Fresh Out Of The Dryer

First Version!
