Fix bug in isStartOfClosure affecting self removal

This commit is contained in:
Nick Lockwood
2020-08-02 22:52:16 +01:00
parent f93c3b0f28
commit 042d091619
4 changed files with 32 additions and 3 deletions
+19
View File
@@ -0,0 +1,19 @@
// swiftformat:options --swiftversion 5.2
final class Value<T> {
private let provider: () -> T
init(provider: @escaping () -> T) {
self.provider = provider
}
}
final class Consumer {
private(set) lazy var value = Value<String> { [unowned self] in
self.someProvider()
}
private func someProvider() -> String {
"string"
}
}
+7 -3
View File
@@ -325,12 +325,16 @@ extension Formatter {
return false
}
return !isStartOfClosure(at: startOfScope)
case .endOfScope(")"):
guard let startOfScope = index(of: .startOfScope("("), before: prevIndex),
let prev = index(of: .nonSpaceOrCommentOrLinebreak, before: startOfScope)
case .endOfScope(")"), .endOfScope(">"):
guard var startOfScope = index(of: .startOfScope, before: prevIndex),
var prev = index(of: .nonSpaceOrCommentOrLinebreak, before: startOfScope)
else {
return true
}
if tokens[prevIndex] == .endOfScope(">"), tokens[prev] == .endOfScope(")") {
startOfScope = index(of: .startOfScope, before: prev) ?? startOfScope
prev = index(of: .nonSpaceOrCommentOrLinebreak, before: startOfScope) ?? prev
}
switch tokens[prev] {
case .identifier:
prevIndex = prev
+5
View File
@@ -389,6 +389,11 @@ class ParsingHelpersTests: XCTestCase {
XCTAssertFalse(formatter.isStartOfClosure(at: 25))
}
func testClosureAfterGenericType() {
let formatter = Formatter(tokenize("let foo = Foo<String> {}"))
XCTAssert(formatter.isStartOfClosure(at: 11))
}
// MARK: isAccessorKeyword
func testDidSet() {
+1
View File
@@ -327,6 +327,7 @@ extension ParsingHelpersTests {
("testChainedTrailingClosureInVarChain2", testChainedTrailingClosureInVarChain2),
("testChainedTrailingClosureInVarChain3", testChainedTrailingClosureInVarChain3),
("testClassBracesNotTreatedAsClosure", testClassBracesNotTreatedAsClosure),
("testClosureAfterGenericType", testClosureAfterGenericType),
("testClosureInsideIfCondition", testClosureInsideIfCondition),
("testComputedVarAllmanBracesNotTreatedAsClosure", testComputedVarAllmanBracesNotTreatedAsClosure),
("testComputedVarBracesNotTreatedAsClosure", testComputedVarBracesNotTreatedAsClosure),