diff --git a/Sources/Rules/SortImports.swift b/Sources/Rules/SortImports.swift index 44b70ef7..6f15025f 100644 --- a/Sources/Rules/SortImports.swift +++ b/Sources/Rules/SortImports.swift @@ -84,7 +84,13 @@ extension Formatter { } if grouping.contains(.length) { - return lhs.module.count < rhs.module.count + if lhs.module.count != rhs.module.count { + return lhs.module.count < rhs.module.count + } + if grouping.contains(.alpha) { + return lhs < rhs + } + return false } // Default to alphabetical return lhs < rhs diff --git a/Tests/Rules/SortImportsTests.swift b/Tests/Rules/SortImportsTests.swift index e7cdc68b..e1a4c967 100644 --- a/Tests/Rules/SortImportsTests.swift +++ b/Tests/Rules/SortImportsTests.swift @@ -596,4 +596,36 @@ final class SortImportsTests: XCTestCase { let options = FormatOptions(importGrouping: [.length, .testableLast]) testFormatting(for: input, output, rule: .sortImports, options: options) } + + func testLengthThenAlphaSortImports() { + let input = """ + import Module + import Foo + import Bar + import Ab + """ + let output = """ + import Ab + import Bar + import Foo + import Module + """ + let options = FormatOptions(importGrouping: [.length, .alpha]) + testFormatting(for: input, output, rule: .sortImports, options: options) + } + + func testLengthThenAlphaSortImportsWithSameLength() { + let input = """ + import Zed + import Foo + import Bar + """ + let output = """ + import Bar + import Foo + import Zed + """ + let options = FormatOptions(importGrouping: [.length, .alpha]) + testFormatting(for: input, output, rule: .sortImports, options: options) + } }