Skip to content

Commit 020f4b8

Browse files
committed
Unify and update child node default value generation
1 parent d6f56de commit 020f4b8

File tree

8 files changed

+63
-104
lines changed

8 files changed

+63
-104
lines changed

CodeGeneration/Sources/Utils/SyntaxBuildableChild.swift

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -45,21 +45,34 @@ public extension Child {
4545
flattened(indentedDocumentation: description ?? "")
4646
}
4747

48-
var defaultInitialization: ExprSyntax? {
49-
switch kind {
50-
case .token(choices: let choices, requiresLeadingSpace: _, requiresTrailingSpace: _):
51-
if choices.count == 1, case .keyword(text: let text) = choices.first {
52-
var textChoice = text
53-
if textChoice == "init" {
54-
textChoice = "`init`"
55-
}
56-
return ExprSyntax(".keyword(.\(raw: textChoice))")
57-
} else {
58-
return type.defaultInitialization
59-
}
60-
default:
61-
return type.defaultInitialization
48+
/// If the child node has a default value, return an expression of the form
49+
/// ` = default_value` that can be used as the default value to for a
50+
/// function parameter. Otherwise, return `nil`.
51+
var defaultInitialization: InitializerClauseSyntax? {
52+
if isOptional || isUnexpectedNodes {
53+
return InitializerClauseSyntax(value: NilLiteralExprSyntax())
54+
}
55+
guard let token = token, isToken else {
56+
return type.defaultInitialization.map { InitializerClauseSyntax(value: $0) }
57+
}
58+
if token.isKeyword {
59+
return InitializerClauseSyntax(value: ExprSyntax(".\(raw: token.swiftKind)()"))
60+
}
61+
if token.text != nil {
62+
return InitializerClauseSyntax(value: ExprSyntax(".\(raw: token.swiftKind)Token()"))
63+
}
64+
guard case .token(let choices, _, _) = kind, choices.count == 1, token.associatedValueClass != nil else {
65+
return nil
66+
}
67+
var textChoice: String
68+
switch choices[0] {
69+
case .keyword(let text), .token(let text):
70+
textChoice = text
71+
}
72+
if textChoice == "init" {
73+
textChoice = "`init`"
6274
}
75+
return InitializerClauseSyntax(value: ExprSyntax(".\(raw: token.swiftKind)(.\(raw: textChoice))"))
6376
}
6477

6578
/// If this node is a token that can't contain arbitrary text, generate a Swift

CodeGeneration/Sources/generate-swiftsyntax/templates/swiftsyntax/RawSyntaxNodesFile.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ let rawSyntaxNodesFile = SourceFileSyntax(leadingTrivia: copyrightHeader) {
197197
secondName: .identifier(child.swiftName),
198198
colon: .colonToken(),
199199
type: child.rawParameterType,
200-
defaultArgument: child.isUnexpectedNodes ? child.defaultInitialization.map { InitializerClauseSyntax(value: $0) } : nil
200+
defaultArgument: child.isUnexpectedNodes ? child.defaultInitialization : nil
201201
)
202202
}
203203

CodeGeneration/Sources/generate-swiftsyntax/templates/swiftsyntax/SyntaxNodeFile.swift

Lines changed: 0 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -438,57 +438,3 @@ fileprivate extension Node {
438438
}
439439
}
440440
}
441-
442-
fileprivate extension Child {
443-
/// If the type has a default value, return an expression of the form
444-
/// ` = default_value` that can be used as the default value to for a
445-
/// function parameter. Otherwise, return an empty string.
446-
var defaultInitialization: InitializerClauseSyntax? {
447-
// Note that this should be Optional<BaseType>.none for defaulted generic,
448-
// but that doesn't work in Swift 5.6. To keep source compatibility with
449-
// previous SwiftSyntax, we instead create a second initializer that uses
450-
// `Missing<Node>` and defaults that to `nil` instead (and `Missing` is
451-
// used so that they can't be implicitly converted from a literal).
452-
453-
if isOptional || isUnexpectedNodes {
454-
return InitializerClauseSyntax(value: NilLiteralExprSyntax())
455-
}
456-
457-
guard let token = token, isToken else {
458-
return nil
459-
}
460-
461-
if token.isKeyword {
462-
return InitializerClauseSyntax(value: ExprSyntax(".\(raw: token.swiftKind)()"))
463-
}
464-
465-
if token.text != nil {
466-
return InitializerClauseSyntax(value: ExprSyntax(".\(raw: token.swiftKind)Token()"))
467-
}
468-
469-
guard case .token(let choices, _, _) = kind else {
470-
return nil
471-
}
472-
473-
guard choices.count == 1 else {
474-
return nil
475-
}
476-
477-
var textChoice: String
478-
479-
switch choices[0] {
480-
case .keyword(let text),
481-
.token(let text):
482-
textChoice = text
483-
}
484-
485-
if token.associatedValueClass != nil {
486-
if textChoice == "init" {
487-
textChoice = "`init`"
488-
}
489-
return InitializerClauseSyntax(value: ExprSyntax(".\(raw: token.swiftKind)(.\(raw: textChoice))"))
490-
} else {
491-
return InitializerClauseSyntax(value: ExprSyntax(#".\#(raw: token.swiftKind)("\#(raw: textChoice)")"#))
492-
}
493-
}
494-
}

CodeGeneration/Sources/generate-swiftsyntax/templates/swiftsyntaxbuilder/BuildableNodesFile.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ private func createConvenienceInitializer(node: Node) throws -> InitializerDeclS
8383
firstName: .identifier(child.swiftName),
8484
colon: .colonToken(),
8585
type: child.parameterType,
86-
defaultArgument: child.defaultInitialization.map { InitializerClauseSyntax(value: $0) }
86+
defaultArgument: child.defaultInitialization
8787
)
8888
)
8989
}

