mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
244 lines
9.0 KiB
Swift
244 lines
9.0 KiB
Swift
// REQUIRES: concurrency
|
|
|
|
// RUN: %empty-directory(%t)
|
|
|
|
@available(*, renamed: "simple2")
|
|
func simple(_ completion: @escaping (String) -> Void) { }
|
|
@available(*, renamed: "simple2")
|
|
func nonCompletionName(_ random: @escaping (String) -> Void) { }
|
|
func simple2() async -> String { return "" }
|
|
|
|
// RUN: %refactor-check-compiles -convert-to-async -dump-text -source-filename %s -pos=%(line+1):6 | %FileCheck -check-prefix=SIMPLERENAMED %s
|
|
func simpleRenamed() {
|
|
// preserve me
|
|
simple { str in
|
|
print(str)
|
|
}
|
|
// and me
|
|
nonCompletionName { str in
|
|
print(str)
|
|
}
|
|
}
|
|
// SIMPLERENAMED: func simpleRenamed() async {
|
|
// SIMPLERENAMED-NEXT: // preserve me
|
|
// SIMPLERENAMED-NEXT: let str = await simple2()
|
|
// SIMPLERENAMED-NEXT: print(str)
|
|
// SIMPLERENAMED-NEXT: // and me
|
|
// SIMPLERENAMED-NEXT: let str1 = await simple2()
|
|
// SIMPLERENAMED-NEXT: print(str1)
|
|
// SIMPLERENAMED-NEXT: }
|
|
|
|
// RUN: %refactor-check-compiles -convert-to-async -dump-text -source-filename %s -pos=%(line+1):6 | %FileCheck -check-prefix=RENAMEDCOLLISION %s
|
|
func renamedCollision() {
|
|
simple { simple2 in
|
|
print(simple2)
|
|
}
|
|
}
|
|
// RENAMEDCOLLISION: func renamedCollision() async {
|
|
// RENAMEDCOLLISION-NEXT: let simple21 = await simple2()
|
|
// RENAMEDCOLLISION-NEXT: print(simple21)
|
|
// RENAMEDCOLLISION-NEXT: }
|
|
|
|
@available(*, renamed: "simpleArg2")
|
|
func simpleArgRenamed(arg: String, _ random: @escaping (String) -> Void) { }
|
|
@available(*, renamed: "simpleArg2")
|
|
func completionFirstArg(random: @escaping (String) -> Void, arg: String) { }
|
|
func simpleArg2(newArg: String) async -> String { return "" }
|
|
|
|
// RUN: %refactor-check-compiles -convert-to-async -dump-text -source-filename %s -pos=%(line+1):6 | %FileCheck -check-prefix=ARGRENAMED %s
|
|
func argRenamed() {
|
|
(simpleArgRenamed)(arg: "foo") { str in
|
|
print(str)
|
|
}
|
|
(completionFirstArg)(random: { str in
|
|
print(str)
|
|
}, arg: "foo")
|
|
}
|
|
// ARGRENAMED: func argRenamed() async {
|
|
// ARGRENAMED-NEXT: let str = await (simpleArg2)(newArg: "foo")
|
|
// ARGRENAMED-NEXT: print(str)
|
|
// ARGRENAMED-NEXT: let str1 = await (simpleArg2)(newArg: "foo")
|
|
// ARGRENAMED-NEXT: print(str1)
|
|
// ARGRENAMED-NEXT: }
|
|
|
|
@available(*, renamed: "multiHandlers2")
|
|
func multiHandlers(arg: String, handler1: @escaping (String) -> Void, handler2: @escaping (String) -> Void) { }
|
|
func multiHandlers2(newArg: String, newHandler: @escaping (String) -> Void) async -> String { return "" }
|
|
|
|
@available(*, renamed: "multiHandlersWithTrailing2")
|
|
func multiHandlersWithTrailing(arg: String, handler1: @escaping (String) -> Void, handler2: @escaping (String) -> Void, other: String) { }
|
|
func multiHandlersWithTrailing2(newArg: String, newHandler: @escaping (String) -> Void, other: String) async -> String { return "" }
|
|
|
|
// RUN: %refactor-check-compiles -convert-to-async -dump-text -source-filename %s -pos=%(line+1):6 | %FileCheck -check-prefix=MULTIPLEHANDLERS %s
|
|
func multipleHandlers() {
|
|
multiHandlers(arg: "foo", handler1: { str1 in
|
|
print(str1)
|
|
}, handler2: { str2 in
|
|
print(str2)
|
|
})
|
|
multiHandlers(arg: "foo", handler1: { str3 in
|
|
print(str3)
|
|
}) { str4 in
|
|
print(str4)
|
|
}
|
|
multiHandlers(arg: "foo") { str5 in
|
|
print(str5)
|
|
} handler2: { str6 in
|
|
print(str6)
|
|
}
|
|
multiHandlersWithTrailing(arg: "foo", handler1: { str7 in
|
|
print(str7)
|
|
}, handler2: { str8 in
|
|
print(str8)
|
|
}, other: "bar")
|
|
}
|
|
// MULTIPLEHANDLERS: func multipleHandlers() async {
|
|
// MULTIPLEHANDLERS-NEXT: let str2 = await multiHandlers2(newArg: "foo", newHandler: { str1 in
|
|
// MULTIPLEHANDLERS-NEXT: print(str1)
|
|
// MULTIPLEHANDLERS-NEXT: })
|
|
// MULTIPLEHANDLERS-NEXT: print(str2)
|
|
// MULTIPLEHANDLERS-NEXT: let str4 = await multiHandlers2(newArg: "foo", newHandler: { str3 in
|
|
// MULTIPLEHANDLERS-NEXT: print(str3)
|
|
// MULTIPLEHANDLERS-NEXT: })
|
|
// MULTIPLEHANDLERS-NEXT: print(str4)
|
|
// MULTIPLEHANDLERS-NEXT: let str6 = await multiHandlers2(newArg: "foo", newHandler: { str5 in
|
|
// MULTIPLEHANDLERS-NEXT: print(str5)
|
|
// MULTIPLEHANDLERS-NEXT: })
|
|
// MULTIPLEHANDLERS-NEXT: print(str6)
|
|
// MULTIPLEHANDLERS-NEXT: let str8 = await multiHandlersWithTrailing2(newArg: "foo", newHandler: { str7 in
|
|
// MULTIPLEHANDLERS-NEXT: print(str7)
|
|
// MULTIPLEHANDLERS-NEXT: }, other: "bar")
|
|
// MULTIPLEHANDLERS-NEXT: print(str8)
|
|
// MULTIPLEHANDLERS-NEXT: }
|
|
|
|
@available(*, renamed: "defaultedParamsStartNew(newArg:newArg1:)")
|
|
func defaultedParamsStart(arg1: Int, completionHandler: @escaping (String) -> Void) { }
|
|
func defaultedParamsStartNew(newArg: Int = 0, newArg1: Int) async -> String { return "" }
|
|
|
|
@available(*, renamed: "defaultedParamsMiddleNew(newArg1:newArg:newArg2:)")
|
|
func defaultedParamsMiddle(arg1: Int, arg2: Int, completionHandler: @escaping (String) -> Void) { }
|
|
func defaultedParamsMiddleNew(newArg1: Int, newArg: Int = 0, newArg2: Int) async -> String { return "" }
|
|
|
|
@available(*, renamed: "defaultedParamsEndNew(newArg1:newArg:)")
|
|
func defaultedParamsEnd(arg1: Int, completionHandler: @escaping (String) -> Void) { }
|
|
func defaultedParamsEndNew(newArg1: Int, newArg: Int = 0) async -> String { return "" }
|
|
|
|
@available(*, renamed: "defaultedSameLabelNew(newArg1:arg1:newArg2:)")
|
|
func defaultedSameLabel(arg1: Int, completionHandler: @escaping (String) -> Void) { }
|
|
func defaultedSameLabelNew(newArg1: Int = 0, arg1: Int = 0, newArg2: Int = 0) async -> String { return "" }
|
|
|
|
@available(*, renamed: "unlabelledArgNew(newArg1:_:newArg2:)")
|
|
func unlabelledArg(_ arg1: Int, completionHandler: @escaping (String) -> Void) { }
|
|
func unlabelledArgNew(newArg1: Int = 0, _ arg1: Int = 0, newArg2: Int = 0) async -> String { return "" }
|
|
|
|
// RUN: %refactor-check-compiles -convert-to-async -dump-text -source-filename %s -pos=%(line+1):6 | %FileCheck -check-prefix=DEFAULTEDPARAMS %s
|
|
func defaultedParams() {
|
|
defaultedParamsStart(arg1: 1) { str in
|
|
print(str)
|
|
}
|
|
defaultedParamsMiddle(arg1: 1, arg2: 2) { str in
|
|
print(str)
|
|
}
|
|
defaultedParamsEnd(arg1: 1) { str in
|
|
print(str)
|
|
}
|
|
defaultedSameLabel(arg1: 1) { str in
|
|
print(str)
|
|
}
|
|
unlabelledArg(1) { str in
|
|
print(str)
|
|
}
|
|
}
|
|
// DEFAULTEDPARAMS: func defaultedParams() async {
|
|
// DEFAULTEDPARAMS-NEXT: let str = await defaultedParamsStartNew(newArg1: 1)
|
|
// DEFAULTEDPARAMS-NEXT: print(str)
|
|
// DEFAULTEDPARAMS-NEXT: let str1 = await defaultedParamsMiddleNew(newArg1: 1, newArg2: 2)
|
|
// DEFAULTEDPARAMS-NEXT: print(str1)
|
|
// DEFAULTEDPARAMS-NEXT: let str2 = await defaultedParamsEndNew(newArg1: 1)
|
|
// DEFAULTEDPARAMS-NEXT: print(str2)
|
|
// DEFAULTEDPARAMS-NEXT: let str3 = await defaultedSameLabelNew(arg1: 1)
|
|
// DEFAULTEDPARAMS-NEXT: print(str3)
|
|
// DEFAULTEDPARAMS-NEXT: let str4 = await unlabelledArgNew(1)
|
|
// DEFAULTEDPARAMS-NEXT: print(str4)
|
|
// DEFAULTEDPARAMS-NEXT: }
|
|
|
|
struct SomeStruct {
|
|
var instanceProp: String { get async { "" } }
|
|
static var classProp: String { get async { "" } }
|
|
|
|
@available(*, renamed: "simple2")
|
|
func simple(_ completion: @escaping (String) -> Void) { }
|
|
func simple2() async -> String { return "" }
|
|
|
|
@available(*, renamed: "getter:instanceProp()")
|
|
func instanceGetter(_ completion: @escaping (String) -> Void) { }
|
|
@available(*, renamed: "getter:classProp()")
|
|
static func classGetter(_ completion: @escaping (String) -> Void) { }
|
|
}
|
|
|
|
// RUN: %refactor-check-compiles -convert-to-async -dump-text -source-filename %s -pos=%(line+1):6 | %FileCheck -check-prefix=MEMBERS %s
|
|
func members(s: SomeStruct) {
|
|
s.simple { str in
|
|
print(str)
|
|
}
|
|
(((s).simple)) { str in
|
|
print(str)
|
|
}
|
|
s.instanceGetter { str in
|
|
print(str)
|
|
}
|
|
(((s).instanceGetter)) { str in
|
|
print(str)
|
|
}
|
|
SomeStruct.classGetter { str in
|
|
print(str)
|
|
}
|
|
(((SomeStruct).classGetter)) { str in
|
|
print(str)
|
|
}
|
|
}
|
|
// MEMBERS: func members(s: SomeStruct) async {
|
|
// MEMBERS-NEXT: let str = await s.simple2()
|
|
// MEMBERS-NEXT: print(str)
|
|
// MEMBERS-NEXT: let str1 = await (((s).simple2))()
|
|
// MEMBERS-NEXT: print(str1)
|
|
// MEMBERS-NEXT: let str2 = await s.instanceProp
|
|
// MEMBERS-NEXT: print(str2)
|
|
// MEMBERS-NEXT: let str3 = await (((s).instanceProp))
|
|
// MEMBERS-NEXT: print(str3)
|
|
// MEMBERS-NEXT: let str4 = await SomeStruct.classProp
|
|
// MEMBERS-NEXT: print(str4)
|
|
// MEMBERS-NEXT: let str5 = await (((SomeStruct).classProp))
|
|
// MEMBERS-NEXT: print(str5)
|
|
// MEMBERS-NEXT: }
|
|
|
|
@available(*, renamed: "nomatch")
|
|
func badRename(_ completion: @escaping (String) -> Void) { }
|
|
@available(*, renamed: "nomatch")
|
|
func badRenameUnlabelled(_ arg: Int, _ completion: @escaping (String) -> Void) { }
|
|
@available(*, renamed: "badRename2Async(arg:newArg:)")
|
|
func badRename2(arg: Int, completionHandler: @escaping (String) -> Void) { }
|
|
func badRename2Async(arg: Int = 0, newArg: Int) async -> String { return "" }
|
|
|
|
// Won't compile since there are no corresponding async functions
|
|
// RUN: %refactor -convert-to-async -dump-text -source-filename %s -pos=%(line+1):6 | %FileCheck -check-prefix=FALLBACK %s
|
|
func fallback() {
|
|
badRename { str in
|
|
print(str)
|
|
}
|
|
badRenameUnlabelled(1) { str in
|
|
print(str)
|
|
}
|
|
badRename2(arg: 1) { str in
|
|
print(str)
|
|
}
|
|
}
|
|
// FALLBACK: func fallback() async {
|
|
// FALLBACK-NEXT: let str = await badRename()
|
|
// FALLBACK-NEXT: print(str)
|
|
// FALLBACK-NEXT: let str1 = await badRenameUnlabelled(1)
|
|
// FALLBACK-NEXT: print(str1)
|
|
// FALLBACK-NEXT: let str2 = await badRename2(arg: 1)
|
|
// FALLBACK-NEXT: print(str2)
|
|
// FALLBACK-NEXT: }
|