Skip to content

Commit 4cc820f

Browse files
authored
Merge pull request #1087 from DougGregor/macro-expansion-generic-args
2 parents 0e85cf7 + c8c722d commit 4cc820f

File tree

14 files changed

+322
-143
lines changed

14 files changed

+322
-143
lines changed

CodeGeneration/Sources/SyntaxSupport/gyb_generated/DeclNodes.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1517,6 +1517,9 @@ public let DECL_NODES: [Node] = [
15171517
tokenChoices: [
15181518
"Identifier"
15191519
]),
1520+
Child(name: "GenericArguments",
1521+
kind: "GenericArgumentClause",
1522+
isOptional: true),
15201523
Child(name: "LeftParen",
15211524
kind: "LeftParenToken",
15221525
isOptional: true,

CodeGeneration/Sources/SyntaxSupport/gyb_generated/ExprNodes.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1303,6 +1303,9 @@ public let EXPR_NODES: [Node] = [
13031303
tokenChoices: [
13041304
"Identifier"
13051305
]),
1306+
Child(name: "GenericArguments",
1307+
kind: "GenericArgumentClause",
1308+
isOptional: true),
13061309
Child(name: "LeftParen",
13071310
kind: "LeftParenToken",
13081311
isOptional: true,

Sources/SwiftParser/Declarations.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2018,6 +2018,14 @@ extension Parser {
20182018
let poundKeyword = self.consumeAnyToken()
20192019
let (unexpectedBeforeMacro, macro) = self.expectIdentifier()
20202020

2021+
// Parse the optional generic argument list.
2022+
let generics: RawGenericArgumentClauseSyntax?
2023+
if self.lookahead().canParseAsGenericArgumentList() {
2024+
generics = self.parseGenericArguments()
2025+
} else {
2026+
generics = nil
2027+
}
2028+
20212029
// Parse the optional parenthesized argument list.
20222030
let leftParen = self.consume(if: .leftParen, where: { !$0.isAtStartOfLine })
20232031
let args: [RawTupleExprElementSyntax]
@@ -2048,6 +2056,7 @@ extension Parser {
20482056
poundToken: poundKeyword,
20492057
unexpectedBeforeMacro,
20502058
macro: macro,
2059+
genericArguments: generics,
20512060
leftParen: leftParen,
20522061
argumentList: RawTupleExprElementListSyntax(
20532062
elements: args, arena: self.arena

Sources/SwiftParser/Expressions.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1163,6 +1163,14 @@ extension Parser {
11631163
let poundKeyword = self.consumeAnyToken()
11641164
let (unexpectedBeforeMacro, macro) = self.expectIdentifier()
11651165

1166+
// Parse the optional generic argument list.
1167+
let generics: RawGenericArgumentClauseSyntax?
1168+
if self.lookahead().canParseAsGenericArgumentList() {
1169+
generics = self.parseGenericArguments()
1170+
} else {
1171+
generics = nil
1172+
}
1173+
11661174
// Parse the optional parenthesized argument list.
11671175
let leftParen = self.consume(if: .leftParen, where: { !$0.isAtStartOfLine })
11681176
let args: [RawTupleExprElementSyntax]
@@ -1191,6 +1199,7 @@ extension Parser {
11911199
poundToken: poundKeyword,
11921200
unexpectedBeforeMacro,
11931201
macro: macro,
1202+
genericArguments: generics,
11941203
leftParen: leftParen,
11951204
argumentList: RawTupleExprElementListSyntax(
11961205
elements: args, arena: self.arena

Sources/SwiftSyntax/Raw/gyb_generated/RawSyntaxNodes.swift

Lines changed: 68 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -5920,7 +5920,9 @@ public struct RawMacroExpansionExprSyntax: RawExprSyntaxNodeProtocol, RawSyntaxT
59205920
poundToken: RawTokenSyntax,
59215921
_ unexpectedBetweenPoundTokenAndMacro: RawUnexpectedNodesSyntax? = nil,
59225922
macro: RawTokenSyntax,
5923-
_ unexpectedBetweenMacroAndLeftParen: RawUnexpectedNodesSyntax? = nil,
5923+
_ unexpectedBetweenMacroAndGenericArguments: RawUnexpectedNodesSyntax? = nil,
5924+
genericArguments: RawGenericArgumentClauseSyntax?,
5925+
_ unexpectedBetweenGenericArgumentsAndLeftParen: RawUnexpectedNodesSyntax? = nil,
59245926
leftParen: RawTokenSyntax?,
59255927
_ unexpectedBetweenLeftParenAndArgumentList: RawUnexpectedNodesSyntax? = nil,
59265928
argumentList: RawTupleExprElementListSyntax,
@@ -5934,23 +5936,25 @@ public struct RawMacroExpansionExprSyntax: RawExprSyntaxNodeProtocol, RawSyntaxT
59345936
arena: __shared SyntaxArena
59355937
) {
59365938
let raw = RawSyntax.makeLayout(
5937-
kind: .macroExpansionExpr, uninitializedCount: 15, arena: arena) { layout in
5939+
kind: .macroExpansionExpr, uninitializedCount: 17, arena: arena) { layout in
59385940
layout.initialize(repeating: nil)
59395941
layout[0] = unexpectedBeforePoundToken?.raw
59405942
layout[1] = poundToken.raw
59415943
layout[2] = unexpectedBetweenPoundTokenAndMacro?.raw
59425944
layout[3] = macro.raw
5943-
layout[4] = unexpectedBetweenMacroAndLeftParen?.raw
5944-
layout[5] = leftParen?.raw
5945-
layout[6] = unexpectedBetweenLeftParenAndArgumentList?.raw
5946-
layout[7] = argumentList.raw
5947-
layout[8] = unexpectedBetweenArgumentListAndRightParen?.raw
5948-
layout[9] = rightParen?.raw
5949-
layout[10] = unexpectedBetweenRightParenAndTrailingClosure?.raw
5950-
layout[11] = trailingClosure?.raw
5951-
layout[12] = unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures?.raw
5952-
layout[13] = additionalTrailingClosures?.raw
5953-
layout[14] = unexpectedAfterAdditionalTrailingClosures?.raw
5945+
layout[4] = unexpectedBetweenMacroAndGenericArguments?.raw
5946+
layout[5] = genericArguments?.raw
5947+
layout[6] = unexpectedBetweenGenericArgumentsAndLeftParen?.raw
5948+
layout[7] = leftParen?.raw
5949+
layout[8] = unexpectedBetweenLeftParenAndArgumentList?.raw
5950+
layout[9] = argumentList.raw
5951+
layout[10] = unexpectedBetweenArgumentListAndRightParen?.raw
5952+
layout[11] = rightParen?.raw
5953+
layout[12] = unexpectedBetweenRightParenAndTrailingClosure?.raw
5954+
layout[13] = trailingClosure?.raw
5955+
layout[14] = unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures?.raw
5956+
layout[15] = additionalTrailingClosures?.raw
5957+
layout[16] = unexpectedAfterAdditionalTrailingClosures?.raw
59545958
}
59555959
self.init(raw: raw)
59565960
}
@@ -5967,38 +5971,44 @@ public struct RawMacroExpansionExprSyntax: RawExprSyntaxNodeProtocol, RawSyntaxT
59675971
public var macro: RawTokenSyntax {
59685972
layoutView.children[3].map(RawTokenSyntax.init(raw:))!
59695973
}
5970-
public var unexpectedBetweenMacroAndLeftParen: RawUnexpectedNodesSyntax? {
5974+
public var unexpectedBetweenMacroAndGenericArguments: RawUnexpectedNodesSyntax? {
59715975
layoutView.children[4].map(RawUnexpectedNodesSyntax.init(raw:))
59725976
}
5977+
public var genericArguments: RawGenericArgumentClauseSyntax? {
5978+
layoutView.children[5].map(RawGenericArgumentClauseSyntax.init(raw:))
5979+
}
5980+
public var unexpectedBetweenGenericArgumentsAndLeftParen: RawUnexpectedNodesSyntax? {
5981+
layoutView.children[6].map(RawUnexpectedNodesSyntax.init(raw:))
5982+
}
59735983
public var leftParen: RawTokenSyntax? {
5974-
layoutView.children[5].map(RawTokenSyntax.init(raw:))
5984+
layoutView.children[7].map(RawTokenSyntax.init(raw:))
59755985
}
59765986
public var unexpectedBetweenLeftParenAndArgumentList: RawUnexpectedNodesSyntax? {
5977-
layoutView.children[6].map(RawUnexpectedNodesSyntax.init(raw:))
5987+
layoutView.children[8].map(RawUnexpectedNodesSyntax.init(raw:))
59785988
}
59795989
public var argumentList: RawTupleExprElementListSyntax {
5980-
layoutView.children[7].map(RawTupleExprElementListSyntax.init(raw:))!
5990+
layoutView.children[9].map(RawTupleExprElementListSyntax.init(raw:))!
59815991
}
59825992
public var unexpectedBetweenArgumentListAndRightParen: RawUnexpectedNodesSyntax? {
5983-
layoutView.children[8].map(RawUnexpectedNodesSyntax.init(raw:))
5993+
layoutView.children[10].map(RawUnexpectedNodesSyntax.init(raw:))
59845994
}
59855995
public var rightParen: RawTokenSyntax? {
5986-
layoutView.children[9].map(RawTokenSyntax.init(raw:))
5996+
layoutView.children[11].map(RawTokenSyntax.init(raw:))
59875997
}
59885998
public var unexpectedBetweenRightParenAndTrailingClosure: RawUnexpectedNodesSyntax? {
5989-
layoutView.children[10].map(RawUnexpectedNodesSyntax.init(raw:))
5999+
layoutView.children[12].map(RawUnexpectedNodesSyntax.init(raw:))
59906000
}
59916001
public var trailingClosure: RawClosureExprSyntax? {
5992-
layoutView.children[11].map(RawClosureExprSyntax.init(raw:))
6002+
layoutView.children[13].map(RawClosureExprSyntax.init(raw:))
59936003
}
59946004
public var unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures: RawUnexpectedNodesSyntax? {
5995-
layoutView.children[12].map(RawUnexpectedNodesSyntax.init(raw:))
6005+
layoutView.children[14].map(RawUnexpectedNodesSyntax.init(raw:))
59966006
}
59976007
public var additionalTrailingClosures: RawMultipleTrailingClosureElementListSyntax? {
5998-
layoutView.children[13].map(RawMultipleTrailingClosureElementListSyntax.init(raw:))
6008+
layoutView.children[15].map(RawMultipleTrailingClosureElementListSyntax.init(raw:))
59996009
}
60006010
public var unexpectedAfterAdditionalTrailingClosures: RawUnexpectedNodesSyntax? {
6001-
layoutView.children[14].map(RawUnexpectedNodesSyntax.init(raw:))
6011+
layoutView.children[16].map(RawUnexpectedNodesSyntax.init(raw:))
60026012
}
60036013
}
60046014

@@ -11143,7 +11153,9 @@ public struct RawMacroExpansionDeclSyntax: RawDeclSyntaxNodeProtocol, RawSyntaxT
1114311153
poundToken: RawTokenSyntax,
1114411154
_ unexpectedBetweenPoundTokenAndMacro: RawUnexpectedNodesSyntax? = nil,
1114511155
macro: RawTokenSyntax,
11146-
_ unexpectedBetweenMacroAndLeftParen: RawUnexpectedNodesSyntax? = nil,
11156+
_ unexpectedBetweenMacroAndGenericArguments: RawUnexpectedNodesSyntax? = nil,
11157+
genericArguments: RawGenericArgumentClauseSyntax?,
11158+
_ unexpectedBetweenGenericArgumentsAndLeftParen: RawUnexpectedNodesSyntax? = nil,
1114711159
leftParen: RawTokenSyntax?,
1114811160
_ unexpectedBetweenLeftParenAndArgumentList: RawUnexpectedNodesSyntax? = nil,
1114911161
argumentList: RawTupleExprElementListSyntax,
@@ -11157,23 +11169,25 @@ public struct RawMacroExpansionDeclSyntax: RawDeclSyntaxNodeProtocol, RawSyntaxT
1115711169
arena: __shared SyntaxArena
1115811170
) {
1115911171
let raw = RawSyntax.makeLayout(
11160-
kind: .macroExpansionDecl, uninitializedCount: 15, arena: arena) { layout in
11172+
kind: .macroExpansionDecl, uninitializedCount: 17, arena: arena) { layout in
1116111173
layout.initialize(repeating: nil)
1116211174
layout[0] = unexpectedBeforePoundToken?.raw
1116311175
layout[1] = poundToken.raw
1116411176
layout[2] = unexpectedBetweenPoundTokenAndMacro?.raw
1116511177
layout[3] = macro.raw
11166-
layout[4] = unexpectedBetweenMacroAndLeftParen?.raw
11167-
layout[5] = leftParen?.raw
11168-
layout[6] = unexpectedBetweenLeftParenAndArgumentList?.raw
11169-
layout[7] = argumentList.raw
11170-
layout[8] = unexpectedBetweenArgumentListAndRightParen?.raw
11171-
layout[9] = rightParen?.raw
11172-
layout[10] = unexpectedBetweenRightParenAndTrailingClosure?.raw
11173-
layout[11] = trailingClosure?.raw
11174-
layout[12] = unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures?.raw
11175-
layout[13] = additionalTrailingClosures?.raw
11176-
layout[14] = unexpectedAfterAdditionalTrailingClosures?.raw
11178+
layout[4] = unexpectedBetweenMacroAndGenericArguments?.raw
11179+
layout[5] = genericArguments?.raw
11180+
layout[6] = unexpectedBetweenGenericArgumentsAndLeftParen?.raw
11181+
layout[7] = leftParen?.raw
11182+
layout[8] = unexpectedBetweenLeftParenAndArgumentList?.raw
11183+
layout[9] = argumentList.raw
11184+
layout[10] = unexpectedBetweenArgumentListAndRightParen?.raw
11185+
layout[11] = rightParen?.raw
11186+
layout[12] = unexpectedBetweenRightParenAndTrailingClosure?.raw
11187+
layout[13] = trailingClosure?.raw
11188+
layout[14] = unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures?.raw
11189+
layout[15] = additionalTrailingClosures?.raw
11190+
layout[16] = unexpectedAfterAdditionalTrailingClosures?.raw
1117711191
}
1117811192
self.init(raw: raw)
1117911193
}
@@ -11190,38 +11204,44 @@ public struct RawMacroExpansionDeclSyntax: RawDeclSyntaxNodeProtocol, RawSyntaxT
1119011204
public var macro: RawTokenSyntax {
1119111205
layoutView.children[3].map(RawTokenSyntax.init(raw:))!
1119211206
}
11193-
public var unexpectedBetweenMacroAndLeftParen: RawUnexpectedNodesSyntax? {
11207+
public var unexpectedBetweenMacroAndGenericArguments: RawUnexpectedNodesSyntax? {
1119411208
layoutView.children[4].map(RawUnexpectedNodesSyntax.init(raw:))
1119511209
}
11210+
public var genericArguments: RawGenericArgumentClauseSyntax? {
11211+
layoutView.children[5].map(RawGenericArgumentClauseSyntax.init(raw:))
11212+
}
11213+
public var unexpectedBetweenGenericArgumentsAndLeftParen: RawUnexpectedNodesSyntax? {
11214+
layoutView.children[6].map(RawUnexpectedNodesSyntax.init(raw:))
11215+
}
1119611216
public var leftParen: RawTokenSyntax? {
11197-
layoutView.children[5].map(RawTokenSyntax.init(raw:))
11217+
layoutView.children[7].map(RawTokenSyntax.init(raw:))
1119811218
}
1119911219
public var unexpectedBetweenLeftParenAndArgumentList: RawUnexpectedNodesSyntax? {
11200-
layoutView.children[6].map(RawUnexpectedNodesSyntax.init(raw:))
11220+
layoutView.children[8].map(RawUnexpectedNodesSyntax.init(raw:))
1120111221
}
1120211222
public var argumentList: RawTupleExprElementListSyntax {
11203-
layoutView.children[7].map(RawTupleExprElementListSyntax.init(raw:))!
11223+
layoutView.children[9].map(RawTupleExprElementListSyntax.init(raw:))!
1120411224
}
1120511225
public var unexpectedBetweenArgumentListAndRightParen: RawUnexpectedNodesSyntax? {
11206-
layoutView.children[8].map(RawUnexpectedNodesSyntax.init(raw:))
11226+
layoutView.children[10].map(RawUnexpectedNodesSyntax.init(raw:))
1120711227
}
1120811228
public var rightParen: RawTokenSyntax? {
11209-
layoutView.children[9].map(RawTokenSyntax.init(raw:))
11229+
layoutView.children[11].map(RawTokenSyntax.init(raw:))
1121011230
}
1121111231
public var unexpectedBetweenRightParenAndTrailingClosure: RawUnexpectedNodesSyntax? {
11212-
layoutView.children[10].map(RawUnexpectedNodesSyntax.init(raw:))
11232+
layoutView.children[12].map(RawUnexpectedNodesSyntax.init(raw:))
1121311233
}
1121411234
public var trailingClosure: RawClosureExprSyntax? {
11215-
layoutView.children[11].map(RawClosureExprSyntax.init(raw:))
11235+
layoutView.children[13].map(RawClosureExprSyntax.init(raw:))
1121611236
}
1121711237
public var unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures: RawUnexpectedNodesSyntax? {
11218-
layoutView.children[12].map(RawUnexpectedNodesSyntax.init(raw:))
11238+
layoutView.children[14].map(RawUnexpectedNodesSyntax.init(raw:))
1121911239
}
1122011240
public var additionalTrailingClosures: RawMultipleTrailingClosureElementListSyntax? {
11221-
layoutView.children[13].map(RawMultipleTrailingClosureElementListSyntax.init(raw:))
11241+
layoutView.children[15].map(RawMultipleTrailingClosureElementListSyntax.init(raw:))
1122211242
}
1122311243
public var unexpectedAfterAdditionalTrailingClosures: RawUnexpectedNodesSyntax? {
11224-
layoutView.children[14].map(RawUnexpectedNodesSyntax.init(raw:))
11244+
layoutView.children[16].map(RawUnexpectedNodesSyntax.init(raw:))
1122511245
}
1122611246
}
1122711247

Sources/SwiftSyntax/Raw/gyb_generated/RawSyntaxValidation.swift

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -841,22 +841,24 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) {
841841
assertNoError(kind, 12, verify(layout[12], as: RawUnexpectedNodesSyntax?.self))
842842
break
843843
case .macroExpansionExpr:
844-
assert(layout.count == 15)
844+
assert(layout.count == 17)
845845
assertNoError(kind, 0, verify(layout[0], as: RawUnexpectedNodesSyntax?.self))
846846
assertNoError(kind, 1, verify(layout[1], as: RawTokenSyntax.self))
847847
assertNoError(kind, 2, verify(layout[2], as: RawUnexpectedNodesSyntax?.self))
848848
assertNoError(kind, 3, verify(layout[3], as: RawTokenSyntax.self))
849849
assertNoError(kind, 4, verify(layout[4], as: RawUnexpectedNodesSyntax?.self))
850-
assertNoError(kind, 5, verify(layout[5], as: RawTokenSyntax?.self))
850+
assertNoError(kind, 5, verify(layout[5], as: RawGenericArgumentClauseSyntax?.self))
851851
assertNoError(kind, 6, verify(layout[6], as: RawUnexpectedNodesSyntax?.self))
852-
assertNoError(kind, 7, verify(layout[7], as: RawTupleExprElementListSyntax.self))
852+
assertNoError(kind, 7, verify(layout[7], as: RawTokenSyntax?.self))
853853
assertNoError(kind, 8, verify(layout[8], as: RawUnexpectedNodesSyntax?.self))
854-
assertNoError(kind, 9, verify(layout[9], as: RawTokenSyntax?.self))
854+
assertNoError(kind, 9, verify(layout[9], as: RawTupleExprElementListSyntax.self))
855855
assertNoError(kind, 10, verify(layout[10], as: RawUnexpectedNodesSyntax?.self))
856-
assertNoError(kind, 11, verify(layout[11], as: RawClosureExprSyntax?.self))
856+
assertNoError(kind, 11, verify(layout[11], as: RawTokenSyntax?.self))
857857
assertNoError(kind, 12, verify(layout[12], as: RawUnexpectedNodesSyntax?.self))
858-
assertNoError(kind, 13, verify(layout[13], as: RawMultipleTrailingClosureElementListSyntax?.self))
858+
assertNoError(kind, 13, verify(layout[13], as: RawClosureExprSyntax?.self))
859859
assertNoError(kind, 14, verify(layout[14], as: RawUnexpectedNodesSyntax?.self))
860+
assertNoError(kind, 15, verify(layout[15], as: RawMultipleTrailingClosureElementListSyntax?.self))
861+
assertNoError(kind, 16, verify(layout[16], as: RawUnexpectedNodesSyntax?.self))
860862
break
861863
case .postfixIfConfigExpr:
862864
assert(layout.count == 5)
@@ -1606,22 +1608,24 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) {
16061608
assertNoError(kind, 6, verify(layout[6], as: RawUnexpectedNodesSyntax?.self))
16071609
break
16081610
case .macroExpansionDecl:
1609-
assert(layout.count == 15)
1611+
assert(layout.count == 17)
16101612
assertNoError(kind, 0, verify(layout[0], as: RawUnexpectedNodesSyntax?.self))
16111613
assertNoError(kind, 1, verify(layout[1], as: RawTokenSyntax.self))
16121614
assertNoError(kind, 2, verify(layout[2], as: RawUnexpectedNodesSyntax?.self))
16131615
assertNoError(kind, 3, verify(layout[3], as: RawTokenSyntax.self))
16141616
assertNoError(kind, 4, verify(layout[4], as: RawUnexpectedNodesSyntax?.self))
1615-
assertNoError(kind, 5, verify(layout[5], as: RawTokenSyntax?.self))
1617+
assertNoError(kind, 5, verify(layout[5], as: RawGenericArgumentClauseSyntax?.self))
16161618
assertNoError(kind, 6, verify(layout[6], as: RawUnexpectedNodesSyntax?.self))
1617-
assertNoError(kind, 7, verify(layout[7], as: RawTupleExprElementListSyntax.self))
1619+
assertNoError(kind, 7, verify(layout[7], as: RawTokenSyntax?.self))
16181620
assertNoError(kind, 8, verify(layout[8], as: RawUnexpectedNodesSyntax?.self))
1619-
assertNoError(kind, 9, verify(layout[9], as: RawTokenSyntax?.self))
1621+
assertNoError(kind, 9, verify(layout[9], as: RawTupleExprElementListSyntax.self))
16201622
assertNoError(kind, 10, verify(layout[10], as: RawUnexpectedNodesSyntax?.self))
1621-
assertNoError(kind, 11, verify(layout[11], as: RawClosureExprSyntax?.self))
1623+
assertNoError(kind, 11, verify(layout[11], as: RawTokenSyntax?.self))
16221624
assertNoError(kind, 12, verify(layout[12], as: RawUnexpectedNodesSyntax?.self))
1623-
assertNoError(kind, 13, verify(layout[13], as: RawMultipleTrailingClosureElementListSyntax?.self))
1625+
assertNoError(kind, 13, verify(layout[13], as: RawClosureExprSyntax?.self))
16241626
assertNoError(kind, 14, verify(layout[14], as: RawUnexpectedNodesSyntax?.self))
1627+
assertNoError(kind, 15, verify(layout[15], as: RawMultipleTrailingClosureElementListSyntax?.self))
1628+
assertNoError(kind, 16, verify(layout[16], as: RawUnexpectedNodesSyntax?.self))
16251629
break
16261630
case .tokenList:
16271631
for (index, element) in layout.enumerated() {

0 commit comments

Comments
 (0)