Sources/SwiftSyntax/generated/syntaxNodes/SyntaxDeclNodes.swift

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ public struct ActorDeclSyntax: DeclSyntaxProtocol, SyntaxHashable {
300300
_ unexpectedBetweenModifiersAndActorKeyword: UnexpectedNodesSyntax? = nil,
301301
actorKeyword: TokenSyntax = .keyword(.actor),
302302
_ unexpectedBetweenActorKeywordAndIdentifier: UnexpectedNodesSyntax? = nil,
303-
identifier: TokenSyntax = .identifier("IdentifierToken"),
303+
identifier: TokenSyntax,
304304
_ unexpectedBetweenIdentifierAndGenericParameterClause: UnexpectedNodesSyntax? = nil,
305305
genericParameterClause: GenericParameterClauseSyntax? = nil,
306306
_ unexpectedBetweenGenericParameterClauseAndInheritanceClause: UnexpectedNodesSyntax? = nil,
@@ -633,7 +633,7 @@ public struct AssociatedtypeDeclSyntax: DeclSyntaxProtocol, SyntaxHashable {
633633
_ unexpectedBetweenModifiersAndAssociatedtypeKeyword: UnexpectedNodesSyntax? = nil,
634634
associatedtypeKeyword: TokenSyntax = .keyword(.associatedtype),
635635
_ unexpectedBetweenAssociatedtypeKeywordAndIdentifier: UnexpectedNodesSyntax? = nil,
636-
identifier: TokenSyntax = .identifier("IdentifierToken"),
636+
identifier: TokenSyntax,
637637
_ unexpectedBetweenIdentifierAndInheritanceClause: UnexpectedNodesSyntax? = nil,
638638
inheritanceClause: TypeInheritanceClauseSyntax? = nil,
639639
_ unexpectedBetweenInheritanceClauseAndInitializer: UnexpectedNodesSyntax? = nil,
@@ -938,7 +938,7 @@ public struct ClassDeclSyntax: DeclSyntaxProtocol, SyntaxHashable {
938938
_ unexpectedBetweenModifiersAndClassKeyword: UnexpectedNodesSyntax? = nil,
939939
classKeyword: TokenSyntax = .keyword(.class),
940940
_ unexpectedBetweenClassKeywordAndIdentifier: UnexpectedNodesSyntax? = nil,
941-
identifier: TokenSyntax = .identifier("IdentifierToken"),
941+
identifier: TokenSyntax,
942942
_ unexpectedBetweenIdentifierAndGenericParameterClause: UnexpectedNodesSyntax? = nil,
943943
genericParameterClause: GenericParameterClauseSyntax? = nil,
944944
_ unexpectedBetweenGenericParameterClauseAndInheritanceClause: UnexpectedNodesSyntax? = nil,
@@ -1486,7 +1486,7 @@ public struct EditorPlaceholderDeclSyntax: DeclSyntaxProtocol, SyntaxHashable {
14861486
public init(
14871487
leadingTrivia: Trivia? = nil,
14881488
_ unexpectedBeforeIdentifier: UnexpectedNodesSyntax? = nil,
1489-
identifier: TokenSyntax = .identifier("IdentifierToken"),
1489+
identifier: TokenSyntax,
14901490
_ unexpectedAfterIdentifier: UnexpectedNodesSyntax? = nil,
14911491
trailingTrivia: Trivia? = nil
14921492

@@ -1822,7 +1822,7 @@ public struct EnumDeclSyntax: DeclSyntaxProtocol, SyntaxHashable {
18221822
_ unexpectedBetweenModifiersAndEnumKeyword: UnexpectedNodesSyntax? = nil,
18231823
enumKeyword: TokenSyntax = .keyword(.enum),
18241824
_ unexpectedBetweenEnumKeywordAndIdentifier: UnexpectedNodesSyntax? = nil,
1825-
identifier: TokenSyntax = .identifier("IdentifierToken"),
1825+
identifier: TokenSyntax,
18261826
_ unexpectedBetweenIdentifierAndGenericParameters: UnexpectedNodesSyntax? = nil,
18271827
genericParameters: GenericParameterClauseSyntax? = nil,
18281828
_ unexpectedBetweenGenericParametersAndInheritanceClause: UnexpectedNodesSyntax? = nil,
@@ -3548,7 +3548,7 @@ public struct MacroDeclSyntax: DeclSyntaxProtocol, SyntaxHashable {
35483548
_ unexpectedBetweenModifiersAndMacroKeyword: UnexpectedNodesSyntax? = nil,
35493549
macroKeyword: TokenSyntax = .keyword(.macro),
35503550
_ unexpectedBetweenMacroKeywordAndIdentifier: UnexpectedNodesSyntax? = nil,
3551-
identifier: TokenSyntax = .identifier("IdentifierToken"),
3551+
identifier: TokenSyntax,
35523552
_ unexpectedBetweenIdentifierAndGenericParameterClause: UnexpectedNodesSyntax? = nil,
35533553
genericParameterClause: GenericParameterClauseSyntax? = nil,
35543554
_ unexpectedBetweenGenericParameterClauseAndSignature: UnexpectedNodesSyntax? = nil,
@@ -3877,7 +3877,7 @@ public struct MacroExpansionDeclSyntax: DeclSyntaxProtocol, SyntaxHashable {
38773877
_ unexpectedBeforePoundToken: UnexpectedNodesSyntax? = nil,
38783878
poundToken: TokenSyntax = .poundToken(),
38793879
_ unexpectedBetweenPoundTokenAndMacro: UnexpectedNodesSyntax? = nil,
3880-
macro: TokenSyntax = .identifier("IdentifierToken"),
3880+
macro: TokenSyntax,
38813881
_ unexpectedBetweenMacroAndGenericArguments: UnexpectedNodesSyntax? = nil,
38823882
genericArguments: GenericArgumentClauseSyntax? = nil,
38833883
_ unexpectedBetweenGenericArgumentsAndLeftParen: UnexpectedNodesSyntax? = nil,
@@ -4815,7 +4815,7 @@ public struct PrecedenceGroupDeclSyntax: DeclSyntaxProtocol, SyntaxHashable {
48154815
_ unexpectedBetweenModifiersAndPrecedencegroupKeyword: UnexpectedNodesSyntax? = nil,
48164816
precedencegroupKeyword: TokenSyntax = .keyword(.precedencegroup),
48174817
_ unexpectedBetweenPrecedencegroupKeywordAndIdentifier: UnexpectedNodesSyntax? = nil,
4818-
identifier: TokenSyntax = .identifier("IdentifierToken"),
4818+
identifier: TokenSyntax,
48194819
_ unexpectedBetweenIdentifierAndLeftBrace: UnexpectedNodesSyntax? = nil,
48204820
leftBrace: TokenSyntax = .leftBraceToken(),
48214821
_ unexpectedBetweenLeftBraceAndGroupAttributes: UnexpectedNodesSyntax? = nil,
@@ -5143,7 +5143,7 @@ public struct ProtocolDeclSyntax: DeclSyntaxProtocol, SyntaxHashable {
51435143
_ unexpectedBetweenModifiersAndProtocolKeyword: UnexpectedNodesSyntax? = nil,
51445144
protocolKeyword: TokenSyntax = .keyword(.protocol),
51455145
_ unexpectedBetweenProtocolKeywordAndIdentifier: UnexpectedNodesSyntax? = nil,
5146-
identifier: TokenSyntax = .identifier("IdentifierToken"),
5146+
identifier: TokenSyntax,
51475147
_ unexpectedBetweenIdentifierAndPrimaryAssociatedTypeClause: UnexpectedNodesSyntax? = nil,
51485148
primaryAssociatedTypeClause: PrimaryAssociatedTypeClauseSyntax? = nil,
51495149
_ unexpectedBetweenPrimaryAssociatedTypeClauseAndInheritanceClause: UnexpectedNodesSyntax? = nil,
@@ -5476,7 +5476,7 @@ public struct StructDeclSyntax: DeclSyntaxProtocol, SyntaxHashable {
54765476
_ unexpectedBetweenModifiersAndStructKeyword: UnexpectedNodesSyntax? = nil,
54775477
structKeyword: TokenSyntax = .keyword(.struct),
54785478
_ unexpectedBetweenStructKeywordAndIdentifier: UnexpectedNodesSyntax? = nil,
5479-
identifier: TokenSyntax = .identifier("IdentifierToken"),
5479+
identifier: TokenSyntax,
54805480
_ unexpectedBetweenIdentifierAndGenericParameterClause: UnexpectedNodesSyntax? = nil,
54815481
genericParameterClause: GenericParameterClauseSyntax? = nil,
54825482
_ unexpectedBetweenGenericParameterClauseAndInheritanceClause: UnexpectedNodesSyntax? = nil,
@@ -6184,7 +6184,7 @@ public struct TypealiasDeclSyntax: DeclSyntaxProtocol, SyntaxHashable {
61846184
_ unexpectedBetweenModifiersAndTypealiasKeyword: UnexpectedNodesSyntax? = nil,
61856185
typealiasKeyword: TokenSyntax = .keyword(.typealias),
61866186
_ unexpectedBetweenTypealiasKeywordAndIdentifier: UnexpectedNodesSyntax? = nil,
6187-
identifier: TokenSyntax = .identifier("IdentifierToken"),
6187+
identifier: TokenSyntax,
61886188
_ unexpectedBetweenIdentifierAndGenericParameterClause: UnexpectedNodesSyntax? = nil,
61896189
genericParameterClause: GenericParameterClauseSyntax? = nil,
61906190
_ unexpectedBetweenGenericParameterClauseAndInitializer: UnexpectedNodesSyntax? = nil,

Sources/SwiftSyntax/generated/syntaxNodes/SyntaxExprNodes.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -733,7 +733,7 @@ public struct BinaryOperatorExprSyntax: ExprSyntaxProtocol, SyntaxHashable {
733733
public init(
734734
leadingTrivia: Trivia? = nil,
735735
_ unexpectedBeforeOperatorToken: UnexpectedNodesSyntax? = nil,
736-
operatorToken: TokenSyntax = .binaryOperator("BinaryOperatorToken"),
736+
operatorToken: TokenSyntax,
737737
_ unexpectedAfterOperatorToken: UnexpectedNodesSyntax? = nil,
738738
trailingTrivia: Trivia? = nil
739739

@@ -1517,7 +1517,7 @@ public struct EditorPlaceholderExprSyntax: ExprSyntaxProtocol, SyntaxHashable {
15171517
public init(
15181518
leadingTrivia: Trivia? = nil,
15191519
_ unexpectedBeforeIdentifier: UnexpectedNodesSyntax? = nil,
1520-
identifier: TokenSyntax = .identifier("IdentifierToken"),
1520+
identifier: TokenSyntax,
15211521
_ unexpectedAfterIdentifier: UnexpectedNodesSyntax? = nil,
15221522
trailingTrivia: Trivia? = nil
15231523

@@ -1603,7 +1603,7 @@ public struct FloatLiteralExprSyntax: ExprSyntaxProtocol, SyntaxHashable {
16031603
public init(
16041604
leadingTrivia: Trivia? = nil,
16051605
_ unexpectedBeforeFloatingDigits: UnexpectedNodesSyntax? = nil,
1606-
floatingDigits: TokenSyntax = .floatingLiteral("FloatingLiteralToken"),
1606+
floatingDigits: TokenSyntax,
16071607
_ unexpectedAfterFloatingDigits: UnexpectedNodesSyntax? = nil,
16081608
trailingTrivia: Trivia? = nil
16091609

@@ -2774,7 +2774,7 @@ public struct IntegerLiteralExprSyntax: ExprSyntaxProtocol, SyntaxHashable {
27742774
public init(
27752775
leadingTrivia: Trivia? = nil,
27762776
_ unexpectedBeforeDigits: UnexpectedNodesSyntax? = nil,
2777-
digits: TokenSyntax = .integerLiteral("IntegerLiteralToken"),
2777+
digits: TokenSyntax,
27782778
_ unexpectedAfterDigits: UnexpectedNodesSyntax? = nil,
27792779
trailingTrivia: Trivia? = nil
27802780

@@ -3226,7 +3226,7 @@ public struct MacroExpansionExprSyntax: ExprSyntaxProtocol, SyntaxHashable {
32263226
_ unexpectedBeforePoundToken: UnexpectedNodesSyntax? = nil,
32273227
poundToken: TokenSyntax = .poundToken(),
32283228
_ unexpectedBetweenPoundTokenAndMacro: UnexpectedNodesSyntax? = nil,
3229-
macro: TokenSyntax = .identifier("IdentifierToken"),
3229+
macro: TokenSyntax,
32303230
_ unexpectedBetweenMacroAndGenericArguments: UnexpectedNodesSyntax? = nil,
32313231
genericArguments: GenericArgumentClauseSyntax? = nil,
32323232
_ unexpectedBetweenGenericArgumentsAndLeftParen: UnexpectedNodesSyntax? = nil,
@@ -4597,7 +4597,7 @@ public struct PostfixUnaryExprSyntax: ExprSyntaxProtocol, SyntaxHashable {
45974597
_ unexpectedBeforeExpression: UnexpectedNodesSyntax? = nil,
45984598
expression: E,
45994599
_ unexpectedBetweenExpressionAndOperatorToken: UnexpectedNodesSyntax? = nil,
4600-
operatorToken: TokenSyntax = .postfixOperator("PostfixOperatorToken"),
4600+
operatorToken: TokenSyntax,
46014601
_ unexpectedAfterOperatorToken: UnexpectedNodesSyntax? = nil,
46024602
trailingTrivia: Trivia? = nil
46034603

@@ -4853,7 +4853,7 @@ public struct RegexLiteralExprSyntax: ExprSyntaxProtocol, SyntaxHashable {
48534853
_ unexpectedBetweenOpeningPoundsAndOpenSlash: UnexpectedNodesSyntax? = nil,
48544854
openSlash: TokenSyntax = .regexSlashToken(),
48554855
_ unexpectedBetweenOpenSlashAndRegexPattern: UnexpectedNodesSyntax? = nil,
4856-
regexPattern: TokenSyntax = .regexLiteralPattern("RegexLiteralPatternToken"),
4856+
regexPattern: TokenSyntax,
48574857
_ unexpectedBetweenRegexPatternAndCloseSlash: UnexpectedNodesSyntax? = nil,
48584858
closeSlash: TokenSyntax = .regexSlashToken(),
48594859
_ unexpectedBetweenCloseSlashAndClosingPounds: UnexpectedNodesSyntax? = nil,

0 commit comments

Comments
 (0)