Skip to content

Releases: swiftlang/swift-format

600.0.0

13 Sep 18:49
Compare
Choose a tag to compare

What's Changed

  • Add option to disable trailing commas on multi-line collections by @mlavergn in #619
  • [Lint] Add a rule to detect and transform [<Type>]() into literal … by @xedin in #617
  • Add support for various new 5.9 features. by @allevato in #622
  • Disable testable imports when testing swift-format by @ahoppen in #624
  • Don’t set SWIFT_BUILD_SCRIPT_ENVIRONMENT when building swift-format by @ahoppen in #630
  • Add the UseExplicitNilCheckInConditions rule. by @allevato in #627
  • Add option to print number of instructions executed by swift-format by @ahoppen in #625
  • Fix building error by @kimdv in #631
  • Rename _InstructionCounter by @bnbarham in #632
  • Fix up import of renamed _InstructionCount by @bnbarham in #633
  • Fix broken links in docs by @japanese-goblinn in #635
  • Allow JSON configuration text to be passed directly on the command line. by @allevato in #634
  • Make all Finding.Message extensions file-private. by @allevato in #636
  • Remove the SwiftFormatConfiguration module. by @allevato in #637
  • Rename generate-pipeline to generate-swift-format. by @allevato in #638
  • Add installation instructions for Homebrew by @beatrupp in #639
  • Fix a bug where an unfolded SequenceExpr would make it to the pretty-printer. by @allevato in #641
  • Ignore too long end of line comments when they're wrapped in `printCo… by @dylansturg in #642
  • Don't lose a trailing comma in UseExplicitNilCheckInConditions. by @allevato in #645
  • Ignore symlinks and hidden (dot) files during --recursive. by @allevato in #644
  • Remove the legacy trivia workaround. by @allevato in #646
  • Add parentheses when needed to convert let _ = expr to expr != nil. by @allevato in #647
  • Various trivia-related fixes. by @allevato in #648
  • Some minor frontend tweaks. by @allevato in #649
  • [AllPublicDeclarationsHaveDocumentation] Fix behavior for override methods. by @allevato in #655
  • Fix multi-line string wrapping in @available attributes. by @allevato in #656
  • Respect SyntaxVisitorContinueKind of rules when run in Pipeline by @thunderseethe in #659
  • Remove deprecated variants from parameterClause case match by @thunderseethe in #661
  • Various fixes for some 509.0.0 bugs. by @allevato in #666
  • [OrderedImports] Fix dropped trailing comments on top-level code items. by @allevato in #674
  • Allow cross-compiling swift-format by @ahoppen in #679
  • Don’t include the toolchain rpath when installing swift-format by @ahoppen in #680
  • Order package manifest to start with the package declaration by @ahoppen in #682
  • [CI] Only use 'required' for Python >= 3.7 by @bnbarham in #686
  • build: introduce a CMake based build for swift-format by @compnerd in #677
  • Clean up rpaths of installed swift-format by @ahoppen in #683
  • Ignore sentence terminators inside quotes when applying the 'BeginDocumentationCommentWithOneLineSummary' option. by @TTOzzi in #687
  • Find configuration based on CWD when formatting from stdin by @judemille in #685
  • fix readme typo by @saturnboy in #688
  • Renamed plugin configuration parameter by @dmonagle in #696
  • [6.0] Depend on swift-syntax release/6.0 instead of main by @ahoppen in #706
  • Update README to specify version 510.1.0 for building from source by @mh-mobile in #709
  • Fix comment for multiElementCollectionTrailingCommas by @ozumin in #710
  • Fix some typos by @mrs1669 in #711
  • Fix @_originallyDefinedIn argument spacing by @dduan in #717
  • Fix incorrect spacing when pretty-printing @_documentation by @dduan in #719
  • Merge main into release/6.0 by @ahoppen in #720
  • Update RuleDocumentation.md by @fawkeswei in #727
  • Remove check for prioritizeKeepingFunctionOutputTogether on enum decl. by @shawnhyam in #728
  • Make sure there is a break after an #endif. by @shawnhyam in #729
  • Merge main into release/6.0 by @ahoppen in #731
  • Merge main into release/6.0 by @ahoppen in #733
  • Merge adjacent .line and .docLine comments into a single element. by @shawnhyam in #732
  • Merge main into release/6.0 by @ahoppen in #742
  • Support for formatting a selection by @DaveEwing in #708
  • Fix @_expose attribute argument spacing by @kateinoigakukun in #750
  • Handle indented block comments with ASCII art correctly. by @shawnhyam in #746
  • Delete CODE_OF_CONDUCT.md by @parispittman in #753
  • Update README.md by @parispittman in #755
  • Delete CONTRIBUTING.md by @parispittman in #754
  • Update links for repositories moved to the swiftlang org on GitHub by @ahoppen in #757
  • Update README.md to mention that swift-format is included in Xcode 16 by @ahoppen in #756
  • [6.0] Update links for repositories moved to the swiftlang org on GitHub by @ahoppen in #758
  • add support for riscv64 by @futurejones in #752
  • Merge main into release/6.0 by @ahoppen in #760
  • Fix a build issue in swift-format by @ahoppen in #762
  • [6.0] Add a break after do when it has typed throws by @bnbarham in #774
  • [6.0] Improve formatting of macro decls with attributes by @ahoppen in #781
  • [6.0] Fix missing break in nested IfConfig decls by @ahoppen in #782

