Fix hoistTry in concatenated string clause

This commit is contained in:
Nick Lockwood
2023-04-11 18:17:40 +01:00
parent d755cc5b03
commit a9c3af79ae
2 changed files with 19 additions and 4 deletions
+5 -4
View File
@@ -994,7 +994,11 @@ extension Formatter {
case let .keyword(name) where ["is", "as", "try", "await"].contains(name),
let .operator(name, .infix) where name != "=":
break
case .endOfScope(")") where prevToken.isStringBody:
case .operator(_, .prefix), .stringBody,
.endOfScope(")") where prevToken.isStringBody ||
(prevToken.isEndOfScope && prevToken.isStringDelimiter),
.startOfScope where tokens[i].isStringDelimiter,
.endOfScope where tokens[i].isStringDelimiter:
break
case .operator(_, .postfix), .identifier, .number, .endOfScope:
if !prevToken.isOperator(ofType: .infix),
@@ -1002,9 +1006,6 @@ extension Formatter {
{
break loop
}
case .operator(_, .prefix), .stringBody,
.startOfScope where tokens[i].isStringDelimiter:
break
default:
break loop
}
+14
View File
@@ -70,6 +70,20 @@ class HoistingTests: RulesTests {
testFormatting(for: input, output, rule: FormatRules.hoistTry)
}
func testHoistTryInsideStringInterpolation5() {
let input = """
return str +
"&enrolments[\\(index)][roleid]=\\(MoodleRoles.studentRole.rawValue)" +
"&enrolments[\\(index)][userid]=\\(try user.requireMoodleID())"
"""
let output = """
return try str +
"&enrolments[\\(index)][roleid]=\\(MoodleRoles.studentRole.rawValue)" +
"&enrolments[\\(index)][userid]=\\(user.requireMoodleID())"
"""
testFormatting(for: input, output, rule: FormatRules.hoistTry)
}
func testHoistTryInsideArgument() {
let input = """
array.append(contentsOf: try await asyncFunction(param1: param1))