# Change Log ## [0.61.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.61.1) (2026-04-27) - Fixed race condition when parsing config files - Fixed `redundantStaticSelf` false positive inside closures and nested functions - Fixed `unsafe` keyword dot-spacing edge case - Fixed `redundantSelf` crash on switch expression inside if-let binding chain - Fixed `redundantEquatable` removing manual `==` for types with `Any.Type` stored properties ## [0.61.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.61.0) (2026-04-11) - Added `wrapCaseBodies` rule - Added `redundantEmptyView` rule - Added `preferSwiftStringAPI` rule - Added `--test-case-access-control` option for `testSuiteAccessControl` rule - Updated `sortImports` to support `--import-grouping length,alpha` - Updated `--self-required` to support assignment type names like `OSLogMessage` - Updated `--suite-name-format` default value to `preserve` - Fixed conditional import parsing with access modifiers - Fixed infinite loop in `organizeDeclarations` when opening brace has a trailing comment - Fixed closing brace indentation with `--trimwhitespace nonblank-lines` - Fixed indentation of multiline raw string literals with `--indent-strings` - Fixed `redundantParens` incorrectly removing `()` from `@MainActor` closure signatures - Fixed wrapping inside parens of function declarations with no parameters - Fixed `extensionAccessControl` incorrectly hoisting `public` onto extensions of nested internal types - Fixed `spaceAroundParens` incorrectly removing space after `nonisolated(nonsending)` modifier - Fixed `noGuardInTests` incorrectly transforming `guard #available` conditions - Fixed trailing comma for `@convention` closures - Fixed number handling in Swift Testing test case name conversion - Fixed `redundantSelf` inserting `self.` inside `#if`/`#elseif` compiler directive conditions ## [0.60.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.60.1) (2026-03-07) - Fixed issue where `redundantSendable` rule would unexpectedly remove `Sendable` conformance on type defined in public extension - Fixed issue where `redundantSendable` rule would leave behind extra space when removing `:` - Renamed `redundantProperty` rule to `redundantVariable` - Updated `redundantVariable` rule to preserve variables with explicit type annotations - Updated `enumNamespaces` rule to preserve Swift Testing suites as structs ## [0.60.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.60.0) (2026-03-03) - Added `redundantSwiftTestingSuite` rule - Added `redundantSendable` rule - Added `preferExplicitFalse` rule - Added support for `::` module selector syntax - Added support for value generics syntax - Updated `swiftTestingTestCaseNames` to use raw identifiers by default - Updated `swiftTestingTestCaseNames` to use UpperCamelCase for test suite names - Updated `redundantSelf` to handle `guard` statements - Updated `unusedArguments` to handle for loop variables - Updated `redundantType` to better handle `Set` literals - Updated `redundantParents` to remove empty parens from attributes - Updated `sortImports` to sort imports by access control - Updated `blankLinesBetweenImports` to preserve indentation when indent disabled - Updated `unusedPrivateDeclaration` rule to preserve private `@Test` functions - Updated `preferSwiftTesting` rule to convert tests in extensions within the same file - Updated `--stdin-path` to not require the file to actually exist - Updated `simplifyGenericConstraints` to avoid adding duplicate constraints - Updated `blankLinesAroundMark` to insert blank line before MARK at start of scope when allowed by `blankLinesAtStartOfScope` config - Updated `redundantEquatable` to preserve `==` implementation in types with `Strideable` conformance - Fixed handling of switch statements with `#if` blocks in several rules - Fixed issue where `async` function declarations were wrapped using `wrapArguments` instead of `wrapParameters` - Fixed issue where `redundantViewBuilder` would remove `@ViewBuilder` from protocol members - Fixed `redundantSelf` parsing issue with throwing closure return types and switch expressions in `if let` condition - Fixed `trailingCommas` rule incorrectly adding commas to if `#available` checks - Fixed `guard...else` indentation in `wrapArguments` with `wrap-conditions` - Fixed issue where `simplifyGenericConstraints` would leave dangling `where` keyword in protocol members - Fixed issue where `trailingCommas` didn't handle closure capture lists with macro expressions - Fixed indentation for closure parameters on separate lines - Fixed issue where `.init` would be removed in code like `[Foo].init { ... }` (not supported until Swift 6.4). - Fixed issue where `.swift-version` files were read from excluded directories - Fixed incorrect replacement of `&&` operator with `,` inside a ternary condition - Fixed `unusedArguments` bug in code with `try? await` - Fixed handling of `MainActor` attributes in `redundantViewBuilder` ## [0.59.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.59.1) (2026-01-29) - Reverted changes to `indent` rule `--ifdef` handling from 0.59.0 - Updated `docComments` rule to use doc comments on nested functions and handle conditional compilation blocks in function bodies - Updated `spaceAroundBrackets` to preserve space between global actor attribute and closure capture list - Updated `redundantMemberwiseInit` to preserve inits with attributes - Fixed handling of `any` keyword in `sortTypealiases` rule - Resolved build issue related to macOS 13 SDK availability ## [0.59.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.59.0) (2026-01-25) - Added `simplifyGenericConstraints` rule - Added `validateTestCases` rule - Added `testSuiteAccessControl` rule - Added `wrapPropertyBodies` rule - Added `wrapFunctionBodies` rule - Added `redundantViewBuilder` rule - Added `--ifdef preserve` option to `indent` rule - Added `--prefer-synthesized-init-for-internal-structs` option to `redundantMemberwiseInit` rule - Enabled more rules by default: `blankLinesBetweenImports`, `docComments`, `emptyExtensions`, `environmentEntry`, `noForceTryInTests`, `noForceUnwrapInTests`, `redundantAsync`, `redundantEquatable`, `redundantMemberwiseInit`, `redundantProperty`, `redundantThrows` - Updated `typeSugar` to only preserve explicit `Optional` in structs with a synthesized memberwise initializer - Updated closing paren of single-argument functions and collections to wrap if needed - Updated `redundantMemberwiseInit` rule to support result builder attributes - Improved how `organizeDeclarations` handles structs with a synthesized memberwise initializer - Updated `docComments` rule to preserve formatting of comments with directives - Fixed `--ifdef no-indent` handling of method chains and nested directives - Fixed issue where `XMLReporter` did not properly escape strings - Fixed support for `unsafe` keyword - Fixed edge cases in `spaceAroundBrackets` rule - Fixed crash in `sortTypealiases` rule - Fixed issue where `redundantSelf` rule could crash if encountering a function with no body (e.g.`@_silgen_name`) ## [0.58.7](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.58.7) (2025-11-29) - Fixed `redundantSelf` not being applied inside `if #available(...) { ... }` clauses - Fixed `fileHeader` rule incorrectly setting creation year to current when file path contains spaces - Fixed mis-insertion for `nil-init` rule related to optional closure return values - Fixed `unusedPrivateDeclarations` false positive when call site was outside enabled range - Fixed `sortImports` rule incorrectly moving `// swift-tools-version:` comment directive - Fixed `hoistTry` rule sometimes producing mangled code when hoisting across line boundaries - Fixed crash in `--ruleinfo` command when rule options exceed the old max length requirement - Fixed crash in `unusedArguments` due to scope range bug ## [0.58.6](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.58.6) (2025-11-11) - Fixed `docComments` not being applied correctly after conditional `switch...case` - Trailing commas are no longer inserted inside `#selector(...)` expressions - Source files listed with `--filelist` are now formatted concurrently - Trailing comments are now kept with the same line when wrapping - Fixed spurious `return` removal inside `repeat...while` loops - Fixed bug with `trailingClosures` rule and property wrappers - Fixed performance regression introduced in 0.58.5 - Reduced timeout threshold to 1ms per token ## [0.58.5](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.58.5) (2025-10-17) - Fixed regression with indenting of macros (introduced in 0.58.4) - Fixed spurious removal of `return` keyword inside `for ... where` loops - Fixed parsing error with `for await case ...` loops - Added `XCTUnwrap` to the default exclusion list for `hoistTry` ## [0.58.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.58.4) (2025-10-16) - Whitespace is no longer added or removed from blank lines in multiline string literals - Fixed `trailingComma` rule incorrectly inserting commas inside typed `throws` - Fixed issue where `opaqueGenericParameters` rule could cause build errors with existential types - Fixed false positive with `unusedArguments` when argument is only referenced inside a macro - The `noGuardInTests` rule now preserves custom failure messages - The `noGuardInTests` rule no longer adds `throws` to test methods when not needed - Removed redundant "default" values from options help descriptions ## [0.58.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.58.3) (2025-10-04) - Fixed parsing of `[n of X]` syntax for `InlineArray` in Swift 6.2 - Fixed parsing error when an opening multiline string delimiter is followed by a space - Fixed issue where `redundantInit` rule could leave orphaned parentheses - Fixed bug where `redundantInit` was incorrectly applied to `(Foo.self as Bar.Type)` expressions - Fixed bug with parsing empty property accessors that broke `redundantSelf` rule - Fixed aliasing issue with `acronyms` rule where one acronym overlaps another - Fixed unexpected wrapping of closing parenthesis in `wrapArguments` rule - Added `--unknown-rules` option to support environments with older SwiftFormat versions ## [0.58.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.58.2) (2025-09-29) - Fixed issue where `modifierOrder` rule confused `async` effect for `async` modifier - Fixed issue where testing related rules incorrectly treated functions with arguments as test cases - Updated `redundantInit` rule to apply to `init` calls with single trailing closure - Updated `README.md` to reflect actual precedence behavior between `.swift-version` files and `--swift-version` arguments. ## [0.58.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.58.1) (2025-09-24) - Fixed issue where `async` effect could be confused for `async` modifier, breaking `docCommentsBeforeModifiers` rule in protocol body with async functions - Fixed issue where `wrapAttributes` rule would unexpectedly wrap `async` effect - Fixed issue where `.swift-version` file was ignored if not also using config file - Fixed issue where multiple trailing closure syntax could be applied to ineligible function calls - Fixed issue where `redundantAsync` ignored `await` keyword in string interpolation - Fixed bug where `acronyms` rule would incorrectly always capitalize potentially matching acronyms one letter before end of identifier - Updated `redundantLet` rule to handle `#Preview` macro ## [0.58.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.58.0) (2025-09-22) - Added `noForceUnwrapInTests` rule - Added `redundantThrows` rule - Added `redundantAsync` rule - Added `preferFinalClasses` rule - Added support for Swift 6.2 raw identifiers - Updated `trailingCommas` rule to handle cases now supported by Swift 6.2 - Updated `trailingClosures` rule to support multiple trailing closures - Added support for filtering config file options to a specific file path glob - Added `--allow-partial-wrapping false` option to disallow partial wrapping of functions and collections - Updated `propertyTypes` rule to support array, dictionary, and set literals - Added `organizeDeclarations` threshold options to organize types without adding marks - Added `--type-body-marks remove` option to `organizeDeclarations` - Updated `organizeDeclarations` to support organizing protocol bodies - Updated `organizeDeclarations` to treat `associatedtype` declarations as nested types, like `typealias` declarations. - Added `--blank-line-after-switch-case always` option to `blankLineAfterSwitchCase` - Add `--default-test-suite-attributes` option to `preferSwiftTesting` rule - Renamed `--markdown-files` options to `strict` and `lenient` - Updated `redundantPublic` rule to apply to private types - Updated `trailingClosures` and `trailingCommas` rules to support optional function calls - Fixed bug where `markTypes` rule wouldn't add marks after extensions - Fixed issue where `redundantPublic` broke `@_spi` annotated members - Improved parsing of nested markdown code blocks - Fixed issue where `hoistTry` rule could break `@Test` attribute - Fixed issue where `redundantVoidReturnType` rule could accidentally remove closure type - Fix `blankLinesAroundMark` not ignoring trailing comments at start of scope - Renamed `throwingTests` rule to `noForceTryInTests` - Updated `singlePropertyPerLine` to preserve `async let` declarations ## [0.57.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.57.2) (2025-07-14) - Updated `trailingCommas` rule to handle function declarations with generic arguments. - Updated `--trailing-commas always` to preserve trailing commas rather than unnecessarily removing trailing commas in some edge cases. - Fixed spurious deprecation message when using some non-deprecated options. ## [0.57.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.57.1) (2025-07-14) - Fixed issue where trailing commas were unexpectedly removed from initializer argument lists when using `--trailing-commas always`. - Fixed issue where `redundantPublic` rule didn't handle extensions on types defined in public extensions. - Added `@Bindable` to list of SwiftUI property wrappers used by `organizeDeclarations` rule. - Fixed case-sensitivity issue with `preferFileMacro` rule. ## [0.57.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.57.0) (2025-07-13) - Options now use `--kebab-case`. Existing option names without dashes remain supported for backwards compatibility. Some options have been renamed to improve clarity. - Added support for `:this` and `:previous` in comment directives. - Added support for formatting code blocks in Markdown files. - Added support for multiple `--config` file arguments. - Added `singlePropertyPerLine` rule to convert property declarations defining multiple properties into separate declarations. - Added `redundantMemberwiseInit` rule to remove explicit memberwise initializers that are identical to the `struct`'s compiler-synthesized initializer. - Added `redundantPublic` rule to remove public access control from properties of internal types. - Added `modifiersOnSameLine` rule to keep declaration modifiers on the same line. - Added `throwingTests` rule to prefer using `try` and `throws` in unit tests rather than `try!`. - Added `noGuardInTests` rule to prefer convert guard statements in unit tests to `try #require(...)` / `#expect(...)` or `try XCTUnwrap(...)` / `XCTAssert(...)`. - Added `urlMacro` rule to convert `URL(string: "...")!` initializers to a provided `#URL("...")` macro. - Added `--trailing-commas collections-only` and `--trailing-commas multi-element-lists` options to `trailingCommas` rule. - Added `--type-blank-lines insert` option to `blankLinesAtStartOfScope` and `blankLinesAtEndOfScope` rules. - Added `--wrap-string-interpolation` option to support disabling line wrapping within string interpolation. - Added `--line-between-guards` option to `blankLinesAfterGuardStatements` rule. - Added support for SARIF output format. - Improved performance of the `docComments` rule. - Fixed bug in `docComments` rule where trailing comments would be converted to doc comments. - Fixed bug where `redundantNilInit` rule would ignore type bodies with conformances. - Fixed bug where `wrapEnumCases` didn't handle some nested types correctly. - Fixed issue where `#` characters in config files couldn't be escaped. - Fixed issue where SwiftFormat for Xcode app would generate invalid config files with unescaped `#` characters. - Fixed issue where `--wrap-return-type never` didn't respect `--allman true`. ## [0.56.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.56.4) (2025-06-15) - Fixed issue where `trailingCommas` rule would not insert trailing commas in function declarations with return type - Fixed issue where `trailingCommas` rule would not insert trailing commas in array literals following `!` operator - Fixed issue where `unusedArguments` rule would ignore function declarations with trailing commas - Fixed issue where `void` rule would not handle `()` types in typealiases - Fixed issue where `redundantLet` rule did not detect code inside result builders when nested in conditional compilation blocks ## [0.56.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.56.3) (2025-06-04) - Fixed issue where `trailingCommas` rule would insert commas in closure types and tuple types used in typealaises (not supported in Swift 6.1) ## [0.56.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.56.2) (2025-05-27) - Fixed issues where `trailingCommas` rule would insert commas in `@escpaing` or `@Sendable` closure types (not supported in Swift 6.1) - Fixed issue where `privateStateVariables` rule handled `@Previewable` attributes on previous line incorrectly ## [0.56.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.56.1) (2025-05-13) - Fixed several issues where `trailingCommas` rule would insert commas in places not actually supported by Swift 6.1 - Fixed issue where `--wrapeffects` option would incorrectly unwrap `async let` properties following function call - Fixed issue where `redundantEquatable` rule would incorrectly remove `==` implementation in factor of synthesized implementation even if type contained non-Equatable properies like tuples - Fixed issue where `extensionAccessControl` rule would incorrectly hoist `public` ACL in `@preconcurrency` conformances - Fixed issue where `organizeDeclarations` rule would sometimes break property declarations with if expression values ## [0.56.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.56.0) (2025-05-12) - Added `wrapMultilineFunctionChains` rule to wrap chained method calls - Added `environmentEntry` rule to update SwiftUI `EnvironmentValues` definitions to use the `@Entry` macro - Added `redundantEquatable` rule to remove explicit `Equatable` conformances that would be compiler-synthesized - Added `preferSwiftTesting` rule to migrate XCTest-based tests to Swift Testing - Added `swiftTestingTestCaseNames` rule to remove redundant "test" prefix from Swift Testing test case methods. - Added `preferCountWhere` rule to prefer `count(where:)` over `filter(_:).count` - Added `fileMacro` rule to prefer either `#file` or `#fileID`, which have the same behavior in Swift 6 and later - Added `blankLinesAfterGuardStatements` rule to remove blank lines between consecuitve guard statements, and add blank line after last guard statement. - Added `privateStateVariables` rule to add `private` access control to `@State` properties - Added `emptyExtensions` rule to remove extensions that contain no declarations or conformances - Added `--preserveacronyms` option to `acronyms` rule - Added `--wrapreturntype never` option to `wrapArguments` rule - Updated `trailingCommas` to support Swift 6.1 trailing comma functionality - `opaqueGenericParameters` now supports protocol requirements without a body - `--wrapeffects` and `--wrapreturntype` now support protocol requirements and closure types - Fixed indentation of trailing closures after chained multiline method call when using same-line closing parens - `blankLinesAtStartOfScope` rule now supports switch cases and closure capture / parameter lists - Fixed issue where type under `organizeDeclarations` line count threshold would ignore `swiftformat:sort` directives - Fixed issue where `organizeDeclarations` rule would unexpectedly remove non-mark comments - Compiling SwiftFormat now requires Swift 5.7+ - SwiftFormat prerelease builds can now be installed via Homebrew using `brew install swiftformat --head`. Prerelease builds are subject to breaking changes. ## [0.55.6](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.55.6) (2025-04-29) - Fixed parsing bugs related to parameter packs (`repeat`, `each` keywords) - Fixed bug where `propertyTypes` rule could cause build failure in properties with `some` type - Fixed bug where `--callsiteparen balanced` would have no effect when using `--closingparen same-line` - Fatal error messages now include the name of the currently-running rule - Docker build now uses Swift 6.0.3 ## [0.55.5](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.55.5) (2025-01-20) - Fixed bug with `yodaConditions` rule mangling generic function calls - Fixed indenting of guard `else` or opening brace following `if`/`switch` expression - The `organizeDeclarations` rule no longer treats properties with `didSet` as computed - Improved formatting support for async and throwing closures ## [0.55.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.55.4) (2024-12-22) - Fixed inconsistent indenting of wrapped `where` clause for `switch ... case` statements - Fixed bug where `unusedArguments` could remove required arguments in some cases - The `sortTypealiases` rule now correctly handles `any` keyword ## [0.55.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.55.3) (2024-11-26) - Fixed bug where `sortTypealiases` rule could mangle generic types, or ones using the `any` keyword - The `preferKeyPaths` rule now only uses `\\.self` for Swift 6 and later (fix din't land yet in 5.10) - Added speculative fix for plugin `artifactbundle` not working on `ubuntu-latest` ## [0.55.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.55.2) (2024-11-24) - Fixed bug where `unusedArguments` failed to remove arguments that matched switch variable bindings - Fixed bug where `unusedArguments` failed to remove arguments that matched nested function call labels - Fixed spurious lint errors for `blankLinesAtStartOfScope` when using `organizeDeclarations` rule - Fixed bug where indentation errors were incorrectly reported as `wrap` rule lint errors - The `preferKeyPaths` rule now handles the `\\.self` case for Swift 5.10 and later - Fixed parsing of keyPaths beginning with `\.?` ## [0.55.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.55.1) (2024-11-20) - Fixed bug where `docCommentsBeforeModifiers` got confused by `enum` cases that match modifier names - Fixed bug where `wrapEnumCases` would mangle nested or successive `enum` declarations - Artifact Bundle now includes pre-built binary for ARM-based Linux systems ## [0.55.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.55.0) (2024-11-16) - Added `docCommentsBeforeModifiers` rule to hoist doc comments above declaration modifiers - Added `unusedPrivateDeclarations` rule to remove unused `private` or `fileprivate` declarations - Added `propertyTypes` rule to control the use of inferred or explicit types for properties - Renamed the `--redundanttype` option to `--propertytypes` as it's shared by both rules - Added `--ranges preserve` and `--operatorfunc preserve` options - Added `--languagemode` option to specify if you are using Swift 5 or 6 language mode - The `organizeDeclarations` rule can now sort declarations by name/type/visibility/etc - Fixed `organizeDeclarations` bug where `--beforemarks` unexpectedly matched keywords in function bodies - Fixed missing lint output for `organizeDeclarations` rule - Fixed bug in `markTypes` rule for chained protocol extension names - Renamed the confusing `--onelineforeach` option to `--inlinedforeach` - Git info can now be used in header comments when formatting code from stdin - You can now use the `--outputtokens` option to print output as tokens in JSON format - Each rule and test is now defined in a separate file to make it easier to maintain/contribute - Updated minimum Swift version for building SwiftFormat to 5.3 (you can still format older Swift code) - Docker build now uses static Linux SDK ## [0.54.6](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.54.6) (2024-10-07) - Fixed incorrect wrapping of conditional bodies inside single-line string literals - Fixed properties inside type with where clause being treated as local scope - Fixed regression in `wrapMultilineStatementBraces` rule - Fixed tokenizing of a throwing closure type in a generics clause - Fixed bug in `parseDeclarations` where incorrect tokens could cause rules to time out - Fixed issue where `organizeDeclarations` would add extra blank lines if type had blank lines with spaces - Updated SwiftFormat for Xcode installation instructions for macOS 15 Sequoia - Added known issue to README for `preferForLoop` rule ## [0.54.5](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.54.5) (2024-09-11) - Fixed crash in `unusedArguments` rule - Fixed bug where `preferForLoop` failed if `forEach` contains `guard ... else { return }` ## [0.54.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.54.4) (2024-09-07) - Fixed bug where trailing comma was erroneously inserted into a wrapped array type extension - Fixed bug where `return` was incorrectly removed inside `catch` statement with `where` clause - Fixed `opaqueGenericParameters` rule being incorrectly applied to functions with typed `throws` - Fixed `spaceAroundBrackets` behaving incorrectly inside a macro invocation - Fixed `unusedArguments` false positive inside multiline string literal - Fixed a case where removing `return` resulted in non-compiling code for opaque return types - Redundant `Void` return type is now removed from functions in protocol declarations - Fixed a bug where `unusedArguments` didn't handle conditional assignment shadowing correctly - Fixed Xcode 16 Beta warnings related to unhandled files when building SwiftFormat package - The Swift runtime is now packaged with the installer on Windows as on Linux - The Windows installer now uses a more conventional directory structure - SwiftFormat for Windows now supports arm64 ## [0.54.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.54.3) (2024-07-28) - Fixed issue where `--wrapeffects never` could unexpectedly remove unrelated code - Fixed `--condassignment` option (setting this previously had no effect) - The `redundantReturn` rule no longer removes conditional `return`s if `conditionalAssignment` is disabled - The `redundantObjc` rule now strips implicit `@objc` attribute for `@IBSegueAction` functions - Fixed bug where violations for rules that insert new lines were sometimes ignored in lint output ## [0.54.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.54.2) (2024-07-22) - Fixed broken formatter cache, which caused a significant performance regression since 0.54.0 - The `blankLinesBetweenChainedFunctions` rule now removes blank line after comments in the chain - The `blankLinesBetweenChainedFunctions` rule no longer conflicts with `blankLinesAroundMark` - Fixed`redundantInternal` removing required `internal` keyword in extensions with `where` clause - Fixed another case of spurious `return` removal in conditional blocks - Fixed `redundantNilInit` rule inserting `nil` after `as` keyword ## [0.54.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.54.1) (2024-07-10) - The `--nilInit insert` option is no longer applied to lazy or attributed properties - The `blankLinesBetweenChainedFunctions` rule now correctly handles comments in the chain - Fixed indenting of wrapped arguments in `--fragment` mode - Fixed bug where attributes were mistaken for an accessor in a computer property - Fixed indenting of commented code after an opening bracket - Fixed spurious removal of `return` in conditional blocks - Fixed `--lint` mode reporter output when using `stdin` ## [0.54.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.54.0) (2024-06-11) - Added `blankLineAfterSwitchCase` rule for inserting blank lines after switch cases - Added `consistentSwitchCaseSpacing` rule for ensuring consistent spacing between switch cases - Added `redundantProperty` rule for removing variable assignments where value is immediately returned - Added `redundantTypedThrows` rule for stripping redundant `Never` or `any Error` `throws` types - Setting `--report` without `--reporter` type now raises an error if type can't be inferred - Added XML reporter for Checkstyle-compatible lint reporting (use the `--reporter xml` option) - Added `--typedelimiter` option for controlling spacing around the colon in type definitions - Added `--initcodernil` option for returning `nil` instead of asserting in unavailable `init?(coder:)` - The `fileHeader` rule now uses git info for `created` date (if available) instead of file system - Added git `author`, `author.name` and `author.email` tokens for file header templates - Added `--callsiteparen` option for controlling closing paren placement at function call sites - The `wrapAttributes` rule can now be applied differently to computed properties vs stored properties - The `wrapAttributes` rule can now be applied differently to complex (parameterized) vs simple attributes - Replaced `--varattributes` with `--storedvarattrs`, `--computedvarattrs` and `--complexattrs` options - Added `—-nilinit` option for controlling whether `redundantNilInit` adds or removes explicit `nil` - Added ability to organize declarations by type over visibility (use `--organizationmode type`) - Fixed bug where enabling `organizeDeclarations` for structs caused `sortDeclarations` to have no effect - Fixed bug where if statement body could be incorrectly parsed as a trailing closure - Improved attribute handling in `opaqueGenericParameters rule` - SwiftFormat now recognizes `init` and `_modify` property accessors - Fixed bug with `preferForLoop` rule and tuple argument matching - Extended `conditionalAssignment` rule to handle more cases - Added `--condassignment after-property` option - Fixed await being hoisted outside of macro arguments - Fixed unsafe adding/removal of `self` within macros - Added `os_log` to `--selfrequired` defaults ## [0.53.10](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.53.10) (2024-05-18) - Fixed creation of spurious `stdout` directory when using `--output stdout` - Fixed `unusedArguments` false positive for multiline function call arguments - Fixed parsing of generic arguments containing attributes or `~` operator - Fixed spurious errors about missing `--report` or `--reporter` arguments - Fixed `strongifiedSelf` removing required backticks around nonisolated `self` - Deprecated explicit `default` value for `--reporter` (introduced in 0.53.9) - Added support for `sending` keyword ## [0.53.9](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.53.9) (2024-05-12) - Fixed bug in `unusedArguments` when shadowing function argument with conditional assignment declaration - Individual `--lint` errors are no longer shown in `--quiet` mode (restores pre-0.53.8 behavior) ## [0.53.8](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.53.8) (2024-04-22) - Added `--strict` option to emit non-zero exit code after applying changes in formatting mode - The `enumNamespaces` rule is no longer applied to structs with macros that have generic arguments - The `opaqueGenericParameters` rule is no longer applied to structs with macros or attributes - Fixed another case where `redundantParens` spuriously removed parens inside a closure - Fixed bug where `redundantInit` mishandled a `.init` after a ternary operator ## [0.53.7](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.53.7) (2024-04-14) - Fixed bug with `redundantParens` where first parens inside a closure were spuriously removed - Fixed `wrapEnumCases` rule mangling unindented cases - The `wrapEnumCases` rule no longer wraps cases inside inline enum declarations - Improved the `redundantInit` metatype heuristic to reduce false positives ## [0.53.6](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.53.6) (2024-04-11) - Fixed bug where a space was incorrectly added before a `.` operator inside attribute arguments - The `redundantType` rule no longer strips required explicit type from `@Model` class default values - Fixed issue where `redundantInit` didn't work on collection types - The `redundantParens` rule now correctly handles `@MainActor` closures - Fixed bug where required parens were removed around `each X` parameter pack expressions - Fixed issue where `--wrapreturntype if-multiline` didn't work with arrays, dictionaries, tuples, or generic types - The `spaceAroundParens/Brackets` rules now correctly insert a space after `borrowing`/`consuming` and `isolated` - Fixed spurious line breaks inserted between scoped `import` statements - Added `--doccomments preserve` option to preserve all doc comments, even if not followed by a declaration ## [0.53.5](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.53.5) (2024-03-17) - Fixed bug with trailing comma being inserted into wrapped capture list - Fixed bugs with parsing `nonisolated(unsafe)` modifiers - Fixed bug with hoisting `try` or `async` after a string literal expression - Fixed issue with parsing expressions containing generic arguments - Lint warnings are now displayed as errors when not running in `--lenient` mode - Improved error message for unexpected `static`/`class` modifiers - Added Swift 6.0 to list of supported Swift versions ## [0.53.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.53.4) (2024-03-09) - The `enumNamespaces` rule is no longer applied to structs with attributes or macros - The new `nonisolated(unsafe)` modifier is now handled correctly - Added support for `do throws(Type) { ... }` clauses ## [0.53.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.53.3) (2024-03-02) - The `preferForLoop` rule now correctly singularizes loop conditions that end with "cases" - Fixed bug where `preferForLoop` mangled throwing or async `forEach` expressions - Fixed extension body not being sorted if `organizeDeclarations` was enabled but excluded declaration type - Fixed conditionalAssignment bugs with `@unknown default` cases - Fixed some unsafe applications of the `enumNamespaces` rule - Added preliminary support for typed `throws` ## [0.53.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.53.2) (2024-02-17) - Fixed bug where `hoistAwait` rule could move `await` before `try` keyword - Fixed bug where `redundantSelf` rule was confused by `@MainActor` annotation - Fixed edge case where `unusedArguments` removed required argument inside `guard` ## [0.53.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.53.1) (2024-01-26) - Fixed bug where `fileHeader` could duplicate headers containing a colon - The `redundantInternal` rule no longer strips `internal` from `import` statements - Fixed false positive with `unusedArguments` rule ## [0.53.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.53.0) (2024-01-07) - Added `preferForLoop` rule to convert `forEach { ... }` calls to regular `for` loops - Added `wrapLoopBodies` rule to wrap single-line loop bodies over multiple lines - Added `noExplicitOwnership` rule to remove unwanted `borrowing` and `consuming` modifiers - Added `wrapMultilineConditionalAssignment` rule to wrap `if` or `switch` expressions to new line - The `wrapAttributes` rule no longer unwraps attributes if they would exceed `--maxwidth` - The `typeSugar` rule's `--shortoptionals` option now defaults to `except-properties` - Enabled `blankLinesBetweenChainedFunctions` rule by default - Enabled `blankLineAfterImports` rule by default - Fixed `self` being incorrectly inserted before `set` clause in computed properties - Fixed a bug in `parseType()` helper function where qualified types were not recognized - Fixed Xcode command plugin ## [0.52.11](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.52.11) (2023-12-05) - Updated `if`/`switch` expression workaround for Swift 5.9 bug to handle `as!` casts - Fixed indent logic for wrapped conditional assignment expressions - Fixed assertion failure in `redundantSelf` rule - Fixed raw string parsing bug ## [0.52.10](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.52.10) (2023-11-14) - Fixed `enumNamespaces` rule breaking `import struct`/`class` statements - Fixed unsafe application of `conditionalAssignment` rule to `switch` statements containing `#if` blocks ## [0.52.9](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.52.9) (2023-11-10) - Fixed `redundantClosure` removing required closure around conditional statements - Fixed `redundantClosure` removing closure containing conditional expressions inside a method call - Fixed `redundantClosure` generating invalid code when the `redundantReturn` rule is disabled - Fixed issue where if/switch expressions with `as?` cast would break build in Swift 5.9 - Fixed `blankLineAfterImports` introducing spurious blank line before `@preconcurrency` attribute - Fixed bug where `enumNamespaces` rule wouldn't be applied immediately after an `import` statement - Fixed issue where `switch` case with multiple `where` clauses could be parsed incorrectly - The SwiftFormat SPM plugin now formats local dependencies, not just final product targets ## [0.52.8](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.52.8) (2023-10-17) - Fixed `redundantClosure` rule in cases where an `if`/`switch` expression is not permitted - The `docComments` rule now correctly handles macro comments - The `docComments` rule is now only applied to a comment block if all lines match the pattern ## [0.52.7](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.52.7) (2023-10-06) - Fixed bug where `conditionalAssignment` and `redundantClosure` rules would be applied incorrectly - Fixed `redundantClosure` rule leaving stray `try` or `await` keywords behind ## [0.52.6](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.52.6) (2023-10-01) - Fixed bug where `redundantReturn` rule was incorrectly applied to consecutive `if` statements in Swift 5.9 ## [0.52.5](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.52.5) (2023-09-30) - Fixed bug where `redundantReturn` rule could break fallible initializers in Swift 5.9 - Fixed incorrect application of `docComments` rule inside `#if` statements - The `docComments` rule no longer treats comments starting with `Note:` as a special directive - Fixed incorrect indenting inside `#if` statements immediately preceded by a comment - Removed arbitrary unwrap threshold for `braces` rule when no `--maxwidth` is specified - You can now include operators in the `--asynccapturing` list ## [0.52.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.52.4) (2023-09-17) - Fixed `docComments` rule incorrectly replacing comments inside switch cases and if/guard conditions - Fixed `redundantLet` rule removing required `let` inside `ViewBuilder` modifiers - Fixed `redundantLet` rule removing required `let` after `@MainActor` or `@Sendable` - Fixed bug when using `--wrapconditions after-first` if first line of condition is a comment - Added more context to "failed to terminate" error message to aid tracking down issues - Updated `sortTypealiases` rule to also remove duplicate protocols in declaration - Added some fixes to support parameter packs in Swift 5.9 ## [0.52.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.52.3) (2023-09-02) - Fixed incorrect hoisting of `try` inside multiline string literal interpolations - Fixed incorrect hoisting of `try` inside generic type initializer calls - Fixed case where parens were incorrectly removed around optional function calls - Fixed bug where early `return` statements added while debugging would be incorrectly removed ## [0.52.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.52.2) (2023-08-19) - Fixed static `Self` being incorrectly removed in `let` or `if let` expressions - Fixed `// swiftformat:disable` directive not working for `redundantReturn` rule - Fixed spurious assertion failure ## [0.52.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.52.1) (2023-08-17) - Fixed various bugs and edge cases in `redundantStaticSelf` rule - Fixed bug with `redundantReturn` rule for switch statements containing `fallthrough` - Fixed `redundantReturn` rule stripping required return from `Void` switch statements - Fixed some more cases where prefix `/` operator could be mistaken for a regex literal - The `redundantReturn` rule now handles statements containing comments or raw strings - Fixed spurious warning for unused options when using `--lintonly` rules - Including `/` operator in `--nospaceoperators` or `--nowrapoperators` now works again ## [0.52.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.52.0) (2023-08-13) - Added `redundantInternal` rule to remove redundant `internal` access modifiers - Added `sortTypealiases` rule to sort `typealias` types alphabetically - Added `headerFileName` rule to ensure filename in header comment matches actual file - Added `redundantStaticSelf` rule to remove redundant `self` inside static functions - Added `blankLinesBetweenChainedFunctions` rule to remove blank lines inside function chains - Added `applicationMain` rule to remove obsolete `@UIApplicationMain` and `@NSApplicationMain` attributes - Renamed `sortedSwitchCases` rule to `sortSwitchCases` for consistency - Renamed `sortedImports` rule to `sortImports` for consistency - Redundant `return` is now correctly removed in switch cases with associated values - Fixed failure to terminate when removing returns from long switch statement - Fixed spurious "unexpected static" error in `redundantSelf` rule - Deliberate blank line before `else` statement is now preserved - Rule options are now case-insensitive ## [0.51.15](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.51.15) (2023-08-06) - Fixed regression in `unusedArguments` rule that caused used parameters to be marked unused - Fixed some additional cases where regex literal was mistaken for `/` operator - Vertical tab and form feed characters in source file no longer cause spurious errors ## [0.51.14](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.51.14) (2023-08-05) - Withdrawn ## [0.51.13](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.51.13) (2023-07-18) - Fixed bug where importing a type caused the `redundantSelf` rule to be silently disabled - Fixed bug where `unusedArguments` would remove an argument that was used after an `if` - Fixed Windows support and added Windows release binaries (thanks to Saleem Abdulrasool) - Fixed bug where backticks were incorrectly stripped from standalone `$` identifier - Added support for `package` keyword in `organizeDeclarations` rule ## [0.51.12](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.51.12) (2023-06-13) - Fixed `hoistTry` bugs with generics, subscripts and collection literals - Fixed hoisting bugs with statements containing both `try?` and `try` - Fixed hoisting of `try` inside an optional function - Fixed function argument wrapping bug - Fixed bug where nested closure `in` was mistaken for part of a `for` loop - Added preliminary support for wrapping Swift 5.9 macro declarations - Added preliminary support for Swift 5.9 `package` access modifier - Added preliminary support for Swift 5.9 `consume` and `discard` operators - Added preliminary support for Swift 5.9 `borrowing` and `consuming` modifiers ## [0.51.11](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.51.11) (2023-05-29) - Fixed unexpected static function error false positive in `redundantSelf` rule - Fixed failure to report lint error when removing a duplicate blank line at the end of the file - Fixed bug where `hoistTry` rule failed with more than 10 `try` expressions at the same scope level - Comments containing `TODO:` directives are no longer converted by the `docComments` rule ## [0.51.10](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.51.10) (2023-05-21) - Fixed bug in `wrapAttributes` rule due to `class` declaration being mistaken for class-scoped var - Fixed another case of incorrect indenting inside an `#ifdef` block - Fixed line breaks being incorrectly removed by `sortedSwitchCases` ## [0.51.9](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.51.9) (2023-05-04) - Fixed `typeSugar` rule unwrapping Optional `some/any` without inserting required parentheses - Fixed indenting of function arguments inside an `#ifdef` block after a closing brace - Fixed comment directive state leaking between rules ## [0.51.8](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.51.8) (2023-05-02) - Fixed `redundantSelf` removing non-unwrapped weak `self` inside closures - Fixed `fileprivate` rule making `init` private when inherited by subclass in the same file - Fixed `hoistPatternLet` rule inserting `let` inside dictionary type literal - Fixed indenting for chained members inside conditional compilation blocks - Fixed `unusedArguments` incorrectly removing used argument after conditional compilation block - Improved `unusedArguments` rule error handling ## [0.51.7](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.51.7) (2023-04-18) - Fixed `redundantSelf` incorrectly inserting `self` for local variables declared in capture list - Fixed `blankLineAfterImports` rule inserting blank line before `@_spi` imports - Fixed `fileHeader` rule ignoring headers containing URLs ## [0.51.6](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.51.6) (2023-04-12) - Required `self` is now preserved in function bodies inside closures with `[weak self]` captures - Fixed bug with `hoistTry` inside chains of concatenated interpolated strings - Fixed indenting of dot-prefixed identifiers inside `#else` and `#elseif` blocks - Fixed parsing bug in `redundantSelf` rule ## [0.51.5](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.51.5) (2023-04-09) - Added `--baseconfig` option to replicate old `--config` behavior - Fixed `self` being incorrectly inserted inside capture list - Fixed indenting of `.init` inside `#if` statements - Fixed `redundantInit` glitch inside `#if` statements - Fixed `redundantSelf` inside `if case` expressions - Fixed `hoistTry` for strings containing multiple interpolation clauses - Fixed redundant parens not being removed after `return` keyword - Fixed spacing after attribute when using `--funcattributes same-line` - Fixed false positive in collection literals for `unusedArguments` - Fixed file access permissions errors not being reported ## [0.51.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.51.4) (2023-04-01) - Limited `redundantReturn` inside if / switch expressions to Swift 5.9+ - Fixed `hoistTry` and `hoistAwait` inside multiline string literals - Fixed invalid indenting of blank lines inside multiline string literals ## [0.51.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.51.3) (2023-03-27) - Fixed `hoistTry` and `hoistAwait` rule breaking string interpolations - Fixed bug where `opaqueGenericParameters` rule would remove non-redundant generic type - Fixed parsing bug with trailing closures on optional methods - Fixed `redundantSelf` rule parsing bug affecting string literals - Updated if / switch expression features to be enabled only in Swift 5.9+ ## [0.51.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.51.2) (2023-03-07) - Fixed `hoistTry` rule breaking multiline function chains - Added `--asynccapturing` and `--throwcapturing` options for `hoistTry` and `hoistAwait` rules - Fixed changes in last line of file not being correctly tracked ## [0.51.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.51.1) (2023-03-02) - Fixed `redundantNilInit` removing required `nil` inside Result Builders - Fixed `redundantLet` removing required `let` inside Result Builder `switch/case` statements - Fixed `hoistTry` rule removing second `try` inside XCTAssert statements ## [0.51.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.51.0) (2023-02-28) - Added `hoistAwait` and `hoistTry` rules to hoist inline `await`/`try` to start of expression - Extended `redundantPattern` rule to remove redundant `let` in patterns - The `wrapMultilineStatementBraces` rules is now applied more consistently - Updated `redundantReturn`/`Closure` rules to support `if`/`switch` expressions in Swift 5.8 - Added `conditionalAssignment` rule to assign variables using `if`/`switch` expressions in Swift 5.8 - Updated `redundantType` rule to support `if`/`switch` expression assignment Swift 5.8 - Extended `redundantSelf` rule to support implicit `self` in eligible closures in Swift 5.8 - SwiftFormat now ignores `.swiftformat` files when explicit `--config` file is provided - Added `--wrapenumcases with-values` option to only wrap enum cases with values - Added `--wrapeffects` option for wrapping function effects - Removed unsafe `preferDouble` rule ## [0.50.9](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.50.9) (2023-02-16) - Added GitHub actions log reporter (see `--reporter` option for details) - Fixed bug where `redundantType` sometimes stripped in cases where it couldn't be inferred - The `redundantType` rule now supports removing type in more cases where supported - Made SwiftFormat for Xcode instructions dynamic according to OS version - Fixed bug where a trailing comma could be left behind by `opaqueGenericParameters` rule - Fixed bug where `wrapAttributes` rule sometimes wrapped inline attributes like `@MainActor` - Improved support for `// swiftformat:options` comment directives - Removed deprecated options from the example `.swiftformat` file ## [0.50.8](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.50.8) (2023-01-29) - The `redundantBackticks` rule no longer removes required comments around `self` - Associated type headerdoc comments are now handles correctly by the `docComments` rule - Fixed mangled comments when using the `sortedSwitchCases` rule - Hex, octal or binary literals are now sorted correctly in `sortedSwitchCases` rule - Fixed regression in closed brace indentation (introduced in 0.50.7) - Fixed unsafe semicolon removal after inferred `var` properties - Added fileHeader placeholder documentation ## [0.50.7](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.50.7) (2022-12-27) - Fixed parsing of regex literals preceded by `try` or `await` - Fixed required parens being removed around `await` keyword - Fixed indent for nested, wrapped parameters ## [0.50.6](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.50.6) (2022-12-03) - Fixed regression in `fileHeader` rule where blank lines were removed after header - Fixed globs matching when command-line tool is invoked from a directory such as `/var/tmp` - Fixed bug in parsing regex literals beginning with `^` character ## [0.50.5](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.50.5) (2022-11-29) - Fixed incorrect macOS command line binary that accidentally shipped with 0.50.4 ## [0.50.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.50.4) (2022-11-23) - Added Swift package command plugin - Added `docComments` rule to convert between regular and documentation comments - Fixed `redundantLet` rule incorrectly stripping `let` inside Result Builders - Fixed `void` rule in cases where `Void` has been locally shadowed - Fixed `fileHeader` rule when file only contains header comment - Fixed unexpected indent and spurious `wrap` warning for blank lines - Fixed parsing bug in `redundantSelf` rule ## [0.50.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.50.3) (2022-10-19) - Fixed bug where `redundantFileprivate` rule could break Array extensions using type sugar - Fixed bug and crash in `wrapSingleLineComments` rule relating to long URLs - Improved `wrapSingleLineComments` handling of comments containing long URLs - The `opaqueGenericParameters` rule is now correctly applied to initializers and subscripts - Added some known issues for `opaqueGenericParameters` and `genericExtensions` to README ## [0.50.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.50.2) (2022-10-12) - Fixed `redundantImports` dropping `@_implementationOnly` or `@_exported` annotations - Fixed `blankLineAfterImports` bug affecting `@_implementationOnly` or `@_exported` imports - Fixed case where regex literals were incorrectly interpreted as division operators - Fixed bug with `genericExtensions` and nested generics - Fixed crash in `opaqueGenericParameters` rule ## [0.50.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.50.1) (2022-10-05) - Fixed bug in `opaqueGenericParameters` where type constraint depended on another type parameter - Fixed crash in `opaqueGenericParameters` rule where type constraint contained closure type - Fixed bug where `opaqueGenericParameters` broke variadic parameter expressions - Fixed several bugs in `wrapSingleLineComments` rule - Fixed crash in `andOperator` rule ## [0.50.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.50.0) (2022-09-28) - Added `genericExtensions` rule for simplifying conditional type extensions in Swift 5.7 - Added `markTypes` support for type definitions in extensions - Added `opaqueGenericParameters` rule to use opaque generic parameter syntax where equivalent - Added `blankLineAfterImports` rule - Added `redundantOptionalBinding` rule for simplifying `if let` expressions in Swift 5.7 - Added `--enumnamespaces structs-only` option - Added `wrapSingleLineComments` rule - A `--swiftversion` in the `.swiftformat` config now takes precedence over `.swift-version` file - Multiline string interpolations can now wrap inside parenthesized expression - Comma-delimited options in descendent `.swiftformat` config files are no longer merged - SwiftFormat now requires a minimum of Swift 5.1 to build ## [0.49.18](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.49.18) (2022-08-30) - Fixed bug in `unusedArguments` when argument is shadowed in a `switch` case statement - Fixed `enumNamespaces` rule breaking `open` class declarations - Fixed `redundantLet` removing `let` incorrectly in `async let` statement - Fixed indent regression when using `--xcodeindentation` option ## [0.49.17](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.49.17) (2022-08-16) - Fixed unexpected token error occurring at end of scope after a `<<` operator - Fixed bug where function arguments named `async:` would expectedly be indented - SwiftFormat command-line tool now logs the location and version of .swift-version files it encounters - Added Docker image (thanks to Arthur Semenyutin for the script, see README for details) ## [0.49.16](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.49.16) (2022-08-15) - Fixed `async let` indenting regression (broken in 0.49.15) ## [0.49.15](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.49.15) (2022-08-11) - Fixed illegal wrapping of ternary expressions inside single-line string interpolation - Fixed bug where `await case` was incorrectly interpreted as ending the current scope - Fixed issue where `async throws` was indented incorrectly - Fixed bug where a pair of less-than, greater-than operators could be interpreted as generics - Fixed case where `andOperator` rule could introduce parser ambiguity ## [0.49.14](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.49.14) (2022-08-02) - Fixed `unusedArguments` rule incorrectly removing `async` keyword from closure arguments - Fixed `unusedArguments` not being applied correctly to throwing closures - Fixed assertion failure when parsing `@unchecked Sendable` enum - Fixed assertion failure after applying typeSugar rule to array/dictionary extensions - Fixed line indent after `wrapAttributes` rule is applied - Fixed issue where redundantClosure would break build for Void closures calling @discardableResult functions - Added `--typeblankline` option for `blankLinesAtStartOfScope` and `blankLinesAtEndOfScope` rules - Added support for Xcode `SCRIPT_INPUT_FILE` arguments ## [0.49.13](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.49.13) (2022-07-15) - Fixed `for...in` mistaken for closure `in` in indent rule - Fixed incorrect spacing around `@MainActor` ## [0.49.12](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.49.12) (2022-07-13) - Fixed bug with parsing ternary chains containing chevron - Added another fix for `/` operator - Fixed indent after wrapped closure `in` - Improved rule search in SwiftFormat for Xcode app - Fixed enum popups in SwiftFormat for Xcode options - Added prebuilt SPM binary target ## [0.49.11](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.49.11) (2022-06-22) - Fixed parsing of prefix `/` operator (as used in CasePath library) - Fixed bug with indenting of trailing closures after a conditional statement - Fixed bug with `wrapMultilineStatementBraces` rule - Added Swift 5.6 and 5.7 to supported versions ## [0.49.10](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.49.10) (2022-06-18) - Added preliminary support for Swift 5.7 regular expression literals - Fixed conflict between `wrapMultilineStatementBraces` and `indent` rules - Fixed bug where arguments referenced using `$` prefix were incorrectly marked as unused - Fixed `enumNamespaces` bug where `class` modifiers were mistakenly converted to `enum` - Fixed bug where `preferKeyPath` mangled functions using multiple trailing closure syntax - Unterminated string literals are now treated as an error ## [0.49.9](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.49.9) (2022-05-16) - Fixed bug where trailing comma was incorrectly added inside collection types - Fixed some cases where `redundantVoidReturnType` failed to remove `Void` - Fixed `unusedArguments` regression introduced in 0.49.8 ## [0.49.8](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.49.8) (2022-05-03) - Fixed `redundantInit` rule removing required init when instantiating type variables - Fixed `unusedArguments` incorrectly marking shadowed parameters as used or unused in some cases ## [0.49.7](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.49.7) (2022-04-03) - Redundant `self` is now correctly removed in `if let` assignments - Fixed infinite recursion bug that would cause formatting to time out for some inputs - Lint failure now returns an error code when using stdin, matching behavior for file inputs - Fixed bug where parens were incorrectly removed around optional ranges - Updated `unusedParens` rule for new shorthand `if let` syntax in Swift 5.7 - Updated indenting of function chains to match latest Xcode behavior - Fixed build error on macOS 10.11 and earlier ## [0.49.6](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.49.6) (2022-03-15) - Fixed bug where `redundantParens` rule removed required parens in `any` type expressions - Fixed whitespace behavior around `some`/`any` keywords - Fixed crash when `// swiftformat:sort` was applied to an enum with only one case - SwiftFormat can now be built on Windows ## [0.49.5](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.49.5) (2022-03-06) - Fixed bug where `redundantClosure` incorrectly inlined throwing closures - Fixed bug where in `--exclude` path matching failed when using `--stdinpath` - Fixed a bug with `typeSugar` rule when overriding stdlib types locally in your code - Multiline statement braces are now unwrapped if `wrapMultilineStatementBraces` disabled - Added `// swiftformat:sort` directive to sort declarations by name - You can now use `--disable all` or `--enable all` as shorthand for all rules - The rules in the `Rules.md` file are now grouped by their default/enabled status ## [0.49.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.49.4) (2022-02-07) - Fixed creation date being modified on formatted files - Fixed case where a closure inside an if condition was mistaken for the body - Fixed `blockComments` rule removing leading `*`s used as bullet points - Fixed bug when parsing a raw string containing three consecutive unescaped quotes - Fixed spurious warning about unused `--wrapparameters` option - Fixed edge case when using `--allman` indenting ## [0.49.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.49.3) (2022-01-26) - Fixed required `let` being removed inside View Builders - Fixed `blockComments` rule mangling code on next line after comment (really this time) - Fixed unsafe removal of `self` inside `if` statements containing postfix operators - Fixed `--selfrequired` behavior inside interpolated strings - Fixed indenting of labelled trailing closures ## [0.49.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.49.2) (2022-01-16) - Fixed literal values being incorrectly removed by `redundantType` rule - Fixed `redundantSelf` rule removing `self` from shadowed variables after an `as`/`is` condition - Fixed bug where `redundantClosure` rule could break the build for certain `Void` closures - Fixed parsing error in function calls followed by a subscript - Fixed `blockComments` rule mangling code on next line after comment - The `redundantClosure` rule is no longer applied if closure calls a method that returns `Never` - Fixed meaningless warning for deprecated options ## [0.49.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.49.1) (2021-12-09) - The `blockComments` rule now handles empty leading and trailing comment lines correctly - Fixed crash in `blockComments` rule - The `redundantType` rule now handles comma-delimited declarations correctly - Fixed spurious `self` removal when using `--self init-only` and `--swiftversion 5.4` or above - Added support for the `unowned(safe)` and `unowned(unsafe)` ownership modifiers - Fixed `wrapMultilineStatementBraces` error in SwiftFormat for Xcode app ## [0.49.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.49.0) (2021-12-04) - The `redundantType` rule can now remove redundant types for properties initialized with literal values - The `redundantType` rule now removes types only for local variables by default (to aid compilation performance) - Added `assertionFailures` rule for automatically converting `assert(false, ...)` to `assertionFailure(...)` - Added `acronyms` rule to auto-capitalize acronyms (disabled by default) - Added `preferDouble` rule to replace `CGFloat` with `Double` on Swift 5.5 and above (disabled by default) - Added `wrapConditionalBodies` rule to unwrap single-line guard and if statements (disabled by default) - Added `blockComments` rule to replace multiline block comments with line comments (disabled by default) - Added `blankLinesBetweenImports` rule to remove blank lines between import statements (disabled by default) - Added `redundantClosure` rule to remove unnecessary closure wrappers - Added `--lineaftermarks` option to add/remove a blank line after `// MARK:` comments - Added `--markCategories` option for `organizeDeclarations` rule - Added `--wrapternary` option for controlling how ternary operators are wrapped - Added `--wraptypealiases` option for controlling how typealiases are wrapped - Added `--indentstrings` option for controlling how multiline strings are indented - Extended `redundantParens` rule to handle more cases - Extended `wrapMultilineStatementBraces` rule to handle more cases - Extended `redundantVoidReturnType` rule to apply to closure return values - Fixed bug where `consecutiveBlankLines` rule would strip linebreaks inside multiline string - Fixed bug with indenting of wrapped method chains when using `--xcodeindentation` - SwiftFormat for Xcode app binary is no longer hosted in source repository ## [0.48.18](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.48.18) (2021-11-06) - Fixed `redundantObjc` bug where `private(set)` prevented `@objc` attribute from being stripped - Fixed indenting of wrapped member chains in or after `#if`/`#else`/`#endif` blocks - The `--selfrequired` exclusion list is now applied to nested expressions within function's arguments - Fixed parsing bug in `redundantSelf` rule that raised spurious error about missing `}` - Fixed bug where error is `--filelist` files were incorrectly reported ## [0.48.17](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.48.17) (2021-10-18) - Fixed bug where `trailingCommas` rule added comma to wrapped capture list with comment - Fixed indenting of closure with wrapped capture list - Fixed bug where `redundantArguments` rule stripped params used in pattern matching with inline let - Fixed bug where `redundantArguments` failed to detect shadowed param after tuple assignment - Fixed compilation error introduced when removing redundant parens with inner spaces ## [0.48.16](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.48.16) (2021-10-12) - Fixed unexpected indentation of next line after a trailing closure - Fixed unexpected indentation of `try` expressions - Fixed bug where `redundantInit` could cause compilation failure - Fixed indenting of multiple trailing closures ## [0.48.15](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.48.15) (2021-10-08) - Fixed false positives in `unusedArgument` rule when using `try`/`await` - Closing paren indent is now balanced for double-indented closures - Fixed bug where comment directive failed to disable `redundantSelf` rule - Fixed bug where `redundantSelf` exclusion list was not always applied - Fixed regression introduced in 0.48.5 affecting indenting of wrapped closure bodies - SwiftFormat directives are now recognized in the middle of a comment ## [0.48.14](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.48.14) (2021-10-06) - Fixed some cases where function arguments were incorrectly treated as unused - Fixed incorrect removal of self for some shadowed variables when swift version is >= 5.4 - Fixed indenting of wrapped method chains after a closing paren - Rules listed in swiftformat comment directives are now case-insensitive ## [0.48.13](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.48.13) (2021-10-04) - Fixed bug where `unusedArguments` incorrectly marked shadowed parameters as unused - Fixed wrapped chained functions after an indented closing paren or square bracket - Fixed Mint install ## [0.48.12](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.48.12) (2021-10-02) - The `redundantSelf` rule now removes `self` from shadowed variable references where permitted - Fixed bug where `self` was not correctly removed on the line following an assignment - Fixed some cases where `self` was incorrectly removed from `@dynamicMemberLookup` members - Fixed error raised where removing `self` caused ambiguity with global Swift functions - Function parameters with shadowed names are now correctly marked as unused - The `--selfrequired` option now applies to members, not just `@autoclosure` arguments - Fixed trailing comment placement when using `wrapEnumCases` rule - Fixed indenting of wrapped chained functions after a closing paren or square bracket - Fixed bug where `some(Void)` was converted to `someVoid` - Fixed potential range bounds crash in `editDistance()` function - Now uses automatic test discovery on Linux instead of XCTestManifests file ## [0.48.11](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.48.11) (2021-07-20) - Fixed parsing error introduced in 0.48.10 involving inline closures inside conditional statements - Fixed bug where `redundantSelf` could potentially misidentify tuple labels as local variables ## [0.48.10](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.48.10) (2021-07-18) - Fixed issue with `redundantBackticks` rule incorrectly removing required backticks around underscore - Fixed parsing error in `redundantSelf` with guard conditions containing inline closures ## [0.48.9](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.48.9) (2021-07-09) - Fixed regression introduced in 0.48.7 where parens around prefix expressions were incorrectly removed ## [0.48.8](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.48.8) (2021-07-08) - Fixed regression introduced in 0.48.7 where parens around operator literals were incorrectly removed ## [0.48.7](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.48.7) (2021-07-07) - Fixed bug where `redundantParens` rule could introduce an ambiguity by removing parens around a range argument - Fixed bug where `unowned(unsafe)` capture argument would be mangled by `unusedArguments` rule - Fixed spurious double-indenting of trailing closures in some cases ## [0.48.6](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.48.6) (2021-06-23) - Fixed bug where `actor` variables were incorrectly interpreted as a keyword in certain cases - The `redundantBackticks` rule no longer removes required backticks around `actor` properties - Doc comments containing TODO: are no longer converted to regular comments if it would mangle the docs ## [0.48.5](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.48.5) (2021-06-15) - Fixed bug when parsing generic result builder attributes, leading to incorrect spacing - Fixed bug where wrapped function body was not double-indented as it should have been - Parser now correctly handles `isolated` and `nonisolated` modifiers on `actor` members - Fixed bug where space was incorrectly removed between closure capture list and arguments - Fixed bug with indenting of wrapped method chains ## [0.48.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.48.4) (2021-05-30) - Added support for `actor` and other async/await syntax introduced in Swift 5.5 - Functions with `@Sendable` closure parameters are now formatted correctly - The `redundantGet` rule no longer removes effectful get clauses (i.e. `get throws` or `get async`) - Fixed indenting of postfix expression members inside `#else` and `#elseif` clauses - The `--typeattributes` option now applies to extension attributes as well as type declarations - Improved indentation for accessors/method calls in multiline conditionals ## [0.48.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.48.3) (2021-05-22) - Fixed bug where files would not be correctly excluded when using `--stdinpath` - Fixed bug with `typeSugar` rule affecting optional composed protocol types - Fixed bug where `hoistPatternLet` would incorrectly add let before `nil` or `true`/`false` ## [0.48.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.48.2) (2021-05-16) - Fixed wrapping of generic property wrapper attributes - Fixed bug where trailing comma could be inserted inside a collection type signature ## [0.48.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.48.1) (2021-05-08) - Fixed bug where `typeSugar` rule triggered a Swift bug inside case statements - Fixed double-indenting of trailing closure body on a wrapped line - Fixed compilation failure when installing SwiftFormat using Swift Package Manager - Fixed wrapping of name-spaced property wrapper attributes - Fixed bug where `redundantReturn` rule removed required return inside `catch` statement - Fixed issue where `redundantType` rule introduced compilation warnings by removing explicit Void type - Fixed bug where trailing comma could be inserted inside a subscript nested inside a collection - Fixed spurious space inserted in generic result builder attributes - Successive reads of the same configuration file while formatting are now cached to improve performance ## [0.48.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.48.0) (2021-04-20) - Added `--emptybraces` option to control how empty braces are formatted - The `redundantReturn` rule now removes redundant `return` statements in Void functions - The `redundantParens` rule now removes redundant parens around closure arguments - Fixed parsing error with complex `guard` statements - Extended `prefersKeyPath` to support `contains`, `allSatisfy` and `filter` methods - Fixed matching of excluded paths containing ../ - Added support for using globs/wildcards in input paths - Eliminated false positives in change list when using `--lint` mode - File header comments are now inserted after the shebang/hashbang in executable Swift scripts - Xcode Extension now silently ignores rules requiring file info that isn't available to extensions - Fixed bug where `wrapEnumCases` rule was incorrectly applied to `if case` or `guard case` - Added `--report` argument for exporting formatting changes or lint violations as a JSON file - Improved tab layout in SwiftFormat for Xcode companion app ## [0.47.13](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.47.13) (2021-03-21) - Fixed bug where `--wrapreturntype if-multiline` would unexpectedly wrap a single-line method - Multiline chained functions are now indented correctly when using `--xcodeindentation` - Blank lines are no longer inserted between multiline chained functions separated by comments - Fixed bug in `hoistPatternLet` rule where `let` would be placed on the wrong line - Fixed bug where `Void.self` would incorrectly be converted to `().self` - Fixed incorrect spacing of closure arguments containing attributes - Trailing commas are no longer incorrectly inserted inside wrapped type signatures - Added `--lintonly` argument to specify rules that should only be applied in `--lint` mode ## [0.47.12](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.47.12) (2021-02-23) - Fixed indenting of `switch` cases inside `#if`/`#endif` clauses - Explicit `self` is no longer removed inside types using `@dynamicMemberLookup` - Fixed indenting of wrapped, chained methods when using `--xcodeindentation` - `await` is no longer treated as a keyword if `--swiftversion` is set to < 6 - Fixed issue where single line method after array would wrap unexpectedly - Made repository checkoutable on Windows ## [0.47.11](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.47.11) (2021-01-29) - Fixed bug with `redundandSelf` rule sometimes inserting `self` for a local variable - Fixed `wrapAttributes` rule not working for convenience `init`s, or vars with `private(set)` - Fixed bug with indenting of wrapped members when using `--xcodeindentation` mode - Fixed erroneous space being inserted into keyPaths by `spaceAroundOperators` rule - Fixed bug with `--nospaceoperators` affecting custom infix operators with closure operands - Added support for sorting imports by length instead of alphabetically ## [0.47.10](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.47.10) (2020-12-28) - The `blankLinesBetweenScopes` no longer inserts a blank line before Sourcery comment directives - Fixed bug where `redundantFileprivate` rule could break code that uses property wrappers - Fixed crash in `parseDeclarations` helper ## [0.47.9](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.47.9) (2020-12-24) - Fixed bug with `redundantType` rule removing required type in `if let` expressions - Fixed a bug in `organizeDeclarations` when file contains a class-bound protocol - Improved `sortedSwitchCases` ordering - Removed erroneous space inserted into array initializer by the `spaceAroundParens` rule - Comments followed by a continuation character in SwiftFormat config files now handled correctly - Removed spurious blank lines in console output introduced in 0.47.8 - Improved command-line typo suggestions ## [0.47.8](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.47.8) (2020-12-10) - Fixed additional cases where `fileprivate` was incorrectly converted to `private` in extensions - Added preliminary support for upcoming async/await syntax ## [0.47.7](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.47.7) (2020-12-09) - Fixed critical bug where `fileprivate` was incorrectly converted to `private` in some cases ## [0.47.6](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.47.6) (2020-12-08) - Fixed bug in `redundantReturn` when the `return` statement is not the last line in a block - Fixed sorting of tuple cases when using `sortedSwitchCases` rule - Added `--nevertrailing` option for excluding functions from the `trailingClosures` rule - Added `trailingClosures` exception for Nimble `expect()` function - The `redundantFileprivate` rule is now applied correctly to extension members - Fixed some bugs with static members when using the `--redundanttype explicit` option - SwiftFormat command line tool is now signed for better compliance with Big Sur - Updated icon for Big Sur (thanks to Jim Puls for the icon design) ## [0.47.5](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.47.5) (2020-11-27) - Added `--redundanttype` option for controlling how redundant types are resolved - Numeric case values are now sorted naturally instead of alphabetically - Fixed bug where `redundantFileprivate` rule broke trailing-closure inits - Fixed various `enumNamespaces` rule edge-cases - Broken symlinks no longer raise an error if they are ignored in config - File creation date can now be used in header formats on Linux - The `--symlinks` option now works correctly on Linux ## [0.47.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.47.4) (2020-11-15) - Command-line tool now includes an arm64 slice for Apple Silicon - Increased strictness of grouped extensions logic - Fixed issue where `markTypes` rule would mistake an import declaration as a type - Fixed some additional bugs with unhoisting pattern let - Fixed bug with trailing comma being inserted in capture lists - Added warning when setting options for disabled rules - Fixed bug with `sortedImports` mangling file header comment - Fixed bug with indenting of multiline comments ## [0.47.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.47.3) (2020-11-09) - Fixed bug with `extensionAccessControl` increasing extension access level beyond extended type - Fixed regression with non-standard .swift-version contents being flagged as an error - Fixed bug in `hoistPatternLet` rule when using `--patternlet inline` - Fixed case where `enumNamespaces` was incorrectly applied - Fixed indenting of wrapped line starting with a closing paren or brace - Fixed indenting of blocks starting on same line as a switch case - Fixed indenting of wrapped closure parameter - Fixed bug in `--allman` inference ## [0.47.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.47.2) (2020-10-30) - The `markTypes`, `organizeDeclarations` and`extensionAccessControl` rules now respect comment directives - Errors in .swiftformat config files no longer fail silently - Fixed bug in `--modifierorder` config and added support for SwiftLint modifierorder syntax - Fixed issue where `hoistPatternLet` breaks compilation due to a quirk in Swift parser - Fixed bug in `hoistPatternLet` when expression is wrapped or contains spaces - The `typeSugar` rule is now applied in more cases - Fixed bug in cache logic resulting in slower formatting when using certain config options - Fixed crash in `indent` rule - Fixed bug in wrapped `else` indent ## [0.47.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.47.1) (2020-10-26) - Fixed a crash when using the `fileHeader` rule - Fixed occasional out-of-bounds crash in `markTypes` rule - Fixed bug where `wrapArguments` rule unexpectedly indented blank lines inside braces or brackets - Added `--wrapconditions` option for controlling how multiline conditional statements are wrapped - Unicode whitespace characters other than space and tab are no longer treated as an error - Indenting of `else` clauses now matches Xcode 12 ## [0.47.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.47.0) (2020-10-14) - Indenting of wrapped `if`, `guard`, `while`, etc. now matches Xcode 12 behavior - Added `--assetliterals` option for managing how image/color literal length is handled - Added `enumNamespaces` rule to replace classes/structs that only have static members with an enum - Added `extensionAccessControl` rule to hoist/unhoist access control modifiers inside extensions - Added `markTypes` rule for automatically inserting `MARK:` comments between type declarations - Added `sortedSwitchCases` rule to automatically sort grouped switch cases alphabetically - Added `--wrapreturntype` option to control how return type is wrapped in function declarations - The `organizeDeclarations` rule is now also applied to extensions - Updated `--xcodeindentation` behavior for Xcode 12 ## [0.46.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.46.3) (2020-09-20) - Fixed bug where `redundantType` rule corrupted assignments involving ternary expressions - SwiftFormat for Xcode Extension now works in Xcode 12 out of the box ## [0.46.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.46.2) (2020-09-05) - Fixed space being unexpectedly removed before prefix `.` operator by `spaceAroundOperators` - Fixed bug where a pair of less-than, greater-than operators could be interpreted as generics - Fixed `organizeDeclarations` rule mistaking function with nested class for a lifecycle method ## [0.46.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.46.1) (2020-08-30) - Fixed bug where computed property bodies were sometimes wrongly identified as closures - Fixed spurious blank lines in output when formatting - The `organizeDeclarations` rule no longer inserts blank lines at start/end of scopes - The `organizeDeclarations` rule now groups typealiases with types instead of properties - Improved heuristic for matching `// MARK:` comments in `organizeDeclarations` - Configuration file now allows line continuations using `\` delimiter ## [0.46.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.46.0) (2020-08-28) - Added `organizeDeclarations` rule for grouping and organizing type members - Added `wrapEnumCases` rule for wrapping enum cases onto separate lines - Added `wrapSwitchCases` rule for wrapping switch cases onto separate lines - Added `initCoderUnavailable` rule for marking stub `init(coder:)` implementations as unavailable - Added `redundantType` rule for removing redundant type annotations from variable declarations - Added search filter bar for rules in SwiftFormat for Xcode extension - Selection is now preserved correctly in Xcode 12 when using SwiftFormat extension - Fixed indenting of wrapped closure arguments when using `--closingparen same-line` - Fixed spurious space insertion with `spaceAroundOperators` rule in some circumstances - Switch cases marked with `@unknown` are now indented automatically instead of being ignored - Wrapped method chains now behave more consistently when using `--xcodeindentation` option - Removed deprecated `ranges` rule, but un-deprecated the `ranges` option for convenience - Single-letter command-line flags now behave more usefully (e.g. -o maps to --output) - Spaces are now permitted in comma-delimited command-line arguments - Added more helpful feedback for mistyped arguments ## [0.45.6](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.45.6) (2020-08-12) - Added `--yodaswap` option for more fine-grained control of `yodaConditions` rule - Fixed indentation of wrapped type declarations when using `--xcodeindentation enabled` - Fixed alignment of closure braces when using `--allman` style ## [0.45.5](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.45.5) (2020-08-09) - Fixed .swiftformat configuration file processing when using `--stdinpath` option - Fixed bug where conditional imports could be mangled by `sortedImports` rule - Fixed indenting of braces after throwing function with wrapped return type - Fixed indenting of wrapped `in` keyword inside closure ## [0.45.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.45.4) (2020-08-08) - Improved indenting of wrapped closure braces when using `--allman` indenting - Fixed crash in `blankLinesBetweenScopes` rule when using `--linerange` argument - Fixed `indent` rules behavior when using `--linerange` argument - Audited all rules for `--linerange` compatibility - Improved `Format Selection` behavior in Swiftformat for Xcode extension - Fixed bug with `fileHeader` rule stripping formatting comment directives at top of file - Documented known issue with `preferKeyPath` and `compactMap()` in README file - The value for `--wrapparameters` now defaults to match `--wraparguments` - Fixed indenting of wrapped guard else ## [0.45.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.45.3) (2020-08-03) - Added `--linerange` command-line argument for partial file formatting or linting - Added `--varattributes` option to complement `--funcattributes` and `--typeattributes` - Fixed spurious "Unexpected static/class ..." warning in `redundantSelf` rule - Fixed bug in tokenIndex() calculation when last line does not end in a linebreak - Fixed bug where `self` was incorrectly removed inside trailing closures on generic type init - Blank lines are no longer indented when using `--trimwhitespace nonblank-lines` ## [0.45.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.45.2) (2020-08-01) - You can now tweak formatting options inside source files using `// swiftformat:options ...` directive - The `wrapMultilineStatementBraces` rule is now applied to more statement types - Fixed spurious lint warnings due to conflict between `braces` and `wrapMultilineStatementBraces` rules - Fixed several bugs in `redundantSelf` rule relating to for loops - Fixed bug with indenting of closure arguments - Fixed unsafe removal of backticks around `init` - Rules can now raise an error if they encounter malformed code instead of failing silently - SwiftFormat for Xcode app no longer shows deprecated rules in the rules tab ## [0.45.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.45.1) (2020-07-30) - Fixed bug where `preferKeyPath` was incorrectly applied to function calls and compound expressions - The `wrapMultilineStatementBraces` rule is now applied to `init` and `subscript` braces - The `wrapAttributes` rule now handles `init` and `subscript` the same way as functions ## [0.45.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.45.0) (2020-07-29) - Added `wrapAttributes` rule for controlling attribute position - Added `wrapMultilineStatementBraces` rule for opening braces for wrapped expressions - Added `preferKeyPath` rule for converting trivial closures to keyPaths in Swift 5.2 - Added `--smarttabs` option to support consistent indenting regardless of `--tabwidth` - Updated Xcode extension for Xcode 12 and macOS Big Sur - Added Swift version dropdown to SwiftFormat for Xcode configuration app - Added `--guardelse` option to control wrapping of `else` clauses in `guard` statements - Allman braces are now applied to closure braces, which were previously ignored - The `void` rule now converts `Void()` literals to just `()` - Improved indenting of closing parentheses and brackets - Renamed `--empty` option to `--voidtype`, which better describes its function - Renamed `specifiers` rule to `modifierOrder` for consistency with SwiftLint - Renamed `--specifierorder` configuration option to `--modifierorder` - Fixed bug where `--verbose` mode didn't log path for unchanged files - Improved documentation of `numberFormatting` configuration options - Added Sublime Text plugin instructions ## [0.44.17](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.44.17) (2020-07-12) - The `wrapArguments` rule now keeps internal and external parameter labels on the same line - Multiline string literals are now indented more consistently - Fixed infinite recursion bug in the `redundantSelf` rule - Fixed duplicate file path logging in `--verbose` mode - Indented braces are now always balanced - Add `--stdinpath` option, allowing git pre-commit hook to support file header info - Updated instructions for git pre-commit hook (again) - Added inference for `--noSpaceOperators` option ## [0.44.16](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.44.16) (2020-07-02) - Fixed bug in `--output stdout` processing - Reverted git pre-commit hook instructions ## [0.44.15](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.44.15) (2020-07-01) - Fixed incorrect indenting for double-nested closures - Added inference for `--wrapparameters` option - Fixed incorrect `--wraparguments` inference - The `spaceInsideBraces` rule will no longer add space between nested braces - Fixed bug in `isStartOfClosure()` helper - Fixed indent logic for closing braces - You can now use `--output stdout` even when using a file path for input - SwiftFormat will now raise an error if missing info needed for `fileHeader` rule - Improved SwiftFormat for Xcode app icon - Updated instructions for git pre-commit hook ## [0.44.14](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.44.14) (2020-06-23) - Added new icon for SwiftFormat for Xcode app (thanks to Vikram Kriplaney for the icon design) - Fixed `redundantParens` rule stripping parens around `#file` (used to silence warning in Swift 5.3) - Avoid raising "Malformed .swift-version file" error when using unusual formats (e.g. for beta releases) - Fixed `redundantBackticks` rule unescaping `get` inside subscript with `where` clause - Fixed `redundantReturn` failing to remove `return` in function or subscript with `where` clause - Fixed SwiftFormat for Xcode version number ## [0.44.13](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.44.13) (2020-05-28) - Fixed indenting of closing bracket when using `wrapArguments` rule - Added `--shortoptionals` argument to selectively disable shortening of `Optional` to `T?` for properties - Added `--minversion` argument to specify minimum SwiftFormat version to use for a given codebase ## [0.44.12](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.44.12) (2020-05-27) - Fixed indenting of chained methods with trailing closures - SwiftFormat command-line tool now logs the location of .swiftformat configuration files that it encounters ## [0.44.11](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.44.11) (2020-05-23) - Fixed failure to terminate when wrapping functions after first parameter - First element in a wrapped collection or function is now correctly indented - Added workaround for Swift type sugar parsing bug - The `blankLinesBetweenScopes` rule no longer inserts a blank line before an `#else` block - Downgraded "No eligible files found" error to a warning - Removed "Failed to format any files" error, which was sometimes triggered erroneously - Fixed deprecation warning when building on Linux ## [0.44.10](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.44.10) (2020-05-14) - Fixed bug where `--specifierorder` option values were sorted alphabetically - Fixed a couple of bugs in `hoistPatternLet` when `--patternlet` is set to `inline` - Added support for hoisting/unhoisting `var` and `let` in `do ... catch` patterns - Added error if `--specifierorder` contains duplicate values ## [0.44.9](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.44.9) (2020-05-05) - Added `--specifierorder` argument for overriding default order used by `specifiers` rule - Added `--nowrapoperators` argument for preventing `wrap` rule breaking at specific operators - The `redundantNilInit` rule no longer removes `nil` defaults from vars in structs using synthesized init - Fixed indenting of trailing comment delimiter in multiline comments ## [0.44.8](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.44.8) (2020-05-01) - Fixed a significant performance regression introduced in 0.44.6 - Changed ordering of `override` keyword in specifier lists to match SwiftLint - Fixed timeout due to infinite recursion when formatting nested comments - The `trailingSpace` rule is now called before `indent` to avoid noise when linting - Fixed bug where `unusedArguments` rule ignored all arguments if any was already ignored - Fixed `redundantParens` rule breaking closure argument lists where argument is named `self` - Fixed indenting of multiline string interpolations - Fixed broken formatting of multiline string interpolations - Fixed crash in `wrap` rule - The `wrap` rule now favors wrapping function args over wrapping at `.` operator - Fixed a bug with indenting of pre-formatted multiline comments - Fixed a misleading error message relating to `--tabwidth` option ## [0.44.7](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.44.7) (2020-04-04) - Fixed indenting of wrapped closures after a switch statement - Fixed bug with `redundantNilInit` removing `nil` for properties using parameterized property wrappers - Fixed `redundantRawValues` rule not removing values for back-tick-escaped case names - Improved error messages for misnamed rules - Documentation improvements ## [0.44.6](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.44.6) (2020-03-21) - Fixed timeout when formatting files containing multiple trailing closures - Added `--filelist` argument for specifying input source files list in a standalone file - Fixed bug in the git pre-commit hook suggested in the README file ## [0.44.5](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.44.5) (2020-03-11) - Fixed bug with indenting of chained closures - Fixed bug where wrapped braces were over-indented - Fixed indenting of comments inside enum declarations - Improved consistency of `--xcodeindentation` output with Xcode's built-in formatting - Extension braces are now correctly wrapped - Switch statement braces are now correctly wrapped - Fixed bug where `duplicateImports` rule could remove a required `@testable` import ## [0.44.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.44.4) (2020-02-27) - Allman braces are now applied correctly for lines that end in a numeric literal - Blank line is now removed when stripping a redundant `return` keyword on its own line - Fixed space being inserted before the `.` in a nested PropertyWrapper expression - Fixed `return` being incorrectly removed inside `if` statements containing an un-parenthesized closure ## [0.44.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.44.3) (2020-02-20) - Fixed incorrect indenting of closing multiline string delimiter - Fixed bug where `redundantReturn` rule incorrectly removed `return` after a brace without leading space - Fixed edge case where closures without surrounding parentheses were misinterpreted in if statements - Fixed failure to wrap braces after a struct or init declaration ## [0.44.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.44.2) (2020-02-02) - Fixed crash in line wrapping logic - Fixed several cases where braces were not correctly moved according to `wrap` rule - Prevented wrapping of image and color literals - Fixed bug with `trailingClosures` rule breaking unwrap operators ## [0.44.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.44.1) (2020-01-26) - Fixed `spaceInsideComments` rule mangling preformatted comments with multiple slashes - Fixed `redundantFileprivate` breaking code relying on type-inference for `init` - Reverted overly aggressive argument wrapping change in 0.44.0 - Fixed `redundantParens` rule breaking `#if` statements without space before argument - Fixed `// swiftformat:disable` directives not affecting `wrap` or `wrapArguments` rules - Fixed bug where `yodaConditions` rule caused formatting to never terminate - Fixed crash in `fileHeader` rule ## [0.44.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.44.0) (2020-01-15) - Xcode Extension now includes Lint File option - Xcode Extension now preserves selection after formatting - Improved range-based formatting in Xcode Extension - Wrapping of function calls can now be configured separately from function declarations via the `--wrapparameters` option - Numerous improvements to wrapping and indenting logic (thanks to @AnthonyMDev for the fixes) - Fixed indent logic for unbalanced closing parens - Fixed `self` being removed incorrectly inside if statements - Fixed duplicate lint warnings - Fixed failure to fix indent at start of file - Fixed reported line index for `consecutiveBlankLines` rule ## [0.43.5](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.43.5) (2020-01-04) - Fixed bug where `redundantBreak` rule removed entire line if break appeared after a semicolon - Fixed a couple of cases where `redundantSelf` failed to remove `self` as expected ## [0.43.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.43.4) (2020-01-02) - Fixed regression in `indent` rule` that could cause multiline strings to become mis-formatted - Fixed bug in `--nospaceoperators` option where `..<` operator was rejected - Added instructions for installing SwiftFormat for Xcode via Homebrew cask ## [0.43.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.43.3) (2019-12-31) - Deprecated `ranges` rule and `--ranges` option (use `--nospaceoperators` with `spaceAroundOperators` rule instead) - The `redundantSelf` rule no longer removes self in cases where property requires backtick escaping - Fixed bug with `--nospaceoperators` potentially removing required spaced near linebreaks - Fixed spurious lint warnings in `spaceAroundOperators`, `indent` and `wrap` rules - Improved wrapping heuristic for closures to avoid splitting expressions if avoidable - Fixed indenting of closing brace for line-wrapped closures - Fixed `indent` rule performance regression introduced in 0.43.2 - Added warnings for deprecated options in config file ## [0.43.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.43.2) (2019-12-28) - Added `--nospaceoperators` option for selectively removing space around specific operators - Allow `self` in lazy vars when Swift 4 and above - Fixed spurious lint warning when using a custom header with `fileHeader` rule - Fixed bugs with indenting of consecutive comments - Fixed resolving of macOS aliases when using `--symlinks follow` - Added explicit `stdin` parameter option - Fixed stdin timeout flakiness - Fixed bug with `andOperator` replacing `&&` with `,` inside ViewBuilders ## [0.43.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.43.1) (2019-12-22) - Fixed indent regression in wrapped `let` expressions - Fixed failure to remove `return` in `get` accessors ## [0.43.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.43.0) (2019-12-18) - Added per-line warning when running in `--lint` mode - Significantly improved Xcode integration when running as a build step in `--lint` mode - Added `--lenient` option to suppress errors when running in `--lint` mode - Fixed bug where required `self` was sometimes incorrectly removed inside a trailing closure - Improved `wrap` rule heuristic for prioritizing where a line should be broken - Fixed bug in `typeSugar` rule affecting namespaced types ## [0.42.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.42.0) (2019-11-30) - Added `wrap` rule for automatic wrapping of long statements or expressions based on `--maxwidth` option - Fixed bug with `braces` rule inserting a redundant blank line at the start of nested scopes ## [0.41.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.41.2) (2019-11-27) - Fixed bug with `trailingCommas` rule incorrectly inserting a comma into wrapped collection type expressions ## [0.41.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.41.1) (2019-11-25) - Fixed bug with `wrapArguments` rule incorrectly wrapping code inside interpolated String expressions ## [0.41.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.41.0) (2019-11-23) - The `wrapArguments` rule can now automatically wrap functions and collections to `--maxwidth` - Added `—maxwidth` option to specify the width at which code should wrap (currently only used by `wrapArguments` rule) - Added `—tabwidth` option to help with code indenting and wrapping when using tabs for indent - Fixed indenting of code wrapped after the `in` in a `for...in` loop - Fixed indenting of code wrapped before the `is` in an expression - Added version check for `redundantBackticks` rule to support fixes in Swift 5 - Fixed error when parsing escaped triple-quote in a multiline string - Fixed bug where a multiline comments before an opening brace could result in corrupted output - CLI will now fail if .swiftformat file contains an invalid option, instead of ignoring it - Added support for formatting Swift package manifest files using Xcode Extension ## [0.40.14](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.40.14) (2019-10-28) - The `redundantReturn` rule no longer incorrectly removes `return` inside `catch let` statements - The `andOperator` rule no longer replaces `&&` with `,` inside function builder blocks - Fixed a bug where `redundantFileprivate` rule incorrectly made overridden `fileprivate init` methods private - The `fileHeader` rule no longer strips tools version header from `Package.swift` files - The `todos` rule now recognizes and fixes a wider variety of typos ## [0.40.13](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.40.13) (2019-10-10) - The `redundantReturn` rule now removes `return` from functions and computed properties in Swift 5.1 - Fixed a bug with `let` hoisting ## [0.40.12](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.40.12) (2019-09-20) - Fixed crash when compiling with Xcode 11 - Fixed `redundantFileprivate` rule breaking inner types - Fixed `--quiet` option preventing formatting code to stdout ## [0.40.11](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.40.11) (2019-07-29) - Added `--xcodeindentation` option to use Xcode-style indentation for guards and enums - The `redundantNilInit` rule no longer removes `nil` for properties using property wrappers - Fixed bug where `redundantParens` rule incorrectly stripped Void generic arguments - The `void` rule is now correctly applied to generic type parameters ## [0.40.10](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.40.10) (2019-06-23) - The `emptyBraces` rule no longer removes linebreaks in chained `else`/`catch` blocks - Fixed duplicate `fileHeader` insertion when comment isn't followed by blank line - SwiftFormat command-line tool no longer times out when encountering an empty file - Fixed bug in `yodaConditions` rule affecting parenthesized subexpressions - The `consecutiveBlankLines` rule no longer strips blank lines inside multiline string literals - The `redundantObjc` rule no longer strips `@objc` annotation from `fileprivate` members - The `{file}` placeholder in `fileHeader` templates now works correctly ## [0.40.9](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.40.9) (2019-05-27) - Fixed another case of `redundantSelf` removing required `self` in closures - Fixed behavior of `redundantSelf` in cases where `self` is shadowed - The `redundantObjc` rule no longer strips `@objc` annotation from private members - Fixed bug where `isEmpty` rule mangled expressions containing an array count - The `redundantSelf` rule now correctly inserts `self` in code following a declaration - Fixed bug where `—trailingclosures` option was being ignored - Removed extra newline when printing content to stdout - Fixed some bugs in the `fileHeader` rule ## [0.40.8](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.40.8) (2019-04-16) - Fixed several bugs when using the `--self insert` option ## [0.40.7](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.40.7) (2019-04-12) - Fixed postfix operator followed by `.` being incorrectly interpreted as infix - Fixed bug with `andOperator` in repeat/while loops - Fixed bug with `redundantFileprivate` affecting local subclasses - Fixed regression with `--self insert` adding `self` to function parameter labels - Case-differing imports are now preserved ## [0.40.6](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.40.6) (2019-04-10) - Fixed a regression when parsing a generic type followed by `& SomeProtocol` - Fixed bug where `--self insert` option failed to insert `self` in the line after a `let` or `var` statement - Added `--unexclude` file paths option - Added regression test project suite ## [0.40.5](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.40.5) (2019-04-08) - Fixed indenting of comments before an `#if`/`#else` clause inside a `switch` statement - Fixed indenting of `#if` statement followed by comment inside a `switch` statement - Fixed bug in `self` removal when followed by a `switch` containing an `#ifdef` - Fixed bug when tokenizing chevron operators - Fixed bug when tokenizing generic declarations - Added `init-only` support to explicitSelf inference - Added inference for inline semicolons ## [0.40.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.40.4) (2019-03-23) - Multiple instances of `--disable` or other comma-delimited config options are now merged instead of replacing previous - The `redundantParens` rule no longer removes explicit double-parens used to suppress warnings inside `Selector(...)` - The `trailingCommas` rule no longer breaks calls to `UICollectionView.performBatchUpdates()` - Fixed bug in `yodaConditions` rule that broke KeyPaths ## [0.40.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.40.3) (2019-03-19) - Fixed some bugs with the `redundantFileprivate` rule relating to struct members - The `redundantFileprivate` rule no longer affects members required for protocol conformance - Fixed a bug with `yodaConditions` rule inside ternary expressions ## [0.40.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.40.2) (2019-03-19) - Fixed a bug where the `redundantParens` rule incorrectly removed parens in a subscript or function invocation - Fixed a bug with the `trailingClosures` rule removing parens inside some conditional expressions - Fixed a bug in the `yodaConditions` rule that broke expressions containing subscripts - Fixed the `--swiftversion` option, which was being ignored under some circumstances - Fixed bug that caused the `--fragment` and `--conflictmarkers` options to be ignored - Fixed a bug in the `redundantObjc` rule that incorrectly stripped `@objc` from nested enum types ## [0.40.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.40.1) (2019-03-16) - Fixed bug where `--trailingclosures` would incorrectly remove parentheses before an opening brace - Fixed SwiftFormat for Xcode appearance when running in dark mode on macOS 10.14 (Mojave) ## [0.40.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.40.0) (2019-03-14) - Added `--trailingclosures` option for whitelisting functions that should use trailing closure syntax - The `trailingClosures` rule now only applies to a safe subset of methods by default - Enabled `trailingClosures` rule by default (use `--disable trailingClosures` to opt out) - SwiftFormat now infers values to use for indentation, linebreaks, etc. if the associated rules are disabled - Added new `yodaConditions` rule that moves constant values to the right-hand-side of expressions - The `--dryrun` and `--lint` modes now only list modified files when running in `--verbose` mode - Added an automatic timeout for buggy rules, or if a rule gets stuck when processing malformed input - Fixed a bug in the `wrapArguments` that could corrupt argument lists containing commented lines - Fixed bug where `wrapArguments` sometimes rewrapped parenthesized expressions - Rule documentation is now available programmatically via the command-line - Improved command-line UI, providing additional feedback and more detail in error messages - Simplified SwiftFormat for Xcode app interface (big thanks to @VinceBurn for the UI implementation) ## [0.39.5](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.39.5) (2019-03-06) - Fixed bug in `braces` rule where closing brace was not wrapped onto a new line - Fixed bug with `braces` rule affecting closures inside a `switch` statements - Relative indentation is now preserved inside multiline comment blocks - Fixed indenting of `switch` cases using Swift 5's new `@unknown` attribute - Fixed some errors in documentation and warning messages - The .swift-version file parser now permits cases like `3.0-PREVIEW-4` - Fixed the performance test target, which was broken in Xcode 10.1 ## [0.39.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.39.4) (2019-03-03) - Added support for Swift 5's new raw string syntax - Now correctly detects .swiftformat and .swift-version files placed anywhere in the input path - The swiftformat command-line tool will no longer fail with an error if all matched files were ignored - Fixed bug where `braces` rule failed to correctly apply Allman indenting to `switch` statements - Disabled the `isEmpty` rule again by default (you can enable it using `--enable isEmpty`) ## [0.39.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.39.3) (2019-02-15) - Fixed a bug with `hoistPatternLet` rule for switch cases without a space - Fixed a bug in the `typeSugar` rule when referencing nested types - The .swiftformat configuration file type is now associated with the SwiftFormat for Xcode app ## [0.39.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.39.2) (2019-02-14) - Fixed bug with indenting multi-line strings (introduced in 0.39.1) - Fixed `redundantParens` bug (introduced in 0.39.1) - Corrected documentation for `specifiers` rule ## [0.39.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.39.1) (2019-02-12) - Fixed some cases where `redundantParens` failed to remove redundant parentheses - Fixed rare instance where `indent` rule could incorrectly indent multiline string literals - Added `Rules.md` file to the repository, providing permalinks to the documentation for each rule - Rules documentation is now generated automatically from the SwiftFormat source code - The Xcode Extension app now shows tooltips for rules in the Rules tab - Fixed unit test failure in certain timezones ## [0.39.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.39.0) (2019-02-04) - Added `redundantFileprivate` rule, which replaces `fileprivate` with `private` where possible - Added `redundantExtensionACL` rule, to remove redundant access level keywords inside extensions - Added `typeSugar` rule to replace Array, Dictionary and Optional types with shorthand forms - Added `redundantObjc` rule, which removes unnecessary `@objc` annotations - Added `—selfrequired` option for excluding `@autoclosure` arguments from `redundantSelf` rule - The `isEmpty` rule is now enabled by default, as the risk of false positives is fairly low - Enhanced the `fileHeader` rule with macros for file name and creation date - Added AppleScript integration instructions (thanks to @Lutzifer) ## [0.38.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.38.0) (2019-01-29) - Added support for building, running and testing SwiftFormat on Linux - Added `--swiftversion` option for version-specific features - Added `anyObjectProtocol` rule to replace `class` with `AnyObject` in protocol declarations - Added `redundantBreak` rule that removes unneeded breaks from switch cases - Added `strongifiedSelf` rule which removed backticks in `if let ``self`` = self {}` - The `redundantReturn` rule now removes void returns as well as ones that return a value - Renamed some option values for consistency - The Xcode Extension app now shows tooltips on Options tab ## [0.37.5](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.37.5) (2019-01-24) - Fixed another regression in the `redundantReturn` rule ## [0.37.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.37.4) (2019-01-22) - Fixed a regression in the `redundantReturn` rule, causing `return` to be removed when it shouldn't ## [0.37.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.37.3) (2019-01-19) - Fixed bug in `wrapArguments` rule when using the `after-first` mode - The `elseOnSameLine` rule no longer discards comments between clauses - Fixed bug with `redundantBackticks` incorrectly stripping backticks inside keyPaths - Wrapped closure chains inside a var declaration are now wrapped correctly - Fixed some cases where `redundantReturn` rule was not being applied - Fixed bug with `braces` rule affecting nested closures ## [0.37.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.37.2) (2019-01-01) - Fixed codesign issues with bundled binaries - Significantly improved performance when using globs/wildcards in `--exclude` rules - Added glob syntax documentation to README file ## [0.37.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.37.1) (2018-12-18) - Fixed a bug in the `isEmpty` rule when used inside a function argument - Fixed bug where log messages included ANSI codes in non-terminal stderr output ## [0.37.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.37.0) (2018-12-17) - Added `isEmpty` rule, which converts instances of `if foo.count == 0 {}` to `if foo.isEmpty` (disabled by default) - Added `redundantLetError` rule, which removes `let error` from `catch let error {}` because it's implicit - The `todos` rule now converts `/// MARK:` to `// MARK:`, as the former isn't recognized by Xcode - Fixed problem with the performance tests target not building locally in Xcode 10.1 ## [0.36.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.36.0) (2018-12-15) - Fixed `--exclude` globs matching path prefix instead of whole path (this may break exclude paths that relied on the bug) - Added new `andOperator` rule for replacing `&&` with `,` in `if`, `while` and `guard` statements - Added `init-only` option for the `--self` argument, to enable explicit `self` only inside initializers - Significantly improved performance when using complex `--exclude` rules - Fixed infinite loop bug in `redundantSelf` rule relating to properties named "type" - Fixed caching mechanism which was broken by an earlier Swift update - Fixed spurious error message when `--exclude` option matched no files ## [0.35.10](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.35.10) (2018-12-13) - Removed spurious `--verbose` argument warning - Non-swift files are no longer logged as skipped in `--verbose` mode - Fixed bug with comment indenting inside switch statements - Fixed crash in wrapArguments rule ## [0.35.9](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.35.9) (2018-11-28) - Fixed incorrect formatting of generic arguments containing function types - Fixed inconsistent capitalization of the swiftformat executable in Package.swift ## [0.35.8](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.35.8) (2018-11-23) - Updated `void` rule to support changes introduced in Swift 4 - Fixed a bug where `#endif` could be incorrectly indented if followed by a comment - Added `--importgrouping` option to group imports inside by `@testable` - Fixed a potential bug when loading options in the SwiftFormat for Xcode GUI ## [0.35.7](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.35.7) (2018-10-11) - Fixed error when tokenizing an `enum` declaration with a `where` clause - Fixed bug with spacing around an infix operator used before the `#file` keyword - Fixed bug where `self` was incorrectly removed inside property getters/setters ## [0.35.6](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.35.6) (2018-09-29) - Fixed bug where `self` could be incorrectly removed inside `#if` blocks - Fixed some bugs when inserting or removing `self` inside `didSet` handlers - The `strongOutlets` rule now ignores properties named `delegate` or `dataSource` - The `wrapCollections` rule now behaves more consistently with nested collection literals - Added "Open Recent" menu item to the SwiftFormat for Xcode app ## [0.35.5](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.35.5) (2018-09-08) - Fixed a bug in `redundantParens` rule that affected closure types that take a single tuple argument ## [0.35.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.35.4) (2018-09-05) - Added glob support (unix-style wildcard file pattern matching) for `--exclude` paths - Added `--quiet` option to disable noncritical output messages when using the swiftformat CLI - Fixed a bug where an `import func ...` statement caused the `redundantSelf` rule to loop indefinitely - Disabled ANSI formatting for stderr if stdout is pointing to a terminal interface but stderr isn't - SwiftFormat is now more tolerant of white space around paths in a .swiftformat configuration file - A .swiftformat file generated by SwiftFormat will now always end with a linebreak ## [0.35.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.35.3) (2018-08-21) - Added `--closingparen` option for finer control over function argument wrapping - Fixed bug in wraparguments/collections options inference - Skipped files are now logged when running with the `--verbose` option - SwiftFormat no longer mangles XCUITest tokens in comments by introducing spaces - Dictionary values wrapped onto a different line from the key are now indented correctly - Fixed a bug where automatic removal of spaces around range operators could introduce ambiguity - Disabled ANSI formatting for non-terminal output - Fixed typo in command-line help ## [0.35.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.35.2) (2018-08-10) - Fixed a bug where `--rules` command incorrectly showed all rules as disabled - Added close button to SwiftFormat for Xcode application window ## [0.35.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.35.1) (2018-08-08) - Added support for hierarchical config files with a standard naming convention (see README for details) - You can now specify excluded file paths and file options such as `--symlinks` in configuration files - Standard .swiftformat configuration files are now visible in the SwiftFormat for Xcode open/save dialogs - The .swiftformat configuration file can now contain comments, which are marked using a hash (#) character - Improved cache invalidation. It should no longer be necessary to disable the cache in some cases - Removed Indent from the SwiftFormat for Xcode options, as this is configured using Xcode project settings - Fixed indent inference (really this time!) ## [0.35.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.35.0) (2018-08-04) - Added `--config` argument for loading an external config file using the command-line tool - The `--inferoptions` command can now write the result to a config file using the `--output` option - Added `emptyBraces` rule for removing blank lines inside empty `{}` pairs - Fixed handling of spaces and other special characters inside the `--header` option when using config files - Fixed parsing and serialization of `--header` option in Xcode Source Editor Extension - Fixed a bug in the `specifiers` rule affecting enum cases whose name matches a specifier - Fixed bug where `redundantSelf` could incorrectly remove `self` from a closure instead a case with a `where` clause - Fixed indent inference, which would previously calculate the wrong indent value ## [0.34.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.34.1) (2018-08-01) - Added `// swiftformat:disable:next` directive for temporarily disabling a rule on just the following line - Fixed bug where the `// swiftformat:disable all` directive could result in file contents being stripped - Fixed a bug where `--verbose` mode incorrectly reported which rules were applied to each file - Reset to Defaults menu item in SwiftFormat for Xcode now correctly resets the Infer Format Options setting ## [0.34.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.34.0) (2018-07-30) - You can now configure format options for the Xcode Source Editor Extension (big thanks to @vinceburn for this feature) - Restored ability to build the swiftformat command-line app using Xcode 9.2 on macOS Sierra - Xcode Source Editor Extension no longer fails when using Playgrounds with multiple pages - The `--wrapelementss` option has been renamed to `--wrapcollections` - Added new `--wraparguments preserve` and `--wrapcollections preserve` options - Added `--fractiongrouping` & `--exponentgrouping` options - Improved formatting of Xcode Source Editor Extension error messages - Fixed a bug where parens were incorrectly removed after an image literal ## [0.33.13](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.33.13) (2018-07-25) - Fixed bug where required parens were incorrectly removed from around a closure type - Added `--lint` mode that is similar to `--dryrun` but returns a non-zero exit code if any files require formatting - The swiftformat command-line tool now returns a non-zero exit code in the event of a fatal error while formatting ## [0.33.12](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.33.12) (2018-07-23) - Added `swiftformat:disable all` and `swiftformat:enable all` directives - Fixed a bug where redundant parens were not always removed correctly - Fixed errors when parsing custom operators such as `<>`, `|>` or `<<>>` - Fixed divide-by-zero crash when specifying number groupings with a value of zero - Rules are now always applied in alphabetical order to ensure consistency - Fixed the `--conflictmarkers` command-line option ## [0.33.11](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.33.11) (2018-07-05) - Fixed a bug where `--inferoptions` would always set `--self` to "insert" (this also affected the Xcode extension) - Fixed bug with `redundantSelf` when parsing nested switch statements - Fixed a bug in the `redundantParens` rule that incorrectly removed parens after an indexed tuple (e.g. `foo.1(bar)`) - Spaces are now correctly removed around parens or square brackets after an indexed tuple ## [0.33.10](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.33.10) (2018-07-03) - Fixed a bug where `sortedImports` rule could strip code between `import` statements - Fixed a case where `self` was removed incorrectly inside a switch case condition ## [0.33.9](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.33.9) (2018-07-01) - Fixed incorrect formatting of `!=` operator when used as a function reference - Fixed some additional cases where `self` was not inserted or removed correctly ## [0.33.8](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.33.8) (2018-06-25) - Fixed issue where `self` could be incorrectly inserted inside a `where` clause - Fixed a bug where generics could be misidentified as greater-than / less-than operators - Fixed formatting of `#if` blocks around case statements - The `hoistPatternLet` rule no longer hoists the `let or `var` when there are no named variables - Fixed nondeterministic behavior when applying spacing rules - Fixed warning when compiling with Xcode 10 beta ## [0.33.7](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.33.7) (2018-05-18) - Fixed an issue where headerdoc comments could be stripped by `fileHeader` rule - Fixed a bug with handling absolute paths ## [0.33.6](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.33.6) (2018-04-18) - Fixed a bug where a space could be incorrectly removed after a `try?` or `as?` operator - Both the SwiftFormat command line tool and framework can now be built using Swift Package Manager - Added .pre-commit-hook.yaml file for checking that formatter has been applied when committing - The SwiftFormat command line tool can now be installed using Mint (see README for details) ## [0.33.5](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.33.5) (2018-03-16) - Fixed critical bug in `sortedImports` where code between blocks of import statements could be removed - Fixed bug where wrapped arguments could be double-indented under some circumstances ## [0.33.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.33.4) (2018-02-26) - Fixed a bug in the `unusedArguments` rule that could caused type names to get mangled in closure argument lists - Fixed bug in `sortedImports` that could cause import statement to be moved above the file header comment ## [0.33.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.33.3) (2018-02-21) - Fixed a bug in the `duplicateImports` rule that caused imports of specific types from the same module to be incorrectly stripped - Fixed bugs with how the `duplicateImports` and `sortedImports` rules handle imports separated by semicolons or spanning multiple lines - Fixed a bug with `redundantParens` rule incorrectly removing parens around tuples whose first and last elements were closures - Fixed a bug where the `redundantParens` rule incorrectly removed parens inside compound expressions ## [0.33.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.33.2) (2018-02-20) - The `fileHeader` rule can now be disabled in an individual file by prefixing header with `// swiftformat:disable fileHeader` - Fixed a bug in the `specifiers` rule that could mangle code if the previous line ended with certain identifiers - Fixed typo in `--insertlines` deprecation warning message ## [0.33.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.33.1) (2018-02-10) - Fixed bug preventing host app rule configuration from being read by the Xcode extension - Added `duplicateImports` rule for removing duplicate import statements automatically - Deprecated `--insertlines`/`--removelines` options - enable or disable the specific rules instead - Fixed deprecation warnings in Swift 4.1 / Xcode 9.3 ## [0.33.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.33.0) (2018-02-01) - Added rules configuration UI to the Xcode Source Editor Extension (thanks @vinceburn and @tonyarnold!) - Added `blankLinesAtStartOfScope` rule for removing leading blank lines at the start of functions, classes, etc - Fixed indenting of blank lines within commented code blocks - Added CONTRIBUTING.md ## [0.32.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.32.2) (2018-01-12) - Fixed bug with parsing spaces inside interpolated values in multiline string literals - Added instructions for using SwiftFormat on a CI server with Danger ## [0.32.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.32.1) (2017-12-07) - Added `--dryrun` option, for testing SwiftFormat without making any file changes - Fixed Xcode plugin, which was not deployed correctly in the previous release - Fixed `spaceAroundOperators` rule not inserting space after a switch case or default clause colon ## [0.32.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.32.0) (2017-11-29) - Added `swiftformat:` comment directives for enabling/disabling rules inside a source file (see README for details) - Added `blankLinesAroundMark` rule, which inserts a blank line before and after a `// MARK:` comment - When using the `--self insert` option, `self` is now inserted automatically in more places than it could be before - Fixed some bugs in the `redundantSelf` rule that caused `self` not to be removed in some cases when it should - Exposed the command-line formatting functions as part of the public API when using the SwiftFormat framework ## [0.31.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.31.0) (2017-11-24) - Switched to a more conventional MIT license - Added `strongOutlets` rule that removes weak from `@IBOutlet` properties in accordance with Apple guidelines - Added `sortedImports` rule for sorting `import` statements alphabetically - Fixed warnings in Xcode 9.1 and dropped support for compiling framework with Swift 3.1 - Fixed a bug where a double quote was incorrectly inserted into multiline strings - Fixed a bug where the `--comments ignore` option was ignored for comments inside `switch` statements - Code that has been temporarily commented out should no longer be re-indented ## [0.30.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.30.2) (2017-11-19) - Fixed incorrect indenting of case statements for cases with `where` clauses containing `<` operator - Fixed bug where parens were incorrectly removed around closures in loop or branch conditions - Added compatibility workaround for `self` being incorrectly removed in tests that use the Nimble framework ## [0.30.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.30.1) (2017-11-10) - Fixed error when parsing a subscript with default value inside a `switch` statement - Nil default values are no longer removed inside `Codable` structs/classes, as this can break the implementation ## [0.30.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.30.0) (2017-10-27) - Space is now inserted between the operator name and opening paren in an operator function declaration - Added `--operatorfunc` option to control whether operator should be followed by a space in a function declaration - Added `--elseposition` option to control whether `else`, `catch` & `while` should appear on same line as preceding `}` - Added `--indentcase` option to control whether `case` statements should be indented inside a `switch` - Comments immediately before a `default:` clause are now indented level with the `default` keyword - Fixed bug where backticks would be incorrectly removed when using ``Any`` as an identifier - Error messages are now displayed correctly in the Xcode editor extension - Added test coverage statistics using Slather and Coveralls ## [0.29.9](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.29.9) (2017-10-22) - Fixed critical bug where `hoistPatternLet` rule could corrupt tuples in a switch case clause - Comments immediately before a case statement are now indented level with the case ## [0.29.8](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.29.8) (2017-10-11) - Fixed bug where space was incorrectly removed around postfix/suffix range operators ## [0.29.7](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.29.7) (2017-10-08) - Added support for Swift 4 keyPath syntax ## [0.29.6](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.29.6) (2017-09-21) - Fixed bug in `hoistPatternLet` rule when formatting `case let` patterns with outer parens - The `redundantParens` rule now correctly removes the outer parens in the aforementioned case - Fixed performance regression introduced in 0.29.5 ## [0.29.5](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.29.5) (2017-09-04) - Fixed bounds crash when parsing an empty string literal at the end of a file - SwiftFormat now compiles without modification in Xcode 9 using Swift 3.2 or 4.0 ## [0.29.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.29.4) (2017-08-21) - Fixed a bug where `self` could be incorrectly inserted if local variable is declared inside an `#if` block ## [0.29.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.29.3) (2017-07-31) - Added support for Swift 4's multi-line string literal syntax - Fixed a bug with handling inline comments inside an array literal ## [0.29.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.29.2) (2017-07-03) - Fixed critical bug where space was incorrectly inserted around unary range operators - Fixed bug where `self` could be incorrectly inserted before `type(of:)` if using `--self insert` option - Fixed space being incorrectly inserted after postfix operator inside a subscript or collection literal - Wrapped `case is Type` statements are now indented correctly ## [0.29.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.29.1) (2017-06-29) - Fixed bug where `redundantInit` rule removed a required init in some cases ## [0.29.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.29.0) (2017-06-20) - Changed specifier order from `private(set) public` to `public private(set)` - Added `redundantInit` rule to remove explicit `init` references where they aren't needed - Fixed indentation of class declarations with protocols wrapped onto multiple lines ## [0.28.6](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.28.6) (2017-05-31) - Fixed bug where consecutive `if` statements containing `<` and `>` were misidentified as a generic argument list - Fixed space being removed between a closure capture list and subsequent arguments under some circumstances - Fixed extra space added before prefix operators inside brackets or parens ## [0.28.5](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.28.5) (2017-05-14) - The `redundantParens` rule no longer removes parens after a function call inside a `where` clause - Fixed bug where nil default value was incorrectly removed from lazy var declarations ## [0.28.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.28.4) (2017-04-26) - Fixed bug where `self` was incorrectly inserted inside an `if case let` condition - Fixed incorrect insertion of `self` inside a pattern let clause ## [0.28.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.28.3) (2017-04-20) - Fixed bug where `self` was incorrectly removed in a closure immediately after a var declaration - Fixed incorrect insertion of `self` before a subscript `get` or `set` block - Fixed incorrect insertion of `self` after an `import class` statement - Fixed bug where `self` was not inserted after a return statement ## [0.28.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.28.2) (2017-03-30) - Fixed error when parsing an `enum` declaration inside a `switch` statement - Fixed incorrect removal of backticks when accessing an overloaded `Type` member ## [0.28.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.28.1) (2017-03-28) - Fixed a bug where `redundantSelf` rule incorrectly removed `self` after a `repeat...while` loop - Fixed some bugs where `--self insert` option wrongly added `self` in places it shouldn't have - Improved the documentation of rules and options in the README file and command-line help ## [0.28.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.28.0) (2017-03-24) - Added `--self insert` option to optionally insert `self` when accessing member variables/functions - The `--self` and `--stripunusedargs` arguments can now be inferred automatically using `--inferoptions` - SwiftFormat now detects and rejects source files that contain merge conflict markers - Added `--conflictmarkers` option to optionally ignore conflict markers (e.g. if they clash with a custom operator) - The `redundantSelf` rule now correctly strips `self` from computed var setters and getters - The `redundantSelf` rule now handles static and class variables/functions correctly - Fixed a potential bug where command-line tool might get stuck in an infinite loop - Fixed a bug where a invalid source code could causes variables to be incorrectly removed - Fixed some bugs in error reporting ## [0.27.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.27.1) (2017-03-21) - Fixed trailing space that was incorrectly added to blank lines when `redundantSelf` rule is disabled - Fixed a bug where `self` could be incorrectly removed when using nested function declarations - Fixed a bug where `self` could be incorrectly removed inside class functions - Improved formatting and inferoptions performance ## [0.27.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.27.0) (2017-03-17) - Added `--exclude` command-line option for excluding specific files or folders from formatting - Improved grouping and logging of formatting errors when running in `--verbose` mode - Fixed a bug when using prefix operators with with shorthand class or enum members like `-.someValue` - Fixed some more cases where `self` was incorrectly removed, or wasn't removed when it should have been - Fixed some cases where backtick escaping was incorrectly removed around reserved words - Fixed a bug where `--patternlet inline` could incorrectly move `let` inside a tuple assignment - Fixed parsing of custom operators containing chevrons, e.g. `` - Fixed redundant `return` not being removed from closures in a var declaration - Fixed a performance regression introduced in version 0.26.2 - Fixed bug where `Void()` literal was replaced by `()()` when using `--empty tuple` ## [0.26.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.26.2) (2017-03-15) - Fixed critical bug where `return` was incorrectly removed after a `#selector` or `#keyPath` directive - Fixed several more critical cases where `self` could be incorrectly removed - Fixed case where identifier could be mistaken for a keyword after `self` was removed - Fixed some cases where `self` should have been removed but wasn't - Added tvOS support to the podspec ## [0.26.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.26.1) (2017-03-14) - Fixed critical bug where `self` could be incorrectly removed inside lazy var declarations ## [0.26.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.26.0) (2017-03-13) - Added `redundantSelf` rule for removing the `self` prefix from member references in cases where it isn't needed - Added `--verbose` command-line option for tracking which rules were applied to each file - Added `--patternlet` command-line option for toggling behavior of the `hoistPatternLet` rule - Fixed bug where escaped arguments were treated as unused - Fixed some `unusedArguments` cases - The `redundantBackticks` rule now handles more cases ## [0.25.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.25.2) (2017-03-09) - Fixed bug where `return` keyword could be incorrectly removed inside a conditional statement - Fixed bug where backtick escaping would be incorrectly removed from `Self` ## [0.25.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.25.1) (2017-03-08) - Fixed bug where unused arguments in a failable initializer could be incorrectly formatted - Fixed bug where backtick escaping would be incorrectly removed from certain reserved identifiers ## [0.25.0](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.25.0) (2017-03-07) - The `stripHeaders` rule is now `fileHeaders`, which can strip or replace header comments with a template (see README) - Added `hoistPatternLet` rule that moves `let` and `var` to the beginning of `switch/case` patterns - Added `redundantReturn` rule that strips the `return` keyword from single-line closures - Added `redundantBackticks` rule that removes unnecessary backtick escaping of keywords ## [0.24.7](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.24.7) (2017-02-28) - Fixed a bug where switch cases containing a `..<` operator were parsed incorrectly, resulting in wrong indentation - Fixed a potential bug where source code could be truncated after an error when running with `--fragment` enabled - Command-line tool installation via CocoaPods no longer requires a minimum deployment target of iOS 9 / macOS 10.11 ## [0.24.6](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.24.6) (2017-02-16) - Fixed critical bug where automatic removal of Void return type in closures could alter the type signature - Command-line tool can now be installed via CocoaPods ## [0.24.5](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.24.5) (2017-02-12) - Fixed critical bug where trailing commas were incorrectly added to array or dictionary type declarations ## [0.24.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.24.4) (2017-02-09) - Fixed format rules not being applied when processing input from stdin - Fixed allman brace formatting of optional computed vars - Allman brace rule now removes the blank line immediately after an opening brace ## [0.24.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.24.3) (2017-01-26) - Fixed critical bug where unused `inout` closure arguments were mangled - Fixed critical bug where comma was incorrectly inserted into subscript expressions - Fixed critical bug where functions named "get" could be incorrectly stripped - Unused arguments are now handled correctly in `init` and `subscript` functions - Fixed bug where `_` was doubled up for unused closure arguments ## [0.24.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.24.2) (2017-01-20) - Unused arguments are now handled correctly in non-Void functions - Fixed another bug where keywords used as function argument names were not parsed correctly - Fixed bug when parsing generics containing a `&` protocol-combining operator - Fixed bug where parsing error location was reported incorrectly ## [0.24.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.24.1) (2017-01-19) - Fixed crash in Xcode extension when formatted file has no changes - Fixed caching bug that meant enabled/disabled rules were not taken into account - Unix shebang/hashbang directive at start of a source file is no longer treated as an error ## [0.24](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.24) (2017-01-18) - Fixed a critical bug where closure arguments could be mangled by the `unusedArguments` rule - Added `trailingClosures` rule, to automatically convert closure arguments to trailing closure syntax - Added `--enable` option to enable optional rules such as `trailingClosures` (which is disabled by default) - Added `--stripunusedargs` option to provide more fine-grained control of the `unusedArguments` rule - Added `--decimalgrouping`, `--hexgrouping`, `--binarygrouping` and `--octalgrouping` options - Added `--exponentcase` option for controlling the case of "e" in exponential literals, e.g. `3.4e-5` - Merged `hexLiterals` rule into new `numberFormatting` rule that handles case and grouping of numbers - Renamed `--hexliterals` option to `--hexliteralcase` - The `void` rule now converts `(_: Void)` to `()` automatically - The `redundantParens` rule now removes empty `()` before a trailing closure - Fixed some bugs with floating-point hex literal support - Fixed bug where keywords used as function argument names were not parsed correctly - Added Swift Package Manager support ## [0.23.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.23.1) (2017-01-14) - Fixed critical bug where closure return types could be mangled by the `unusedArguments` rule - Fixed issue where console text appeared as black instead of the user's chosen default color ## [0.23](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.23) (2017-01-09) - You can now specify a whitelist of specific rules to apply using the `--rules` option - Input files are now processed concurrently, yielding a ~2x speed improvement - SwiftFormat now continues if it encounters an error when processing multiple files - Improved error messaging, and added color-coding to the command-line output - `--inferoptions` now accepts multiple space-delimited file paths, or piped input, just like formatting - `redundantVoidReturnType` now removes Void return from closures as well as ordinary functions - `unusedArguments` now works on closures as well as ordinary functions - `unusedArguments` is now more effective at detecting when an argument is unused - Fixed crash in `wrapArguments` rule due to linebreak being incorrectly removed after a single-line comment - Format rules displayed using the `--rules` option are now sorted alphabetically ## [0.22](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.22) (2017-01-03) - Fixed critical bug where `>=` operator was misidentified as end of generic argument list - Added `redundantRawValues` rule to remove string enum literals that match the associated case name - Added `redundantVoidReturnType` rule to remove unnecessary `Void` return type from function declarations - Added `unusedArguments` rule, to replace unused arguments in function declarations with an underscore - Fixed bug with `--inferoptions` and argument wrapping - Fixed bug where extra space was added inside empty `TODO:` comments ## [0.21](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.21) (2016-12-19) - Added `redundantLet` rule to remove unnecessary `let` keyword in statements like `let _ = foo()` - Added `redundantPattern` rule to simplify wildcard patterns like `.foo(_, _)` to just `.foo` - Rules are now run repeatedly until no changes are detected, fixing an issue where changes could be missed - Fixed a bug where extra space was inserted between `?` and `.` in optional chaining expressions - A space is no longer added between a comment and the following comma - Fixed some performance regressions ## [0.20](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.20) (2016-12-09) - Added `redundantNilInit` rule, to remove unnecessary nil initialization of Optional vars - The `trailingCommas` rule now removes trailing commas for inline array literals - Fixed bug in `void` rule when handling chains of throwing functions - Fixed some performance regressions ## [0.19](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.19) (2016-12-02) - Fixed a critical bug where `redundantParens` rule failed to insert space before a prefix operator - Fixed a crash when encountering generic arguments followed by ... - Added `--disable` option for individually disabling rules without needing to recompile - Added `--rules` command to display all the supported rules (useful in conjunction with `--disable`) - Added `--wraparguments` option for controlling how function arguments are wrapped - Added `--wrapelements` option for controlling how array and dictionary elements are wrapped - Added `--symlinks` option for specifying if symlinks/aliases should be followed and formatted - Fixed bug where symlinks to Swift files would be replaced by a copy of the file ## [0.18](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.18) (2016-11-17) - Added `--inferoptions` command line argument for auto-configuring format options from existing source - Added `--ifdef` command line argument for controlling how `#if`...`#endif` clauses are indented - Added `--hexliterals` command line argument for specifying the case to use for hex literals - Added `redundantGet` rule to remove unneeded `get {}` clause in read-only computed properties - Fixed bug where `redundantParens` rule merged identifiers on either side of a removed paren - `redundantParens` now removes unneeded parens from expressions and closure arguments ## [0.17.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.17.2) (2016-11-11) - Fixed critical bug with `redundantParens` rule removing required parens around a closure - Fixed bug with indenting of wrapped closures after a var declaration ## [0.17.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.17.1) (2016-11-09) - Xcode Source Editor Extension now works with Playground files - Fixed operator being incorrectly formatted when file ends with a single-line comment - Fixed bug where the space at the start of a single line comment could increase after each format - Fixed bug where `--cache clear` just ignored cache without actually clearing it - Added `--cache ignore` option, which replicates previous `--cache clear` behavior ## [0.17](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.17) (2016-11-08) - Added cache, allowing SwiftFormat to skip formatting for files that haven't changed - Added `stripHeaders` rule to remove Xcode's copyright header comments (off by default) - Disabled `linebreakAtEndOfFile` rule when formatted text is a fragment - Fixed bug where generics were wrongly formatted if followed by a greater-than sign in the same file - Fixed space incorrectly added after `#available`, `#colorLiteral`, etc - Fixed several bugs with indenting of blocks containing wrapped lines ## [0.16.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.16.4) (2016-11-07) - SwiftFormat is now ~3X faster! - Fixed bug with spacing after an `@convention()` attribute - Fixed bug where the space at the start of a multi-line comment could increase after each format - Fixed bug where wrong indent was applied to wrapped array literal values - Fixed bug where K&R indenting would remove the linebreak before an inline block ## [0.16.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.16.3) (2016-11-03) - Fixed bug with operators containing chevrons - Fixed wrong indent after where statement in switch case ## [0.16.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.16.2) (2016-11-03) - Fixed bug with spacing of deeply nested generic arguments, or generic operator functions - Fixed spacing of `@autoclosure(escaping)` syntax (only used in Swift 2.2) - Fixed bug where `(Void) throws -> Void` was handled incorrectly ## [0.16.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.16.1) (2016-11-03) - Fixed critical bug where `redundantParens` would remove parens from tuple in `switch` condition - Fixed incorrect spacing around attributes that have arguments, e.g. `@convention(block)` - `--comments ignore` command line option now disables leading space insertion in single-line comments ## [0.16](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.16) (2016-11-02) - Added `redundantParens` rule to remove parens around `if`, `while` and `switch` conditions - Added ability to specify multiple file paths for processing in a single command - Fixed a bug with the formatting of `repeat ... while` loops - Added performance tests - API refactoring ## [0.15](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.15) (2016-10-27) - Added `allman` command line option to enable Allman-style indenting instead of default K&R style - Added `removelines` command line option to disable automatic removal of blank lines - Added `insertlines` command line option to disable automatic blank line insertion - Added `trimwhitespace` command line option for disabling truncation of blank lines - Added `comments` command line option for disabling indenting of comments - Added `experimental` command line option for opting-in to bleeding-edge features - Fixed broken `commas` command line option from version 0.14 - Made `blankLinesBetweenScopes` rule less aggressive ## [0.14](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.14) (2016-10-21) - Xcode Source Editor Extension now automatically infers formatting options from the file - Wrapped function arguments and array/dictionary literal value indenting now works more like Xcode - Added `void` rule for normalizing how `Void` return values are represented - Added `empty` command line option for configuring the void rule - Added `commas` command line option for disabling trailing commas - Improved formatting of fragments containing unbalanced braces ## [0.13](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.13) (2016-10-17) - Added Xcode Source Editor Extension (thanks @tonyarnold!) - Fixed indenting of the line after a return statement (which is treated as the return value) ## [0.12.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.12.1) (2016-10-14) - Fixed stripping of space after `@escaping`, `@autoclosure` and `inout` - Fixed stripping of trailing linebreaks when using --fragment option ## [0.12](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.12) (2016-10-08) - Linewrapped `case` elements are now vertically aligned - The `else` keyword in a `guard` statement is no longer indented - The `elseOnSameLine` rule is no longer applied if previous `} is not on its own line - Fixed handling of `case` after comma in an `if` statement - Added support for formatting partial file fragments - Reduced compilation time by ~500ms ## [0.11.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.11.4) (2016-10-05) - Fixed critical bug where optionals with a default value were not handled correctly - Fixed rare bug where code would be incorrectly indented after a custom operator declaration ## [0.11.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.11.3) (2016-10-04) - Fixed spacing between closure capture list and arguments - Fixed incorrect indenting of closures after an `if` statement, and other braced clauses ## [0.11.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.11.2) (2016-10-04) - Fixed incorrect indenting of closures inside `for` loops, and other braced clauses ## [0.11.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.11.1) (2016-10-04) - Fixed incorrect wrapping of chained closures - Improved the logic for wrapped lines; now behaves more like Apple's implementation - Fixed some bugs in command line tool when file paths contain escaped characters ## [0.11](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.11) (2016-09-24) - Fixed handling of `prefix` and `postfix` specifiers - Fixed bug where trailing comma was added to empty array or dictionary literal - Fixed bug where trailing whitespace was added at the start of doc comments - Improved correctness of numeric literal parsing - Converted to Swift 3 syntax ## [0.10](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.10) (2016-09-18) - The `blankLinesAtEndOfScope` rule no longer removes trailing blank lines if immediately followed by other code - The `blankLinesBetweenScopes` rule now adds a blank line after a scope as well as before it - The `blankLinesBetweenScopes` rule no longer affects single-line functions, classes, etc. - Fixed formatting of `while case` and `for case ... in` statements - Fixed bug when using `switch` as an identifier inside a `switch` statement - Fixed parsing of numeric literals containing underscores - Fixed parsing of binary, octal and hexadecimal literals ## [0.9.6](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.9.6) (2016-09-16) - Fixed parsing error when `switch` statement is followed by `enum` - Fixed formatting of `guard case` statements ## [0.9.5](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.9.5) (2016-09-14) - Fixed a number of cases where the use of keywords as identifiers was not being handled correctly ## [0.9.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.9.4) (2016-09-14) - Fixed bug where parsing would fail if a `switch/case` statement contained `default` or `case` identifiers (valid in Swift 3) ## [0.9.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.9.3) (2016-09-12) - Fixed bug where functions would be prefixed with an additional blank line if the preceding line had a trailing comment ## [0.9.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.9.2) (2016-09-09) - Fixed bug where `case` expressions containing a colon would not be parsed correctly ## [0.9.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.9.1) (2016-09-08) - Fixed bug where `trailingCommas` rule would place comma after a comment instead of before it ## [0.9](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.9) (2016-09-07) - Added `blankLinesBetweenScopes` rule that adds a blank line before each class, struct, enum, extension, protocol or function - Added `specifiers` rule, for normalizing the order of access modifiers, etc - Fixed indent bugs when wrapping code before or after a `where` or `else` keyword - Fixed indent bugs when using an operator as a value (e.g. let greaterThan = >) ## [0.8.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.8.2) (2016-09-01) - Fixed bug where consecutive spaces would not be removed in lines that appeared after a `//` comment - SwiftFormat will no longer try to format code containing unbalanced braces - Added pre-commit hook instructions ## [0.8.1]() (2016-08-31) - Fixed formatting of `/*! ... */` and `//!` headerdoc comments, and `/*: ... */` and `//:` Swift Playground comments ## [0.8](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.8) (2016-08-31) - Added new `ranges` rules that adds or removes the spaces around range operators (e.g. `0 ..< count`, `"a"..."z"`) - Added a new `--ranges` command-line option, which can be used to configure the spacing around range operators - Added new `spaceAroundComments` rule, which adds a space around /* ... */ comments and before // comments - Added new `spaceInsideComments` rule, which adds a space inside /* ... */ comments and at the start of // comments - Added new `blankLinesAtEndOfScope` rule, which removes blank lines at the end of braces, brackets and parens - Removed double blank line at end of file ## [0.7.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.7.1) (2016-08-29) - Fixed critical bug where failable generic init (e.g. `init?()`) was not handled correctly ## [0.7](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.7) (2016-08-28) - swiftformat command-line tool now correctly handles paths with `\` escaped spaces, or paths in quotes - Removed extra space added inside `@objc` selectors - Fixed incorrect spacing for tuple bindings - Fixed space before enum case inside closure ## [0.6](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.6) (2016-08-26) - Refactored how switch/case is handled, and fixed a bunch of bugs - Better indenting logic, now handles multiple closure arguments in a single function call ## [0.5.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.5.1) (2016-08-25) - Fixed critical bug where double unwrap (e.g. `foo??.bar()`) was not handled correctly - Fixed bug where `case let .SomeEnum` was not handled correctly ## [0.5](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.5) (2016-08-25) - swiftformat command-line tool now supports reading from stdin/writing to stdout - Added new `linebreaks` rule for normalizing linebreak characters (defaults to LF) - More robust handling of linebreaks and whitespace within comments - Trailing whitespace within comments is now stripped, as it was for other lines ## [0.4](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.4) (2016-08-24) - Added new `semicolons` rule, which removes semicolons wherever it's safe to do so - Added `--semicolons` command-line argument for enabling inline semicolon stripping - The `todos` rule now corrects `MARK :` to `MARK:` instead of `MARK: :` - Paths containing ~ are now handled correctly by the command line tool - Fixed some bugs in generics and custom operator parsing, and added more tests - Removed trailing whitespace on blank lines caused by the `indent` rule ## [0.3](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.3) (2016-08-23) - Fixed several cases where generics were misidentified as operators - Fixed a bug where a comment on a line before a brace broke K&R indenting - Fixed a bug where a comment on a previous line caused incorrect indenting for wrapped lines - Added new `todos` rule, for ensuring `TODO:`, `MARK:`, and `FIXME:` comments are formatted correctly - Whitespace at the start of comments is now handled differently, but it shouldn't affect output ## [0.2](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.2) (2016-08-22) - Fixed formatting of generic function types - Fixed indenting of `if case` statements - Fixed indenting of `else` when separated from `if` statement by a comment - Changed `private(set)` spacing to match Apple standard - Added swiftformat as a build phase to SwiftFormat, so I'm eating my own dogfood ## [0.1](https://github.com/nicklockwood/SwiftFormat/releases/tag/0.1) (2016-08-22) - First release