Skip to content

Commit cd31fa0

Browse files
committed
[Async Refactoring] Improve fatalError message to unwrap result arguments in continuation
In the previous `fatalError` message `Expected non-nil result 'result' for nil error`, it wasn’t exactly clear wht the `error` referred to. In some cases, when the error was ignored, there wasn’t even an `error` variable in the refactored code. The new `Expected non-nil result '...' in the non-error case` is a little more generic and also fits if an error is ignored.
1 parent edc1393 commit cd31fa0

File tree

2 files changed

+19
-15
lines changed

2 files changed

+19
-15
lines changed

lib/IDE/Refactoring.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6902,7 +6902,11 @@ class AsyncConverter : private SourceEntityWalker {
69026902
}
69036903
OS << ' ' << tok::kw_else << ' ' << tok::l_brace << '\n';
69046904
OS << "fatalError" << tok::l_paren;
6905-
OS << "\"Expected non-nil result '" << ArgName << "' for nil error\"";
6905+
OS << "\"Expected non-nil result ";
6906+
if (ArgName.str() != "result") {
6907+
OS << "'" << ArgName << "' ";
6908+
}
6909+
OS << "in the non-error case\"";
69066910
OS << tok::r_paren << '\n';
69076911
OS << tok::r_brace << '\n';
69086912
}

