Skip to content

Commit f3f1a5e

Browse files
authored
Merge pull request #64697 from ahoppen/ahoppen/split-function-parameter
[ASTGen/Macros] Adjustments to split `FunctionParameterSyntax` into multiple nodes for function parameters, closure parameters and enum parameters
2 parents c43c970 + 962664a commit f3f1a5e

File tree

2 files changed

+13
-24
lines changed

2 files changed

+13
-24
lines changed

lib/ASTGen/Sources/ASTGen/Decls.swift

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,10 @@ extension ASTGenVisitor {
8989

9090
let firstName: UnsafeMutableRawPointer?
9191
let secondName: UnsafeMutableRawPointer?
92-
let type: UnsafeMutableRawPointer?
93-
94-
if let nodeFirstName = node.firstName,
95-
// Swift AST represnts "_" as nil.
96-
nodeFirstName.text != "_" {
92+
93+
let nodeFirstName = node.firstName
94+
if nodeFirstName.text != "_" {
95+
// Swift AST represents "_" as nil.
9796
var text = nodeFirstName.text
9897
firstName = text.withUTF8 { buf in
9998
SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count)
@@ -111,11 +110,7 @@ extension ASTGenVisitor {
111110
secondName = nil
112111
}
113112

114-
if let typeSyntax = node.type {
115-
type = visit(typeSyntax).rawValue
116-
} else {
117-
type = nil
118-
}
113+
let type = visit(node.type).rawValue
119114

120115
return .decl(ParamDecl_create(ctx, loc, loc, firstName, loc, secondName, type, declContext))
121116
}

test/Macros/Inputs/syntax_macro_definitions.swift

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -774,15 +774,11 @@ public struct AddCompletionHandler: PeerMacro {
774774
newParameterList = parameterList.appending(completionHandlerParam)
775775
}
776776

777-
let callArguments: [String] = try parameterList.map { param in
778-
guard let argName = param.secondName ?? param.firstName else {
779-
throw CustomError.message(
780-
"@addCompletionHandler argument must have a name"
781-
)
782-
}
777+
let callArguments: [String] = parameterList.map { param in
778+
let argName = param.secondName ?? param.firstName
783779

784-
if let paramName = param.firstName, paramName.text != "_" {
785-
return "\(paramName.text): \(argName.text)"
780+
if param.firstName.text != "_" {
781+
return "\(param.firstName.text): \(argName.text)"
786782
}
787783

788784
return "\(argName.text)"
@@ -903,13 +899,11 @@ public struct WrapInType: PeerMacro {
903899
// Build a new function with the same signature that forwards arguments
904900
// to the the original function.
905901
let parameterList = funcDecl.signature.input.parameterList
906-
let callArguments: [String] = try parameterList.map { param in
907-
guard let argName = param.secondName ?? param.firstName else {
908-
throw CustomError.message("@wrapInType argument must have a name")
909-
}
902+
let callArguments: [String] = parameterList.map { param in
903+
let argName = param.secondName ?? param.firstName
910904

911-
if let paramName = param.firstName, paramName.text != "_" {
912-
return "\(paramName.text): \(argName.text)"
905+
if param.firstName.text != "_" {
906+
return "\(param.firstName.text): \(argName.text)"
913907
}
914908

915909
return "\(argName.text)"

0 commit comments

Comments
 (0)