New Contributors

510.1.0

22 Mar 12:15
Compare
Choose a tag to compare

What's Changed

  • Update to non-optional leading/trailingTrivia swift-syntax API by @bnbarham in #497
  • Adjustments to split FunctionParameterSyntax into multiple nodes for function parameters, closure parameters and enum parameters by @ahoppen in #495
  • Prepare 508.0.0 release. by @allevato in #506
  • Fix formatting of import with multiple attributes (fixes #445) and ensure that imports never wrap by @stackotter in #501
  • Fix fatal error caused by switch cases without any statements (#473) by @stackotter in #499
  • Remove the swift-tools-support-core dependency from swift-format. by @allevato in #509
  • Fix pretty printing of multi-statement closures (issue #494) by @stackotter in #498
  • Avoid removing certain disambiguating parens from conditions (fixes #298) by @stackotter in #503
  • Fix more postfix pound if scenarios by @DavidBrunow in #402
  • Remove usages of functions that shouldn’t be part of SwiftSyntax’s public API by @ahoppen in #504
  • Removed warnings by @CippoX in #510
  • Adjustment for SwiftSyntax rename members -> memberBlock by @ahoppen in #512
  • [SwiftSyntax] Remove force unwrapping for source location by @kimdv in #513
  • Change version dependency on swift-argument-parser to from upToNextMinor to upToNextMajor by @ahoppen in #517
  • Replace deprecated code of swift-syntax with the latest code to remove warning by @TTOzzi in #531
  • Fix indentation of multiline strings when part of a larger expression. by @allevato in #532
  • Fix try/await expressions in NoAssignmentInExpressions. by @allevato in #533
  • Further improve multiline string formatting. by @allevato in #534
  • Allow exceptions to NoAssignmentInExpressions. by @allevato in #535
  • Add Token.break after fixity in operator declaration by @StevenWong12 in #536
  • Rename elementList in TupleExprSyntax to elements by @StevenWong12 in #537
  • Fix async throws function types when they appear in an expression context. by @allevato in #539
  • Replace deprecated code from swift-syntax by @TTOzzi in #540
  • Wrap keypath literals appropriately. by @allevato in #545
  • Format macro declarations. by @allevato in #546
  • Insert white space before trailing closure of a macro expression by @kimberninger in #544
  • Rename 'squareBracket' to 'square' by @TTOzzi in #541
  • Delete UnknownNodeTests. by @allevato in #548
  • Fix formatting of @backDeploy attribute. by @allevato in #550
  • Don't insert an extra break inside empty multiline strings. by @allevato in #551
  • Downgrade editor placeholder in source file from error to warning. by @allevato in #547
  • Improve wrapping of if/switch expressions. by @allevato in #553
  • Fix postfix-#if formatting when they come after a closing parenthesis. by @allevato in #554
  • Fix indentation of multiline strings in enum case raw values. by @allevato in #555
  • Fix deprecated SwiftSyntax api warnings by @kitasuke in #558
  • Remove the compiler condition guarding DerivativeRegistrationAttributeArgumentsSyntax. by @allevato in #559
  • Use swift-markdown to parse documentation comments. by @allevato in #560
  • Adjustment because of a property rename in swift-syntax by @ahoppen in #561
  • Replace [TriviaPiece].Index with Array<TriviaPiece>.Index. by @allevato in #565
  • Remove --mode flag for configuration dump by @Gray-Wind in #566
  • Use newer equivalents of deprecated nodes names by @Matejkob in #567
  • Add XCTest exclusion comment for lint rules by @kitasuke in #568
  • Use methods on Sequence instead of SyntaxCollection by @kitasuke in #569
  • Update swift-format for renamed children in SwiftSyntax by @ahoppen in #562
  • Fix deprecated warnings regarding swift-syntax changes by @kitasuke in #570
  • Adjustments for node renames in swift-syntax by @ahoppen in #572
  • Remove initializer from TupleTypeElementSyntax initializer call by @ahoppen in #573
  • Rename children of differentiability nodes by @ahoppen in #574
  • Adjustments for refactoring of representation of Accessors in SwiftSyntax by @ahoppen in #576
  • Use where instead of filter for for loops by @ahoppen in #575
  • Adjustments for usage of DeclReferenceExprSyntax as child of MemberAccessExprSyntax by @ahoppen in #577
  • [Core] Add new finding severity kinds - refactoring and convention by @xedin in #578
  • Fix deprecation warnings from renamed nodes / types in SwiftSyntax by @ahoppen in #579
  • Move the default Configuration.init() into a separate file. by @allevato in #580
  • Don't alter doc line comments unnecessarily. by @allevato in #581
  • Improve a bunch of diagnostic messages. by @allevato in #583
  • Migrate away from the latest deprecated APIs. by @allevato in #584
  • Replace the ReplaceTrivia rewriter with direct trivia mutations. by @allevato in #588
  • Parenthesize some/any types when converting Optional to ?. by @allevato in #589
  • Update for the fact that syntax collections are always non-optional in SwiftSyntax now by @ahoppen in #585
  • Make shebang a child of SourceFileSyntax by @StevenWong12 in #590
  • [Lint] Add a rule to detect that type declarations are not capitalized by @xedin in #587
  • Don't warn about a redundant synthesized memberwise init if it has attributes. by @allevato in #592
  • Collapse almost everything into a single SwiftFormat module. by @allevato in #593
  • Refactor tests. by @allevato in #595
  • Don't do anything if the input is empty. by @allevato in #599
  • Fix a bunch of FIXMEs around linter findings. by @allevato in #597
  • [Lint/Format] Add a rule to omit return from functions, closures, subscripts, and variables by @xedin in #596
  • [Lint] Add a rule to replace .forEach with a for-in loop by @xedin in #603
  • Replace with calls with in-place mutation; clean up helpers. by @allevato in #609
  • Actually implement NoPlaygroundLiterals rule. by @allevato in #613
  • Adjust for "remark" diagnostic severity by @DougGregor in #605
  • Move Configuration into the SwiftFormat module. by @allevato in #614
  • Fix invalid links in README by @woxtu in #594
  • Default to all targets when plugin --target parameter missing. Fix #483 by @BrianHenryIE in #608
  • Remove unnecessary casting by @Matejkob in #618
  • Output a warning for unknown configuration rules in .swift-format by @natikgadzhi in #612
  • Generate rule docs automatically by @natikgadzhi in #615
  • [5.10] Add fixes that were present in 509.0.0 but not release/5.10 by @ahoppen in #704

New Contributors

Read more

509.0.0

15 Sep 11:29
83248b4
Compare
Choose a tag to compare

This release is compatible with Swift 5.9.

Significant changes since the last release:

New rules

  • AlwaysUseLiteralForEmptyCollectionInit: transforms no-argument initializer calls on collection types to use the empty collection literal instead. For example, let x = [Int]() will be transformed into let x: [Int] = []. This rule is opt-in (disabled by default).
  • NoPlaygroundLiterals: emits lint findings when the playground literals (#colorLiteral, #fileLiteral, #imageLiteral) are used in code. Enabled by default.
  • OmitExplicitReturns: removes unnecessary return keywords from single-expression function/closure/subscript/accessor bodies. This rule is opt-in (disabled by default).
  • ReplaceForEachWithForLoop: emits lint findings when the forEach method is called with a closure literal at the end of a member access chain, indicating that it should be replaced by a for loop instead. Enabled by default.
  • TypeNamesShouldBeCapitalized: emits lint findings when a type is declared with a name that is not UpperCamelCase. Enabled by default.

New configuration settings

  • multiElementCollectionTrailingCommas (boolean): When set to false, the last element of a multi-element array or dictionary literal will not have a trailing comma, even when the literal wraps across multiple lines. Defaults to true (preserving the behavior of previous releases).

Bug fixes and behavior changes

  • swift-format no longer crashes when formatting a case block that contains no statements.
  • In multi-statement closures, there is now always a line break between the in keyword and the first statement.
  • Attributes before import statements are no longer wrapped.
  • The NoParensAroundConditions rule no longer removes parentheses around an immediately called closure.
  • The NoAssignmentInExpressions rule can be configured to ignore assignments that occur inside certain function calls. The default configuration ignores assignments inside XCTAssertNoThrow.
  • When an editor placeholder is found in the source, this is now treated as a warning instead of an error. This allows formatting to continue, treating the placeholder as a regular identifier.
  • Keypath literals are properly wrapped and indented.
  • Postfix-#if expressions are no longer indented too far when they follow a closing parenthesis.
  • Indentation of multiline strings has been fixed in a number of locations.
  • Documentation comment parsing has improved for rules like BeginDocumentationCommentWithOneLineSummary, UseTripleSlashForDocumentationComments, and ValidateDocumentationComments.
  • Diagnostic messages throughout swift-format have been cleaned up and improved.
  • The UseShorthandTypeNames rule properly parenthesizes optional some/any types; for example, Optional<any P> becomes (any P)?, not any P? (which is invalid).
  • The UseSynthesizedInitializer rule no longer warns that an initializer is redundant if it is declared with any attributes.
  • The lint/format plugins for SPM now default to processing all targets if the --target argument is not specified.
  • swift-format now emits a warning if you configure a rule that does not exist. This is meant to help catch typos in the configuration file.
  • swift-format now does nothing if its input is empty (i.e., a zero-byte file). This suppresses a single trailing newline that would have otherwise been added in this case.

API changes

For developers using swift-format as a library, the types in the SwiftFormatConfiguration module have been folded into the SwiftFormat module. The SwiftFormat module is now the sole module you should import to use the linter/formatter APIs.

The SwiftFormatConfiguration module still exists to re-export the types for backwards compatibility, but this will be removed in the 510.0.0 release.

Swift 5.10 Release

06 Mar 16:12
f14a625
Compare
Choose a tag to compare

What's Changed

  • Update to non-optional leading/trailingTrivia swift-syntax API by @bnbarham in #497
  • Adjustments to split FunctionParameterSyntax into multiple nodes for function parameters, closure parameters and enum parameters by @ahoppen in #495
  • Prepare 508.0.0 release. by @allevato in #506
  • Fix formatting of import with multiple attributes (fixes #445) and ensure that imports never wrap by @stackotter in #501
  • Fix fatal error caused by switch cases without any statements (#473) by @stackotter in #499
  • Remove the swift-tools-support-core dependency from swift-format. by @allevato in #509
  • Fix pretty printing of multi-statement closures (issue #494) by @stackotter in #498
  • Avoid removing certain disambiguating parens from conditions (fixes #298) by @stackotter in #503
  • Fix more postfix pound if scenarios by @DavidBrunow in #402
  • Remove usages of functions that shouldn’t be part of SwiftSyntax’s public API by @ahoppen in #504
  • Removed warnings by @CippoX in #510
  • Adjustment for SwiftSyntax rename members -> memberBlock by @ahoppen in #512
  • [SwiftSyntax] Remove force unwrapping for source location by @kimdv in #513
  • Change version dependency on swift-argument-parser to from upToNextMinor to upToNextMajor by @ahoppen in #517
  • Replace deprecated code of swift-syntax with the latest code to remove warning by @TTOzzi in #531
  • Fix indentation of multiline strings when part of a larger expression. by @allevato in #532
  • Fix try/await expressions in NoAssignmentInExpressions. by @allevato in #533
  • Further improve multiline string formatting. by @allevato in #534
  • Allow exceptions to NoAssignmentInExpressions. by @allevato in #535
  • Add Token.break after fixity in operator declaration by @StevenWong12 in #536
  • Rename elementList in TupleExprSyntax to elements by @StevenWong12 in #537
  • Fix async throws function types when they appear in an expression context. by @allevato in #539
  • Replace deprecated code from swift-syntax by @TTOzzi in #540
  • Wrap keypath literals appropriately. by @allevato in #545
  • Format macro declarations. by @allevato in #546
  • Insert white space before trailing closure of a macro expression by @kimberninger in #544
  • Rename 'squareBracket' to 'square' by @TTOzzi in #541
  • Delete UnknownNodeTests. by @allevato in #548
  • Fix formatting of @backDeploy attribute. by @allevato in #550
  • Don't insert an extra break inside empty multiline strings. by @allevato in #551
  • Downgrade editor placeholder in source file from error to warning. by @allevato in #547
  • Improve wrapping of if/switch expressions. by @allevato in #553
  • Fix postfix-#if formatting when they come after a closing parenthesis. by @allevato in #554
  • Fix indentation of multiline strings in enum case raw values. by @allevato in #555
  • Fix deprecated SwiftSyntax api warnings by @kitasuke in #558
  • Remove the compiler condition guarding DerivativeRegistrationAttributeArgumentsSyntax. by @allevato in #559
  • Use swift-markdown to parse documentation comments. by @allevato in #560
  • Adjustment because of a property rename in swift-syntax by @ahoppen in #561
  • Replace [TriviaPiece].Index with Array<TriviaPiece>.Index. by @allevato in #565
  • Remove --mode flag for configuration dump by @Gray-Wind in #566
  • Use newer equivalents of deprecated nodes names by @Matejkob in #567
  • Add XCTest exclusion comment for lint rules by @kitasuke in #568
  • Use methods on Sequence instead of SyntaxCollection by @kitasuke in #569
  • Update swift-format for renamed children in SwiftSyntax by @ahoppen in #562
  • Fix deprecated warnings regarding swift-syntax changes by @kitasuke in #570
  • Adjustments for node renames in swift-syntax by @ahoppen in #572
  • Remove initializer from TupleTypeElementSyntax initializer call by @ahoppen in #573
  • Rename children of differentiability nodes by @ahoppen in #574
  • Adjustments for refactoring of representation of Accessors in SwiftSyntax by @ahoppen in #576
  • Use where instead of filter for for loops by @ahoppen in #575
  • Adjustments for usage of DeclReferenceExprSyntax as child of MemberAccessExprSyntax by @ahoppen in #577
  • [Core] Add new finding severity kinds - refactoring and convention by @xedin in #578
  • Fix deprecation warnings from renamed nodes / types in SwiftSyntax by @ahoppen in #579
  • Move the default Configuration.init() into a separate file. by @allevato in #580
  • Don't alter doc line comments unnecessarily. by @allevato in #581
  • Improve a bunch of diagnostic messages. by @allevato in #583
  • Migrate away from the latest deprecated APIs. by @allevato in #584
  • Replace the ReplaceTrivia rewriter with direct trivia mutations. by @allevato in #588
  • Parenthesize some/any types when converting Optional to ?. by @allevato in #589
  • Update for the fact that syntax collections are always non-optional in SwiftSyntax now by @ahoppen in #585
  • Make shebang a child of SourceFileSyntax by @StevenWong12 in #590
  • [Lint] Add a rule to detect that type declarations are not capitalized by @xedin in #587
  • Don't warn about a redundant synthesized memberwise init if it has attributes. by @allevato in #592
  • Collapse almost everything into a single SwiftFormat module. by @allevato in #593
  • Refactor tests. by @allevato in #595
  • Don't do anything if the input is empty. by @allevato in #599
  • Fix a bunch of FIXMEs around linter findings. by @allevato in #597
  • [Lint/Format] Add a rule to omit return from functions, closures, subscripts, and variables by @xedin in #596
  • [Lint] Add a rule to replace .forEach with a for-in loop by @xedin in #603
  • Replace with calls with in-place mutation; clean up helpers. by @allevato in #609
  • Actually implement NoPlaygroundLiterals rule. by @allevato in #613
  • Adjust for "remark" diagnostic severity by @DougGregor in #605
  • Move Configuration into the SwiftFormat module. by @allevato in #614
  • Fix invalid links in README by @woxtu in #594
  • Default to all targets when plugin --target parameter missing. Fix #483 by @BrianHenryIE in #608
  • Remove unnecessary casting by @Matejkob in #618
  • Output a warning for unknown configuration rules in .swift-format by @natikgadzhi in #612
  • Generate rule docs automatically by @natikgadzhi in #615

New Contributors

Read more

508.0.1

17 May 20:11
fbfe186
Compare
Choose a tag to compare

This release is compatible with Swift 5.8.

Compared to 508.0.0, this release relaxes the version requirement for swift-argument-parser, resulting in fewer version conflicts for users of swift-format and SwiftSyntax.

508.0.0

07 Apr 18:14
3330aaa
Compare
Choose a tag to compare

This release is compatible with Swift 5.8.

Significant changes since the last release:

  • The spacesAroundRangeFormationOperators configuration option has been added to force a space around range formation operators like ... and ..<.
  • A new rule, NoAssignmentInExpressions, has been added that emits a linter finding if an assignment expression is found in another expression context (for example, return x = y).
  • Format and Lint plug-ins have been added that can be used from Swift Package Manager and Xcode.
  • Detection of "files that contain XCTests" has been improved to include cases where XCTest is imported conditionally in a #if block.
  • Primary associated type clauses in protocol declarations are formatted correctly.
  • When a closure literal contains both a leading attribute and a capture list (e.g., { @MainActor [weak self] in ...), a space is guaranteed between the attribute and capture list.
  • Optional<T> will not be automatically converted to the shorthand T? in positions where it would cause a performance issue due to subtle Swift initialization characteristics, like in member variable declarations.

0.50800.0-SNAPSHOT-2022-12-29-a

05 Jan 21:25
Compare
Choose a tag to compare
Pre-release

This is a development snapshot of the 0.50800.0 release of swift-format.

0.50700.1

10 Oct 15:24
5f18422
Compare
Choose a tag to compare

This release is compatible with Swift 5.7.

This update pins the swift-syntax dependency to at least 0.50700.1, which fixes an issue where new if let shorthand syntax was not recognized.

0.50700.0

20 Sep 16:12
3dd9b51
Compare
Choose a tag to compare

This release is compatible with Swift 5.7.

Significant changes since the last release:

  • The AlwaysUseLowerCamelCase rule no longer emits a warning for override declarations. (0e705f4)
  • The UseWhereClausesInForLoops rule won't hoist an if condition into a where clause if it also has an else block. (793d764)
  • #if postfix expressions now have improved formatting. (7216a18)
  • Files will not be overwritten if they are not changed during formatting, preserving their modification time and other metadata. (3b2b9b4)

0.50600.1

22 Mar 19:47
e6b8c60
Compare
Choose a tag to compare

This release is compatible with Swift 5.6.

This update fixes a build error caused by a conflicting Windows-only conformance from swift-tools-support-core and one that we added in our code base. (22f1843)