mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Adds three refactorings intended to help users migrate their existing code to use the new async language features: 1. Convert call to use async alternative 2. Convert function to async 3. Add async alternative function A function is considered to have an async alternative if it has a void return type and has a void returning closure as its last parameter. A method to explicitly mark functions as having an async alternative may be added to make this more accurate in the future (required for eg. a warning about a call to the non-async version of a function in an async context). (1) converts a call to use the new `await` async language syntax. If the async alternative throws, it will also add `try`. The closure itself is hoisted out of the call, see the comments on `AsyncConversionStringBuilder` for specifics. (2) converts a whole function to `async`, using (1) to convert any calls in the function to their async alternatives. (3) is similar to (2), but instead *adds* a function and replaces calls to its completion/handler/callback closure parameter with `return` or `throws`. Resolves rdar://68254700
20 lines
667 B
Swift
20 lines
667 B
Swift
func simple(completion: (String?, Error?) -> Void) { }
|
|
|
|
func mismatches() {
|
|
// RUN: not %refactor -convert-call-to-async-alternative -dump-text -source-filename %s -pos=%(line+1):3
|
|
simple()
|
|
|
|
// RUN: not %refactor -convert-call-to-async-alternative -dump-text -source-filename %s -pos=%(line+1):3
|
|
simple(10) { res, err in
|
|
print("call mismatch")
|
|
}
|
|
|
|
// RUN: not %refactor -convert-call-to-async-alternative -dump-text -source-filename %s -pos=%(line+1):3
|
|
simple { res in
|
|
print("closure mismatch")
|
|
}
|
|
}
|
|
|
|
// RUN: not %refactor -add-async-alternative -dump-text -source-filename %s -pos=%(line+1):1
|
|
func missingBody(complete: (Int?, Error?) -> Void)
|