Skip to content

Commit 599cca0

Browse files
authored
Merge pull request #861 from ahoppen/ahoppen/text-choices-for-isolated
Model parameter modifiers as a `ModifierList`
2 parents 093e5ee + e54f1d7 commit 599cca0

File tree

12 files changed

+252
-237
lines changed

12 files changed

+252
-237
lines changed

CodeGeneration/Sources/SyntaxSupport/gyb_generated/DeclNodes.swift

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -722,12 +722,10 @@ public let DECL_NODES: [Node] = [
722722
kind: "AttributeList",
723723
isOptional: true,
724724
collectionElementName: "Attribute"),
725-
Child(name: "IsolatedToken",
726-
kind: "Token",
727-
isOptional: true),
728-
Child(name: "ConstToken",
729-
kind: "Token",
730-
isOptional: true),
725+
Child(name: "Modifiers",
726+
kind: "ModifierList",
727+
isOptional: true,
728+
collectionElementName: "Modifier"),
731729
Child(name: "FirstName",
732730
kind: "Token",
733731
isOptional: true,

Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ let package = Package(
172172
.testTarget(
173173
name: "SwiftParserTest",
174174
dependencies: ["SwiftDiagnostics", "SwiftOperators", "SwiftParser",
175-
"_SwiftSyntaxTestSupport"]
175+
"_SwiftSyntaxTestSupport", "SwiftSyntaxBuilder"]
176176
),
177177
.testTarget(
178178
name: "SwiftOperatorsTest",

Sources/SwiftParser/Declarations.swift

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1257,6 +1257,26 @@ extension Parser {
12571257
}
12581258
}
12591259

1260+
mutating func parseParameterModifiers(for subject: ParameterSubject) -> RawModifierListSyntax? {
1261+
var elements = [RawDeclModifierSyntax]()
1262+
var loopCondition = LoopProgressCondition()
1263+
MODIFIER_LOOP: while loopCondition.evaluate(currentToken) {
1264+
switch self.at(anyIn: ParameterModifier.self) {
1265+
case (._const, let handle)?:
1266+
elements.append(RawDeclModifierSyntax(name: self.eat(handle), detail: nil, arena: self.arena))
1267+
case (.isolated, let handle)? where !self.lookahead().startsParameterName(subject.isClosure):
1268+
elements.append(RawDeclModifierSyntax(name: self.eat(handle), detail: nil, arena: self.arena))
1269+
default:
1270+
break MODIFIER_LOOP
1271+
}
1272+
}
1273+
if elements.isEmpty {
1274+
return nil
1275+
} else {
1276+
return RawModifierListSyntax(elements: elements, arena: self.arena)
1277+
}
1278+
}
1279+
12601280
@_spi(RawSyntax)
12611281
public mutating func parseParameterClause(for subject: ParameterSubject) -> RawParameterClauseSyntax {
12621282
let (unexpectedBeforeLParen, lparen) = self.expect(.leftParen)
@@ -1280,16 +1300,7 @@ extension Parser {
12801300
attrs = self.parseAttributeList()
12811301
}
12821302

1283-
let unexpectedBeforeIsolated: RawUnexpectedNodesSyntax?
1284-
let isolated: RawTokenSyntax?
1285-
if self.currentToken.isContextualKeyword("isolated") &&
1286-
!self.lookahead().startsParameterName(subject.isClosure) {
1287-
(unexpectedBeforeIsolated, isolated) = self.expectContextualKeyword("isolated")
1288-
} else {
1289-
unexpectedBeforeIsolated = nil
1290-
isolated = nil
1291-
}
1292-
let const = self.consumeIfContextualKeyword("_const")
1303+
let modifiers = parseParameterModifiers(for: subject)
12931304

12941305
let firstName: RawTokenSyntax?
12951306
let secondName: RawTokenSyntax?
@@ -1350,9 +1361,7 @@ extension Parser {
13501361
keepGoing = trailingComma != nil
13511362
elements.append(RawFunctionParameterSyntax(
13521363
attributes: attrs,
1353-
unexpectedBeforeIsolated,
1354-
isolatedToken: isolated,
1355-
constToken: const,
1364+
modifiers: modifiers,
13561365
firstName: firstName,
13571366
secondName: secondName,
13581367
unexpectedBeforeColon,

Sources/SwiftParser/RawTokenKindSubset.swift

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -631,6 +631,30 @@ enum MatchingPatternStart: RawTokenKindSubset {
631631
}
632632
}
633633

634+
enum ParameterModifier: RawTokenKindSubset {
635+
case _const
636+
case isolated
637+
638+
init?(lexeme: Lexer.Lexeme) {
639+
switch (lexeme.tokenKind, lexeme.tokenText) {
640+
case (.identifier, "_const"): self = ._const
641+
case (.identifier, "isolate"): self = .isolated
642+
default: return nil
643+
}
644+
}
645+
646+
var rawTokenKind: RawTokenKind {
647+
return .identifier
648+
}
649+
650+
var contextualKeyword: SyntaxText? {
651+
switch self {
652+
case ._const: return "_const"
653+
case .isolated: return "isolated"
654+
}
655+
}
656+
}
657+
634658
enum PrimaryExpressionStart: RawTokenKindSubset {
635659
case __column__Keyword
636660
case __dso_handle__Keyword

Sources/SwiftSyntax/Raw/gyb_generated/RawSyntaxNodes.swift

Lines changed: 37 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -7630,11 +7630,9 @@ public struct RawFunctionParameterSyntax: RawSyntaxNodeProtocol, RawSyntaxToSynt
76307630
public init(
76317631
_ unexpectedBeforeAttributes: RawUnexpectedNodesSyntax? = nil,
76327632
attributes: RawAttributeListSyntax?,
7633-
_ unexpectedBetweenAttributesAndIsolatedToken: RawUnexpectedNodesSyntax? = nil,
7634-
isolatedToken: RawTokenSyntax?,
7635-
_ unexpectedBetweenIsolatedTokenAndConstToken: RawUnexpectedNodesSyntax? = nil,
7636-
constToken: RawTokenSyntax?,
7637-
_ unexpectedBetweenConstTokenAndFirstName: RawUnexpectedNodesSyntax? = nil,
7633+
_ unexpectedBetweenAttributesAndModifiers: RawUnexpectedNodesSyntax? = nil,
7634+
modifiers: RawModifierListSyntax?,
7635+
_ unexpectedBetweenModifiersAndFirstName: RawUnexpectedNodesSyntax? = nil,
76387636
firstName: RawTokenSyntax?,
76397637
_ unexpectedBetweenFirstNameAndSecondName: RawUnexpectedNodesSyntax? = nil,
76407638
secondName: RawTokenSyntax?,
@@ -7651,28 +7649,26 @@ public struct RawFunctionParameterSyntax: RawSyntaxNodeProtocol, RawSyntaxToSynt
76517649
arena: __shared SyntaxArena
76527650
) {
76537651
let raw = RawSyntax.makeLayout(
7654-
kind: .functionParameter, uninitializedCount: 20, arena: arena) { layout in
7652+
kind: .functionParameter, uninitializedCount: 18, arena: arena) { layout in
76557653
layout.initialize(repeating: nil)
76567654
layout[0] = unexpectedBeforeAttributes?.raw
76577655
layout[1] = attributes?.raw
7658-
layout[2] = unexpectedBetweenAttributesAndIsolatedToken?.raw
7659-
layout[3] = isolatedToken?.raw
7660-
layout[4] = unexpectedBetweenIsolatedTokenAndConstToken?.raw
7661-
layout[5] = constToken?.raw
7662-
layout[6] = unexpectedBetweenConstTokenAndFirstName?.raw
7663-
layout[7] = firstName?.raw
7664-
layout[8] = unexpectedBetweenFirstNameAndSecondName?.raw
7665-
layout[9] = secondName?.raw
7666-
layout[10] = unexpectedBetweenSecondNameAndColon?.raw
7667-
layout[11] = colon?.raw
7668-
layout[12] = unexpectedBetweenColonAndType?.raw
7669-
layout[13] = type?.raw
7670-
layout[14] = unexpectedBetweenTypeAndEllipsis?.raw
7671-
layout[15] = ellipsis?.raw
7672-
layout[16] = unexpectedBetweenEllipsisAndDefaultArgument?.raw
7673-
layout[17] = defaultArgument?.raw
7674-
layout[18] = unexpectedBetweenDefaultArgumentAndTrailingComma?.raw
7675-
layout[19] = trailingComma?.raw
7656+
layout[2] = unexpectedBetweenAttributesAndModifiers?.raw
7657+
layout[3] = modifiers?.raw
7658+
layout[4] = unexpectedBetweenModifiersAndFirstName?.raw
7659+
layout[5] = firstName?.raw
7660+
layout[6] = unexpectedBetweenFirstNameAndSecondName?.raw
7661+
layout[7] = secondName?.raw
7662+
layout[8] = unexpectedBetweenSecondNameAndColon?.raw
7663+
layout[9] = colon?.raw
7664+
layout[10] = unexpectedBetweenColonAndType?.raw
7665+
layout[11] = type?.raw
7666+
layout[12] = unexpectedBetweenTypeAndEllipsis?.raw
7667+
layout[13] = ellipsis?.raw
7668+
layout[14] = unexpectedBetweenEllipsisAndDefaultArgument?.raw
7669+
layout[15] = defaultArgument?.raw
7670+
layout[16] = unexpectedBetweenDefaultArgumentAndTrailingComma?.raw
7671+
layout[17] = trailingComma?.raw
76767672
}
76777673
self.init(raw: raw)
76787674
}
@@ -7683,59 +7679,53 @@ public struct RawFunctionParameterSyntax: RawSyntaxNodeProtocol, RawSyntaxToSynt
76837679
public var attributes: RawAttributeListSyntax? {
76847680
layoutView.children[1].map(RawAttributeListSyntax.init(raw:))
76857681
}
7686-
public var unexpectedBetweenAttributesAndIsolatedToken: RawUnexpectedNodesSyntax? {
7682+
public var unexpectedBetweenAttributesAndModifiers: RawUnexpectedNodesSyntax? {
76877683
layoutView.children[2].map(RawUnexpectedNodesSyntax.init(raw:))
76887684
}
7689-
public var isolatedToken: RawTokenSyntax? {
7690-
layoutView.children[3].map(RawTokenSyntax.init(raw:))
7685+
public var modifiers: RawModifierListSyntax? {
7686+
layoutView.children[3].map(RawModifierListSyntax.init(raw:))
76917687
}
7692-
public var unexpectedBetweenIsolatedTokenAndConstToken: RawUnexpectedNodesSyntax? {
7688+
public var unexpectedBetweenModifiersAndFirstName: RawUnexpectedNodesSyntax? {
76937689
layoutView.children[4].map(RawUnexpectedNodesSyntax.init(raw:))
76947690
}
7695-
public var constToken: RawTokenSyntax? {
7696-
layoutView.children[5].map(RawTokenSyntax.init(raw:))
7697-
}
7698-
public var unexpectedBetweenConstTokenAndFirstName: RawUnexpectedNodesSyntax? {
7699-
layoutView.children[6].map(RawUnexpectedNodesSyntax.init(raw:))
7700-
}
77017691
public var firstName: RawTokenSyntax? {
7702-
layoutView.children[7].map(RawTokenSyntax.init(raw:))
7692+
layoutView.children[5].map(RawTokenSyntax.init(raw:))
77037693
}
77047694
public var unexpectedBetweenFirstNameAndSecondName: RawUnexpectedNodesSyntax? {
7705-
layoutView.children[8].map(RawUnexpectedNodesSyntax.init(raw:))
7695+
layoutView.children[6].map(RawUnexpectedNodesSyntax.init(raw:))
77067696
}
77077697
public var secondName: RawTokenSyntax? {
7708-
layoutView.children[9].map(RawTokenSyntax.init(raw:))
7698+
layoutView.children[7].map(RawTokenSyntax.init(raw:))
77097699
}
77107700
public var unexpectedBetweenSecondNameAndColon: RawUnexpectedNodesSyntax? {
7711-
layoutView.children[10].map(RawUnexpectedNodesSyntax.init(raw:))
7701+
layoutView.children[8].map(RawUnexpectedNodesSyntax.init(raw:))
77127702
}
77137703
public var colon: RawTokenSyntax? {
7714-
layoutView.children[11].map(RawTokenSyntax.init(raw:))
7704+
layoutView.children[9].map(RawTokenSyntax.init(raw:))
77157705
}
77167706
public var unexpectedBetweenColonAndType: RawUnexpectedNodesSyntax? {
7717-
layoutView.children[12].map(RawUnexpectedNodesSyntax.init(raw:))
7707+
layoutView.children[10].map(RawUnexpectedNodesSyntax.init(raw:))
77187708
}
77197709
public var type: RawTypeSyntax? {
7720-
layoutView.children[13].map(RawTypeSyntax.init(raw:))
7710+
layoutView.children[11].map(RawTypeSyntax.init(raw:))
77217711
}
77227712
public var unexpectedBetweenTypeAndEllipsis: RawUnexpectedNodesSyntax? {
7723-
layoutView.children[14].map(RawUnexpectedNodesSyntax.init(raw:))
7713+
layoutView.children[12].map(RawUnexpectedNodesSyntax.init(raw:))
77247714
}
77257715
public var ellipsis: RawTokenSyntax? {
7726-
layoutView.children[15].map(RawTokenSyntax.init(raw:))
7716+
layoutView.children[13].map(RawTokenSyntax.init(raw:))
77277717
}
77287718
public var unexpectedBetweenEllipsisAndDefaultArgument: RawUnexpectedNodesSyntax? {
7729-
layoutView.children[16].map(RawUnexpectedNodesSyntax.init(raw:))
7719+
layoutView.children[14].map(RawUnexpectedNodesSyntax.init(raw:))
77307720
}
77317721
public var defaultArgument: RawInitializerClauseSyntax? {
7732-
layoutView.children[17].map(RawInitializerClauseSyntax.init(raw:))
7722+
layoutView.children[15].map(RawInitializerClauseSyntax.init(raw:))
77337723
}
77347724
public var unexpectedBetweenDefaultArgumentAndTrailingComma: RawUnexpectedNodesSyntax? {
7735-
layoutView.children[18].map(RawUnexpectedNodesSyntax.init(raw:))
7725+
layoutView.children[16].map(RawUnexpectedNodesSyntax.init(raw:))
77367726
}
77377727
public var trailingComma: RawTokenSyntax? {
7738-
layoutView.children[19].map(RawTokenSyntax.init(raw:))
7728+
layoutView.children[17].map(RawTokenSyntax.init(raw:))
77397729
}
77407730
}
77417731

Sources/SwiftSyntax/Raw/gyb_generated/RawSyntaxValidation.swift

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1031,27 +1031,25 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) {
10311031
_verify(layout[3], as: RawExprSyntax.self)
10321032
break
10331033
case .functionParameter:
1034-
assert(layout.count == 20)
1034+
assert(layout.count == 18)
10351035
_verify(layout[0], as: RawUnexpectedNodesSyntax?.self)
10361036
_verify(layout[1], as: RawAttributeListSyntax?.self)
10371037
_verify(layout[2], as: RawUnexpectedNodesSyntax?.self)
1038-
_verify(layout[3], as: RawTokenSyntax?.self)
1038+
_verify(layout[3], as: RawModifierListSyntax?.self)
10391039
_verify(layout[4], as: RawUnexpectedNodesSyntax?.self)
10401040
_verify(layout[5], as: RawTokenSyntax?.self)
10411041
_verify(layout[6], as: RawUnexpectedNodesSyntax?.self)
10421042
_verify(layout[7], as: RawTokenSyntax?.self)
10431043
_verify(layout[8], as: RawUnexpectedNodesSyntax?.self)
10441044
_verify(layout[9], as: RawTokenSyntax?.self)
10451045
_verify(layout[10], as: RawUnexpectedNodesSyntax?.self)
1046-
_verify(layout[11], as: RawTokenSyntax?.self)
1046+
_verify(layout[11], as: RawTypeSyntax?.self)
10471047
_verify(layout[12], as: RawUnexpectedNodesSyntax?.self)
1048-
_verify(layout[13], as: RawTypeSyntax?.self)
1048+
_verify(layout[13], as: RawTokenSyntax?.self)
10491049
_verify(layout[14], as: RawUnexpectedNodesSyntax?.self)
1050-
_verify(layout[15], as: RawTokenSyntax?.self)
1050+
_verify(layout[15], as: RawInitializerClauseSyntax?.self)
10511051
_verify(layout[16], as: RawUnexpectedNodesSyntax?.self)
1052-
_verify(layout[17], as: RawInitializerClauseSyntax?.self)
1053-
_verify(layout[18], as: RawUnexpectedNodesSyntax?.self)
1054-
_verify(layout[19], as: RawTokenSyntax?.self)
1052+
_verify(layout[17], as: RawTokenSyntax?.self)
10551053
break
10561054
case .modifierList:
10571055
for element in layout {

Sources/SwiftSyntax/gyb_generated/SyntaxFactory.swift

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3285,15 +3285,13 @@ public enum SyntaxFactory {
32853285
return InitializerClauseSyntax(data)
32863286
}
32873287
@available(*, deprecated, message: "Use initializer on FunctionParameterSyntax")
3288-
public static func makeFunctionParameter(_ unexpectedBeforeAttributes: UnexpectedNodesSyntax? = nil, attributes: AttributeListSyntax?, _ unexpectedBetweenAttributesAndIsolatedToken: UnexpectedNodesSyntax? = nil, isolatedToken: TokenSyntax?, _ unexpectedBetweenIsolatedTokenAndConstToken: UnexpectedNodesSyntax? = nil, constToken: TokenSyntax?, _ unexpectedBetweenConstTokenAndFirstName: UnexpectedNodesSyntax? = nil, firstName: TokenSyntax?, _ unexpectedBetweenFirstNameAndSecondName: UnexpectedNodesSyntax? = nil, secondName: TokenSyntax?, _ unexpectedBetweenSecondNameAndColon: UnexpectedNodesSyntax? = nil, colon: TokenSyntax?, _ unexpectedBetweenColonAndType: UnexpectedNodesSyntax? = nil, type: TypeSyntax?, _ unexpectedBetweenTypeAndEllipsis: UnexpectedNodesSyntax? = nil, ellipsis: TokenSyntax?, _ unexpectedBetweenEllipsisAndDefaultArgument: UnexpectedNodesSyntax? = nil, defaultArgument: InitializerClauseSyntax?, _ unexpectedBetweenDefaultArgumentAndTrailingComma: UnexpectedNodesSyntax? = nil, trailingComma: TokenSyntax?) -> FunctionParameterSyntax {
3288+
public static func makeFunctionParameter(_ unexpectedBeforeAttributes: UnexpectedNodesSyntax? = nil, attributes: AttributeListSyntax?, _ unexpectedBetweenAttributesAndModifiers: UnexpectedNodesSyntax? = nil, modifiers: ModifierListSyntax?, _ unexpectedBetweenModifiersAndFirstName: UnexpectedNodesSyntax? = nil, firstName: TokenSyntax?, _ unexpectedBetweenFirstNameAndSecondName: UnexpectedNodesSyntax? = nil, secondName: TokenSyntax?, _ unexpectedBetweenSecondNameAndColon: UnexpectedNodesSyntax? = nil, colon: TokenSyntax?, _ unexpectedBetweenColonAndType: UnexpectedNodesSyntax? = nil, type: TypeSyntax?, _ unexpectedBetweenTypeAndEllipsis: UnexpectedNodesSyntax? = nil, ellipsis: TokenSyntax?, _ unexpectedBetweenEllipsisAndDefaultArgument: UnexpectedNodesSyntax? = nil, defaultArgument: InitializerClauseSyntax?, _ unexpectedBetweenDefaultArgumentAndTrailingComma: UnexpectedNodesSyntax? = nil, trailingComma: TokenSyntax?) -> FunctionParameterSyntax {
32893289
let layout: [RawSyntax?] = [
32903290
unexpectedBeforeAttributes?.raw,
32913291
attributes?.raw,
3292-
unexpectedBetweenAttributesAndIsolatedToken?.raw,
3293-
isolatedToken?.raw,
3294-
unexpectedBetweenIsolatedTokenAndConstToken?.raw,
3295-
constToken?.raw,
3296-
unexpectedBetweenConstTokenAndFirstName?.raw,
3292+
unexpectedBetweenAttributesAndModifiers?.raw,
3293+
modifiers?.raw,
3294+
unexpectedBetweenModifiersAndFirstName?.raw,
32973295
firstName?.raw,
32983296
unexpectedBetweenFirstNameAndSecondName?.raw,
32993297
secondName?.raw,
@@ -3336,8 +3334,6 @@ public enum SyntaxFactory {
33363334
nil,
33373335
nil,
33383336
nil,
3339-
nil,
3340-
nil,
33413337
], arena: .default))
33423338
return FunctionParameterSyntax(data)
33433339
}

0 commit comments

Comments
 (0)