test/refactoring/ConvertAsync/convert_to_continuation.swift

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ func testThrowingContinuationRelayingErrorAndResult(completionHandler: (Int?, Er
120120
// THROWING-CONTINUATION-RELAYING-ERROR-AND-RESULT-NEXT: continuation.resume(throwing: error)
121121
// THROWING-CONTINUATION-RELAYING-ERROR-AND-RESULT-NEXT: } else {
122122
// THROWING-CONTINUATION-RELAYING-ERROR-AND-RESULT-NEXT: guard let theValue1 = theValue else {
123-
// THROWING-CONTINUATION-RELAYING-ERROR-AND-RESULT-NEXT: fatalError("Expected non-nil result 'theValue1' for nil error")
123+
// THROWING-CONTINUATION-RELAYING-ERROR-AND-RESULT-NEXT: fatalError("Expected non-nil result 'theValue1' in the non-error case")
124124
// THROWING-CONTINUATION-RELAYING-ERROR-AND-RESULT-NEXT: }
125125
// THROWING-CONTINUATION-RELAYING-ERROR-AND-RESULT-NEXT: continuation.resume(returning: theValue1)
126126
// THROWING-CONTINUATION-RELAYING-ERROR-AND-RESULT-NEXT: }
@@ -141,7 +141,7 @@ func testThrowingContinuationRelayingErrorAndComplexResult(completionHandler: (I
141141
// THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-NEXT: continuation.resume(throwing: error)
142142
// THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-NEXT: } else {
143143
// THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-NEXT: guard let result = theValue.map({ $0 + 1 }) else {
144-
// THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-NEXT: fatalError("Expected non-nil result 'result' for nil error")
144+
// THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-NEXT: fatalError("Expected non-nil result in the non-error case")
145145
// THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-NEXT: }
146146
// THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-NEXT: continuation.resume(returning: result)
147147
// THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-NEXT: }
@@ -162,10 +162,10 @@ func testThrowingContinuationRelayingErrorAndTwoComplexResults(completionHandler
162162
// THROWING-CONTINUATION-RELAYING-ERROR-AND-TWO-COMPLEX-RESULTS-NEXT: continuation.resume(throwing: error)
163163
// THROWING-CONTINUATION-RELAYING-ERROR-AND-TWO-COMPLEX-RESULTS-NEXT: } else {
164164
// THROWING-CONTINUATION-RELAYING-ERROR-AND-TWO-COMPLEX-RESULTS-NEXT: guard let result0 = theValue.map({ $0 + 1 }) else {
165-
// THROWING-CONTINUATION-RELAYING-ERROR-AND-TWO-COMPLEX-RESULTS-NEXT: fatalError("Expected non-nil result 'result0' for nil error")
165+
// THROWING-CONTINUATION-RELAYING-ERROR-AND-TWO-COMPLEX-RESULTS-NEXT: fatalError("Expected non-nil result 'result0' in the non-error case")
166166
// THROWING-CONTINUATION-RELAYING-ERROR-AND-TWO-COMPLEX-RESULTS-NEXT: }
167167
// THROWING-CONTINUATION-RELAYING-ERROR-AND-TWO-COMPLEX-RESULTS-NEXT: guard let result1 = theValue.map({ $0 + 2 }) else {
168-
// THROWING-CONTINUATION-RELAYING-ERROR-AND-TWO-COMPLEX-RESULTS-NEXT: fatalError("Expected non-nil result 'result1' for nil error")
168+
// THROWING-CONTINUATION-RELAYING-ERROR-AND-TWO-COMPLEX-RESULTS-NEXT: fatalError("Expected non-nil result 'result1' in the non-error case")
169169
// THROWING-CONTINUATION-RELAYING-ERROR-AND-TWO-COMPLEX-RESULTS-NEXT: }
170170
// THROWING-CONTINUATION-RELAYING-ERROR-AND-TWO-COMPLEX-RESULTS-NEXT: continuation.resume(returning: (result0, result1))
171171
// THROWING-CONTINUATION-RELAYING-ERROR-AND-TWO-COMPLEX-RESULTS-NEXT: }
@@ -186,7 +186,7 @@ func testThrowingContinuationRelayingErrorAndComplexResultWithTrailingClosure(co
186186
// THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-WITH-TRAILING-CLOSURE-NEXT: continuation.resume(throwing: error)
187187
// THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-WITH-TRAILING-CLOSURE-NEXT: } else {
188188
// THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-WITH-TRAILING-CLOSURE-NEXT: guard let result = theValue.map { $0 + 1 }.self else {
189-
// THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-WITH-TRAILING-CLOSURE-NEXT: fatalError("Expected non-nil result 'result' for nil error")
189+
// THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-WITH-TRAILING-CLOSURE-NEXT: fatalError("Expected non-nil result in the non-error case")
190190
// THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-WITH-TRAILING-CLOSURE-NEXT: }
191191
// THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-WITH-TRAILING-CLOSURE-NEXT: continuation.resume(returning: result)
192192
// THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-WITH-TRAILING-CLOSURE-NEXT: }
@@ -461,10 +461,10 @@ func testMultipleReturnValuesAndError(completion: (Int?, String?, Error?) -> Voi
461461
// MULTIPLE-RETURN-VALUES-AND-ERROR-NEXT: continuation.resume(throwing: error)
462462
// MULTIPLE-RETURN-VALUES-AND-ERROR-NEXT: } else {
463463
// MULTIPLE-RETURN-VALUES-AND-ERROR-NEXT: guard let first1 = first else {
464-
// MULTIPLE-RETURN-VALUES-AND-ERROR-NEXT: fatalError("Expected non-nil result 'first1' for nil error")
464+
// MULTIPLE-RETURN-VALUES-AND-ERROR-NEXT: fatalError("Expected non-nil result 'first1' in the non-error case")
465465
// MULTIPLE-RETURN-VALUES-AND-ERROR-NEXT: }
466466
// MULTIPLE-RETURN-VALUES-AND-ERROR-NEXT: guard let second1 = second else {
467-
// MULTIPLE-RETURN-VALUES-AND-ERROR-NEXT: fatalError("Expected non-nil result 'second1' for nil error")
467+
// MULTIPLE-RETURN-VALUES-AND-ERROR-NEXT: fatalError("Expected non-nil result 'second1' in the non-error case")
468468
// MULTIPLE-RETURN-VALUES-AND-ERROR-NEXT: }
469469
// MULTIPLE-RETURN-VALUES-AND-ERROR-NEXT: continuation.resume(returning: (first1, second1))
470470
// MULTIPLE-RETURN-VALUES-AND-ERROR-NEXT: }
@@ -496,7 +496,7 @@ func testMixedOptionalAnNonOptionaResults(completion: (Int?, String?, Error?) ->
496496
// MIXED-OPTIONAL-AND-NON-OPTIONAL-RESULT-NEXT: return try await withCheckedThrowingContinuation { continuation in
497497
// MIXED-OPTIONAL-AND-NON-OPTIONAL-RESULT-NEXT: withoutAsyncAlternativeThrowing { (theResult, error) in
498498
// MIXED-OPTIONAL-AND-NON-OPTIONAL-RESULT-NEXT: guard let theResult1 = theResult else {
499-
// MIXED-OPTIONAL-AND-NON-OPTIONAL-RESULT-NEXT: fatalError("Expected non-nil result 'theResult1' for nil error")
499+
// MIXED-OPTIONAL-AND-NON-OPTIONAL-RESULT-NEXT: fatalError("Expected non-nil result 'theResult1' in the non-error case")
500500
// MIXED-OPTIONAL-AND-NON-OPTIONAL-RESULT-NEXT: }
501501
// MIXED-OPTIONAL-AND-NON-OPTIONAL-RESULT-NEXT: continuation.resume(returning: (theResult1, "hi"))
502502
// MIXED-OPTIONAL-AND-NON-OPTIONAL-RESULT-NEXT: }
@@ -514,7 +514,7 @@ func testUseOptionalResultValueAfterCompletionHandlerCall(completion: (Int?, Str
514514
// USE-OPTIONAL-RESULT-AFTER-COMPLETION-HANDLER-CALL-NEXT: return try await withCheckedThrowingContinuation { continuation in
515515
// USE-OPTIONAL-RESULT-AFTER-COMPLETION-HANDLER-CALL-NEXT: withoutAsyncAlternativeThrowing { (theResult, error) in
516516
// USE-OPTIONAL-RESULT-AFTER-COMPLETION-HANDLER-CALL-NEXT: guard let theResult1 = theResult else {
517-
// USE-OPTIONAL-RESULT-AFTER-COMPLETION-HANDLER-CALL-NEXT: fatalError("Expected non-nil result 'theResult1' for nil error")
517+
// USE-OPTIONAL-RESULT-AFTER-COMPLETION-HANDLER-CALL-NEXT: fatalError("Expected non-nil result 'theResult1' in the non-error case")
518518
// USE-OPTIONAL-RESULT-AFTER-COMPLETION-HANDLER-CALL-NEXT: }
519519
// USE-OPTIONAL-RESULT-AFTER-COMPLETION-HANDLER-CALL-NEXT: continuation.resume(returning: (theResult1, "hi"))
520520
// USE-OPTIONAL-RESULT-AFTER-COMPLETION-HANDLER-CALL-NEXT: print(theResult.map { $0 + 1 } as Any)
@@ -533,10 +533,10 @@ func testPassSameResultTwice(completion: (Int?, Int?, Error?) -> Void) {
533533
// PASS-SAME-RESULT-TWICE-NEXT: return try await withCheckedThrowingContinuation { continuation in
534534
// PASS-SAME-RESULT-TWICE-NEXT: withoutAsyncAlternativeThrowing { (theResult, error) in
535535
// PASS-SAME-RESULT-TWICE-NEXT: guard let theResult1 = theResult else {
536-
// PASS-SAME-RESULT-TWICE-NEXT: fatalError("Expected non-nil result 'theResult1' for nil error")
536+
// PASS-SAME-RESULT-TWICE-NEXT: fatalError("Expected non-nil result 'theResult1' in the non-error case")
537537
// PASS-SAME-RESULT-TWICE-NEXT: }
538538
// PASS-SAME-RESULT-TWICE-NEXT: guard let theResult2 = theResult else {
539-
// PASS-SAME-RESULT-TWICE-NEXT: fatalError("Expected non-nil result 'theResult2' for nil error")
539+
// PASS-SAME-RESULT-TWICE-NEXT: fatalError("Expected non-nil result 'theResult2' in the non-error case")
540540
// PASS-SAME-RESULT-TWICE-NEXT: }
541541
// PASS-SAME-RESULT-TWICE-NEXT: continuation.resume(returning: (theResult1, theResult2))
542542
// PASS-SAME-RESULT-TWICE-NEXT: }
@@ -558,7 +558,7 @@ func testUseResultAfterAmbiguousCompletionHandlerCall(completion: (Int?, Error?)
558558
// USE-RESULT-AFTER-AMBIGUOUS-HANLDER-CALL-NEXT: continuation.resume(throwing: error)
559559
// USE-RESULT-AFTER-AMBIGUOUS-HANLDER-CALL-NEXT: } else {
560560
// USE-RESULT-AFTER-AMBIGUOUS-HANLDER-CALL-NEXT: guard let theResult1 = theResult else {
561-
// USE-RESULT-AFTER-AMBIGUOUS-HANLDER-CALL-NEXT: fatalError("Expected non-nil result 'theResult1' for nil error")
561+
// USE-RESULT-AFTER-AMBIGUOUS-HANLDER-CALL-NEXT: fatalError("Expected non-nil result 'theResult1' in the non-error case")
562562
// USE-RESULT-AFTER-AMBIGUOUS-HANLDER-CALL-NEXT: }
563563
// USE-RESULT-AFTER-AMBIGUOUS-HANLDER-CALL-NEXT: continuation.resume(returning: theResult1)
564564
// USE-RESULT-AFTER-AMBIGUOUS-HANLDER-CALL-NEXT: }
@@ -581,15 +581,15 @@ func testTwoCompletionHandlerCalls(completion: (Int?, Error?) -> Void) {
581581
// TWO-COMPLEITON-HANDLER-CALLS-NEXT: continuation.resume(throwing: error)
582582
// TWO-COMPLEITON-HANDLER-CALLS-NEXT: } else {
583583
// TWO-COMPLEITON-HANDLER-CALLS-NEXT: guard let theResult1 = theResult else {
584-
// TWO-COMPLEITON-HANDLER-CALLS-NEXT: fatalError("Expected non-nil result 'theResult1' for nil error")
584+
// TWO-COMPLEITON-HANDLER-CALLS-NEXT: fatalError("Expected non-nil result 'theResult1' in the non-error case")
585585
// TWO-COMPLEITON-HANDLER-CALLS-NEXT: }
586586
// TWO-COMPLEITON-HANDLER-CALLS-NEXT: continuation.resume(returning: theResult1)
587587
// TWO-COMPLEITON-HANDLER-CALLS-NEXT: }
588588
// TWO-COMPLEITON-HANDLER-CALLS-NEXT: if let error = error {
589589
// TWO-COMPLEITON-HANDLER-CALLS-NEXT: continuation.resume(throwing: error)
590590
// TWO-COMPLEITON-HANDLER-CALLS-NEXT: } else {
591591
// TWO-COMPLEITON-HANDLER-CALLS-NEXT: guard let theResult2 = theResult else {
592-
// TWO-COMPLEITON-HANDLER-CALLS-NEXT: fatalError("Expected non-nil result 'theResult2' for nil error")
592+
// TWO-COMPLEITON-HANDLER-CALLS-NEXT: fatalError("Expected non-nil result 'theResult2' in the non-error case")
593593
// TWO-COMPLEITON-HANDLER-CALLS-NEXT: }
594594
// TWO-COMPLEITON-HANDLER-CALLS-NEXT: continuation.resume(returning: theResult2)
595595
// TWO-COMPLEITON-HANDLER-CALLS-NEXT: }

0 commit comments

Comments
 (0)