diff --git a/Rules.md b/Rules.md
index da41ca66..4fba3bf6 100644
--- a/Rules.md
+++ b/Rules.md
@@ -55,8 +55,8 @@
* [redundantVoidReturnType](#redundantVoidReturnType)
* [semicolons](#semicolons)
* [sortDeclarations](#sortDeclarations)
+* [sortImports](#sortImports)
* [sortTypealiases](#sortTypealiases)
-* [sortedImports](#sortedImports)
* [spaceAroundBraces](#spaceAroundBraces)
* [spaceAroundBrackets](#spaceAroundBrackets)
* [spaceAroundComments](#spaceAroundComments)
@@ -102,6 +102,7 @@
# Deprecated Rules (do not use)
+* [sortedImports](#sortedImports)
* [sortedSwitchCases](#sortedSwitchCases)
* [specifiers](#specifiers)
@@ -1836,34 +1837,7 @@ and declarations between // swiftformat:sort:begin and
-## sortSwitchCases
-
-Sort switch cases alphabetically.
-
-## sortTypealiases
-
-Sort protocol composition typealiases alphabetically.
-
-
-Examples
-
-```diff
-- typealias Placeholders = Foo & Bar & Baaz & Quux
-+ typealias Placeholders = Baaz & Bar & Foo & Quux
-
- typealias Dependencies
-- = FooProviding
-+ = BaazProviding
- & BarProviding
-- & BaazProviding
-+ & FooProviding
- & QuuxProviding
-```
-
-
-
-
-## sortedImports
+## sortImports
Sort import statements alphabetically.
@@ -1899,6 +1873,39 @@ Option | Description
+## sortSwitchCases
+
+Sort switch cases alphabetically.
+
+## sortTypealiases
+
+Sort protocol composition typealiases alphabetically.
+
+
+Examples
+
+```diff
+- typealias Placeholders = Foo & Bar & Baaz & Quux
++ typealias Placeholders = Baaz & Bar & Foo & Quux
+
+ typealias Dependencies
+- = FooProviding
++ = BaazProviding
+ & BarProviding
+- & BaazProviding
++ & FooProviding
+ & QuuxProviding
+```
+
+
+
+
+## sortedImports
+
+Sort import statements alphabetically.
+
+*Note: sortedImports rule is deprecated. Use sortImports instead.*
+
## sortedSwitchCases
Sort switch cases alphabetically.
diff --git a/Sources/Examples.swift b/Sources/Examples.swift
index 911608cc..74d35f06 100644
--- a/Sources/Examples.swift
+++ b/Sources/Examples.swift
@@ -721,7 +721,7 @@ private struct Examples {
```
"""
- let sortedImports = """
+ let sortImports = """
```diff
- import Foo
- import Bar
diff --git a/Sources/Rules.swift b/Sources/Rules.swift
index e57681af..4dd96eb0 100644
--- a/Sources/Rules.swift
+++ b/Sources/Rules.swift
@@ -5216,8 +5216,20 @@ public struct _FormatRules {
}
}
- /// Sort import statements
+ /// Deprecated
public let sortedImports = FormatRule(
+ help: "Sort import statements alphabetically.",
+ deprecationMessage: "Use sortImports instead.",
+ options: ["importgrouping"],
+ sharedOptions: ["linebreaks"]
+ ) { formatter in
+ _ = formatter.options.importGrouping
+ _ = formatter.options.linebreak
+ FormatRules.sortImports.apply(with: formatter)
+ }
+
+ /// Sort import statements
+ public let sortImports = FormatRule(
help: "Sort import statements alphabetically.",
options: ["importgrouping"],
sharedOptions: ["linebreaks"]
diff --git a/Tests/ArgumentsTests.swift b/Tests/ArgumentsTests.swift
index 289523e5..5b62694c 100644
--- a/Tests/ArgumentsTests.swift
+++ b/Tests/ArgumentsTests.swift
@@ -755,7 +755,7 @@ class ArgumentsTests: XCTestCase {
func testParseOptionAsRuleThrows() {
XCTAssertThrowsError(try parseRules("importgrouping")) { error in
- XCTAssert("\(error)".contains("'sortedImports'"))
+ XCTAssert("\(error)".contains("'sortImports'"))
}
}
diff --git a/Tests/RulesTests+Organization.swift b/Tests/RulesTests+Organization.swift
index bcdad8a4..5b0fae5b 100644
--- a/Tests/RulesTests+Organization.swift
+++ b/Tests/RulesTests+Organization.swift
@@ -918,7 +918,7 @@ class OrganizationTests: RulesTests {
testFormatting(
for: input, output, rule: FormatRules.organizeDeclarations,
- exclude: ["blankLinesAtStartOfScope", "sortedImports"]
+ exclude: ["blankLinesAtStartOfScope", "sortImports"]
)
}
@@ -2574,131 +2574,131 @@ class OrganizationTests: RulesTests {
testFormatting(for: input, output, rule: FormatRules.markTypes)
}
- // MARK: - sortedImports
+ // MARK: - sortImports
- func testSortedImportsSimpleCase() {
+ func testSortImportsSimpleCase() {
let input = "import Foo\nimport Bar"
let output = "import Bar\nimport Foo"
- testFormatting(for: input, output, rule: FormatRules.sortedImports)
+ testFormatting(for: input, output, rule: FormatRules.sortImports)
}
- func testSortedImportsKeepsPreviousCommentWithImport() {
+ func testSortImportsKeepsPreviousCommentWithImport() {
let input = "import Foo\n// important comment\n// (very important)\nimport Bar"
let output = "// important comment\n// (very important)\nimport Bar\nimport Foo"
- testFormatting(for: input, output, rule: FormatRules.sortedImports,
+ testFormatting(for: input, output, rule: FormatRules.sortImports,
exclude: ["blankLineAfterImports"])
}
- func testSortedImportsKeepsPreviousCommentWithImport2() {
+ func testSortImportsKeepsPreviousCommentWithImport2() {
let input = "// important comment\n// (very important)\nimport Foo\nimport Bar"
let output = "import Bar\n// important comment\n// (very important)\nimport Foo"
- testFormatting(for: input, output, rule: FormatRules.sortedImports,
+ testFormatting(for: input, output, rule: FormatRules.sortImports,
exclude: ["blankLineAfterImports"])
}
- func testSortedImportsDoesntMoveHeaderComment() {
+ func testSortImportsDoesntMoveHeaderComment() {
let input = "// header comment\n\nimport Foo\nimport Bar"
let output = "// header comment\n\nimport Bar\nimport Foo"
- testFormatting(for: input, output, rule: FormatRules.sortedImports)
+ testFormatting(for: input, output, rule: FormatRules.sortImports)
}
- func testSortedImportsDoesntMoveHeaderCommentFollowedByImportComment() {
+ func testSortImportsDoesntMoveHeaderCommentFollowedByImportComment() {
let input = "// header comment\n\n// important comment\nimport Foo\nimport Bar"
let output = "// header comment\n\nimport Bar\n// important comment\nimport Foo"
- testFormatting(for: input, output, rule: FormatRules.sortedImports,
+ testFormatting(for: input, output, rule: FormatRules.sortImports,
exclude: ["blankLineAfterImports"])
}
- func testSortedImportsOnSameLine() {
+ func testSortImportsOnSameLine() {
let input = "import Foo; import Bar\nimport Baz"
let output = "import Baz\nimport Foo; import Bar"
- testFormatting(for: input, output, rule: FormatRules.sortedImports)
+ testFormatting(for: input, output, rule: FormatRules.sortImports)
}
- func testSortedImportsWithSemicolonAndCommentOnSameLine() {
+ func testSortImportsWithSemicolonAndCommentOnSameLine() {
let input = "import Foo; // foobar\nimport Bar\nimport Baz"
let output = "import Bar\nimport Baz\nimport Foo; // foobar"
- testFormatting(for: input, output, rule: FormatRules.sortedImports, exclude: ["semicolons"])
+ testFormatting(for: input, output, rule: FormatRules.sortImports, exclude: ["semicolons"])
}
- func testSortedImportEnum() {
+ func testSortImportEnum() {
let input = "import enum Foo.baz\nimport Foo.bar"
let output = "import Foo.bar\nimport enum Foo.baz"
- testFormatting(for: input, output, rule: FormatRules.sortedImports)
+ testFormatting(for: input, output, rule: FormatRules.sortImports)
}
- func testSortedImportFunc() {
+ func testSortImportFunc() {
let input = "import func Foo.baz\nimport Foo.bar"
let output = "import Foo.bar\nimport func Foo.baz"
- testFormatting(for: input, output, rule: FormatRules.sortedImports)
+ testFormatting(for: input, output, rule: FormatRules.sortImports)
}
- func testAlreadySortedImportsDoesNothing() {
+ func testAlreadySortImportsDoesNothing() {
let input = "import Bar\nimport Foo"
- testFormatting(for: input, rule: FormatRules.sortedImports)
+ testFormatting(for: input, rule: FormatRules.sortImports)
}
- func testPreprocessorSortedImports() {
+ func testPreprocessorSortImports() {
let input = "#if os(iOS)\n import Foo2\n import Bar2\n#else\n import Foo1\n import Bar1\n#endif\nimport Foo3\nimport Bar3"
let output = "#if os(iOS)\n import Bar2\n import Foo2\n#else\n import Bar1\n import Foo1\n#endif\nimport Bar3\nimport Foo3"
- testFormatting(for: input, output, rule: FormatRules.sortedImports)
+ testFormatting(for: input, output, rule: FormatRules.sortImports)
}
- func testTestableSortedImports() {
+ func testTestableSortImports() {
let input = "@testable import Foo3\nimport Bar3"
let output = "import Bar3\n@testable import Foo3"
- testFormatting(for: input, output, rule: FormatRules.sortedImports)
+ testFormatting(for: input, output, rule: FormatRules.sortImports)
}
- func testLengthSortedImports() {
+ func testLengthSortImports() {
let input = "import Foo\nimport Module\nimport Bar3"
let output = "import Foo\nimport Bar3\nimport Module"
let options = FormatOptions(importGrouping: .length)
- testFormatting(for: input, output, rule: FormatRules.sortedImports, options: options)
+ testFormatting(for: input, output, rule: FormatRules.sortImports, options: options)
}
func testTestableImportsWithTestableOnPreviousLine() {
let input = "@testable\nimport Foo3\nimport Bar3"
let output = "import Bar3\n@testable\nimport Foo3"
- testFormatting(for: input, output, rule: FormatRules.sortedImports)
+ testFormatting(for: input, output, rule: FormatRules.sortImports)
}
func testTestableImportsWithGroupingTestableBottom() {
let input = "@testable import Bar\nimport Foo\n@testable import UIKit"
let output = "import Foo\n@testable import Bar\n@testable import UIKit"
let options = FormatOptions(importGrouping: .testableLast)
- testFormatting(for: input, output, rule: FormatRules.sortedImports, options: options)
+ testFormatting(for: input, output, rule: FormatRules.sortImports, options: options)
}
func testTestableImportsWithGroupingTestableTop() {
let input = "@testable import Bar\nimport Foo\n@testable import UIKit"
let output = "@testable import Bar\n@testable import UIKit\nimport Foo"
let options = FormatOptions(importGrouping: .testableFirst)
- testFormatting(for: input, output, rule: FormatRules.sortedImports, options: options)
+ testFormatting(for: input, output, rule: FormatRules.sortImports, options: options)
}
- func testCaseInsensitiveSortedImports() {
+ func testCaseInsensitiveSortImports() {
let input = "import Zlib\nimport lib"
let output = "import lib\nimport Zlib"
- testFormatting(for: input, output, rule: FormatRules.sortedImports)
+ testFormatting(for: input, output, rule: FormatRules.sortImports)
}
- func testCaseInsensitiveCaseDifferingSortedImports() {
+ func testCaseInsensitiveCaseDifferingSortImports() {
let input = "import c\nimport B\nimport A.a\nimport A.A"
let output = "import A.A\nimport A.a\nimport B\nimport c"
- testFormatting(for: input, output, rule: FormatRules.sortedImports)
+ testFormatting(for: input, output, rule: FormatRules.sortImports)
}
func testNoDeleteCodeBetweenImports() {
let input = "import Foo\nfunc bar() {}\nimport Bar"
- testFormatting(for: input, rule: FormatRules.sortedImports,
+ testFormatting(for: input, rule: FormatRules.sortImports,
exclude: ["blankLineAfterImports"])
}
func testNoDeleteCodeBetweenImports2() {
let input = "import Foo\nimport Bar\nfoo = bar\nimport Bar"
let output = "import Bar\nimport Foo\nfoo = bar\nimport Bar"
- testFormatting(for: input, output, rule: FormatRules.sortedImports,
+ testFormatting(for: input, output, rule: FormatRules.sortImports,
exclude: ["blankLineAfterImports"])
}
@@ -2714,13 +2714,13 @@ class OrganizationTests: RulesTests {
import A
"""
- testFormatting(for: input, rule: FormatRules.sortedImports)
+ testFormatting(for: input, rule: FormatRules.sortImports)
}
func testSortContiguousImports() {
let input = "import Foo\nimport Bar\nfunc bar() {}\nimport Quux\nimport Baz"
let output = "import Bar\nimport Foo\nfunc bar() {}\nimport Baz\nimport Quux"
- testFormatting(for: input, output, rule: FormatRules.sortedImports,
+ testFormatting(for: input, output, rule: FormatRules.sortImports,
exclude: ["blankLineAfterImports"])
}
@@ -2747,7 +2747,7 @@ class OrganizationTests: RulesTests {
#endif
#endif
"""
- testFormatting(for: input, output, rule: FormatRules.sortedImports)
+ testFormatting(for: input, output, rule: FormatRules.sortImports)
}
func testNoMangleFileHeaderNotFollowedByLinebreak() {
@@ -2775,7 +2775,7 @@ class OrganizationTests: RulesTests {
import AModuleUI
import SomeOtherModule
"""
- testFormatting(for: input, output, rule: FormatRules.sortedImports)
+ testFormatting(for: input, output, rule: FormatRules.sortImports)
}
// MARK: - sortSwitchCases