From a9c3af79ae79fa321d7cc2a8b6c17cb5aa8233cf Mon Sep 17 00:00:00 2001 From: Nick Lockwood Date: Tue, 11 Apr 2023 18:16:55 +0100 Subject: [PATCH] Fix `hoistTry` in concatenated string clause --- Sources/FormattingHelpers.swift | 9 +++++---- Tests/RulesTests+Hoisting.swift | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/Sources/FormattingHelpers.swift b/Sources/FormattingHelpers.swift index 03d3ec62..cb02b4e4 100644 --- a/Sources/FormattingHelpers.swift +++ b/Sources/FormattingHelpers.swift @@ -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 } diff --git a/Tests/RulesTests+Hoisting.swift b/Tests/RulesTests+Hoisting.swift index 10de73fd..8d6d2275 100644 --- a/Tests/RulesTests+Hoisting.swift +++ b/Tests/RulesTests+Hoisting.swift @@ -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))