Skip to content

Commit ca50449

Browse files
committed
Add editor place holder type
1 parent 61001ca commit ca50449

21 files changed

+407
-10
lines changed

CodeGeneration/Sources/SyntaxSupport/SyntaxNodeKind.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ public enum SyntaxNodeKind: String, CaseIterable {
112112
case editorPlaceholderDecl
113113
case editorPlaceholderExpr
114114
case editorPlaceholderPattern
115+
case editorPlaceholderType
115116
case effectsAttributeArgumentList
116117
case enumCaseDecl
117118
case enumCaseElement

CodeGeneration/Sources/SyntaxSupport/TypeNodes.swift

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -530,4 +530,29 @@ public let TYPE_NODES: [Node] = [
530530
]
531531
),
532532

533+
Node(
534+
kind: .editorPlaceholderType,
535+
base: .type,
536+
nameForDiagnostics: "editor placeholder",
537+
documentation: """
538+
An editor placeholder, e.g. `<#Type#>` that is used in a position that expects a type.
539+
""",
540+
children: [
541+
Child(
542+
name: "placeholder",
543+
deprecatedName: "identifier",
544+
kind: .token(choices: [.token(.identifier)]),
545+
documentation: """
546+
The actual editor placeholder that starts with `<#` and ends with `#>`.
547+
"""
548+
),
549+
Child(
550+
name: "genericArgumentClause",
551+
kind: .node(kind: .genericArgumentClause),
552+
documentation: "Generic arguments that is attatched to the type.",
553+
isOptional: true
554+
),
555+
]
556+
),
557+
533558
]

Release Notes/510.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@
2626
- Issue: https://github.com/apple/swift-syntax/issues/2147
2727
- Pull Request: https://github.com/apple/swift-syntax/pull/2150
2828

29+
- New type node `EditorPlaceholderTypeSyntax`
30+
- Description: This node type will be placeholder that is used in a position that expects a type.
31+
- Issue: https://github.com/apple/swift-syntax/issues/2156
32+
- Pull Request: https://github.com/apple/swift-syntax/pull/2150
33+
2934
## API Behavior Changes
3035

3136
## Deprecations

Sources/SwiftParser/Types.swift

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -349,14 +349,25 @@ extension Parser {
349349
generics = nil
350350
}
351351

352-
return RawTypeSyntax(
353-
RawIdentifierTypeSyntax(
354-
unexpectedBeforeName,
355-
name: name,
356-
genericArgumentClause: generics,
357-
arena: self.arena
352+
if name.tokenText.isEditorPlaceholder {
353+
return RawTypeSyntax(
354+
RawEditorPlaceholderTypeSyntax(
355+
placeholder: name,
356+
genericArgumentClause: generics,
357+
arena: self.arena
358+
)
358359
)
359-
)
360+
} else {
361+
return RawTypeSyntax(
362+
RawIdentifierTypeSyntax(
363+
unexpectedBeforeName,
364+
name: name,
365+
genericArgumentClause: generics,
366+
arena: self.arena
367+
)
368+
)
369+
}
370+
360371
}
361372

362373
/// Parse the existential `Any` type.
@@ -938,7 +949,9 @@ extension Parser {
938949

939950
extension Parser {
940951
mutating func parseResultType() -> RawTypeSyntax {
941-
if self.at(prefix: "<") {
952+
if self.at(prefix: "<#") {
953+
return self.parseTypeIdentifier()
954+
} else if self.at(prefix: "<") {
942955
let generics = self.parseGenericParameters()
943956
let baseType = self.parseType()
944957
return RawTypeSyntax(

Sources/SwiftParserDiagnostics/generated/SyntaxKindNameForDiagnostics.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,8 @@ extension SyntaxKind {
145145
return "editor placeholder"
146146
case .editorPlaceholderPattern:
147147
return "editor placeholder"
148+
case .editorPlaceholderType:
149+
return "editor placeholder"
148150
case .effectsAttributeArgumentList:
149151
return "@_effects arguments"
150152
case .enumCaseDecl:

Sources/SwiftSyntax/Documentation.docc/generated/SwiftSyntax.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ These articles are intended for developers wishing to contribute to SwiftSyntax
191191
- <doc:SwiftSyntax/ClassRestrictionTypeSyntax>
192192
- <doc:SwiftSyntax/CompositionTypeSyntax>
193193
- <doc:SwiftSyntax/DictionaryTypeSyntax>
194+
- <doc:SwiftSyntax/EditorPlaceholderTypeSyntax>
194195
- <doc:SwiftSyntax/FunctionTypeSyntax>
195196
- <doc:SwiftSyntax/IdentifierTypeSyntax>
196197
- <doc:SwiftSyntax/ImplicitlyUnwrappedOptionalTypeSyntax>

Sources/SwiftSyntax/generated/ChildNameForKeyPath.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1083,6 +1083,16 @@ public func childName(_ keyPath: AnyKeyPath) -> String? {
10831083
return "placeholder"
10841084
case \EditorPlaceholderPatternSyntax.unexpectedAfterPlaceholder:
10851085
return "unexpectedAfterPlaceholder"
1086+
case \EditorPlaceholderTypeSyntax.unexpectedBeforePlaceholder:
1087+
return "unexpectedBeforePlaceholder"
1088+
case \EditorPlaceholderTypeSyntax.placeholder:
1089+
return "placeholder"
1090+
case \EditorPlaceholderTypeSyntax.unexpectedBetweenPlaceholderAndGenericArgumentClause:
1091+
return "unexpectedBetweenPlaceholderAndGenericArgumentClause"
1092+
case \EditorPlaceholderTypeSyntax.genericArgumentClause:
1093+
return "genericArgumentClause"
1094+
case \EditorPlaceholderTypeSyntax.unexpectedAfterGenericArgumentClause:
1095+
return "unexpectedAfterGenericArgumentClause"
10861096
case \EnumCaseDeclSyntax.unexpectedBeforeAttributes:
10871097
return "unexpectedBeforeAttributes"
10881098
case \EnumCaseDeclSyntax.attributes:

Sources/SwiftSyntax/generated/RenamedChildrenCompatibility.swift

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2508,6 +2508,61 @@ extension EditorPlaceholderPatternSyntax {
25082508
}
25092509
}
25102510

2511+
extension EditorPlaceholderTypeSyntax {
2512+
@available(*, deprecated, renamed: "unexpectedBeforePlaceholder")
2513+
public var unexpectedBeforeIdentifier: UnexpectedNodesSyntax? {
2514+
get {
2515+
return unexpectedBeforePlaceholder
2516+
}
2517+
set {
2518+
unexpectedBeforePlaceholder = newValue
2519+
}
2520+
}
2521+
2522+
@available(*, deprecated, renamed: "placeholder")
2523+
public var identifier: TokenSyntax {
2524+
get {
2525+
return placeholder
2526+
}
2527+
set {
2528+
placeholder = newValue
2529+
}
2530+
}
2531+
2532+
@available(*, deprecated, renamed: "unexpectedBetweenPlaceholderAndGenericArgumentClause")
2533+
public var unexpectedBetweenIdentifierAndGenericArgumentClause: UnexpectedNodesSyntax? {
2534+
get {
2535+
return unexpectedBetweenPlaceholderAndGenericArgumentClause
2536+
}
2537+
set {
2538+
unexpectedBetweenPlaceholderAndGenericArgumentClause = newValue
2539+
}
2540+
}
2541+
2542+
@available(*, deprecated, renamed: "EditorPlaceholderTypeSyntax(leadingTrivia:_:placeholder:_:genericArgumentClause:_:trailingTrivia:)")
2543+
@_disfavoredOverload
2544+
public init(
2545+
leadingTrivia: Trivia? = nil,
2546+
_ unexpectedBeforeIdentifier: UnexpectedNodesSyntax? = nil,
2547+
identifier: TokenSyntax,
2548+
_ unexpectedBetweenIdentifierAndGenericArgumentClause: UnexpectedNodesSyntax? = nil,
2549+
genericArgumentClause: GenericArgumentClauseSyntax? = nil,
2550+
_ unexpectedAfterGenericArgumentClause: UnexpectedNodesSyntax? = nil,
2551+
trailingTrivia: Trivia? = nil
2552+
2553+
) {
2554+
self.init(
2555+
leadingTrivia: leadingTrivia,
2556+
unexpectedBeforeIdentifier,
2557+
placeholder: identifier,
2558+
unexpectedBetweenIdentifierAndGenericArgumentClause,
2559+
genericArgumentClause: genericArgumentClause,
2560+
unexpectedAfterGenericArgumentClause,
2561+
trailingTrivia: trailingTrivia
2562+
)
2563+
}
2564+
}
2565+
25112566
extension EnumCaseElementSyntax {
25122567
@available(*, deprecated, renamed: "unexpectedBeforeName")
25132568
public var unexpectedBeforeIdentifier: UnexpectedNodesSyntax? {

Sources/SwiftSyntax/generated/SyntaxAnyVisitor.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -784,6 +784,14 @@ open class SyntaxAnyVisitor: SyntaxVisitor {
784784
visitAnyPost(node._syntaxNode)
785785
}
786786

787+
override open func visit(_ node: EditorPlaceholderTypeSyntax) -> SyntaxVisitorContinueKind {
788+
return visitAny(node._syntaxNode)
789+
}
790+
791+
override open func visitPost(_ node: EditorPlaceholderTypeSyntax) {
792+
visitAnyPost(node._syntaxNode)
793+
}
794+
787795
override open func visit(_ node: EffectsAttributeArgumentListSyntax) -> SyntaxVisitorContinueKind {
788796
return visitAny(node._syntaxNode)
789797
}

Sources/SwiftSyntax/generated/SyntaxBaseNodes.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1299,7 +1299,7 @@ public struct TypeSyntax: TypeSyntaxProtocol, SyntaxHashable {
12991299

13001300
public init?(_ node: some SyntaxProtocol) {
13011301
switch node.raw.kind {
1302-
case .arrayType, .attributedType, .classRestrictionType, .compositionType, .dictionaryType, .functionType, .identifierType, .implicitlyUnwrappedOptionalType, .memberType, .metatypeType, .missingType, .namedOpaqueReturnType, .optionalType, .packElementType, .packExpansionType, .someOrAnyType, .suppressedType, .tupleType:
1302+
case .arrayType, .attributedType, .classRestrictionType, .compositionType, .dictionaryType, .editorPlaceholderType, .functionType, .identifierType, .implicitlyUnwrappedOptionalType, .memberType, .metatypeType, .missingType, .namedOpaqueReturnType, .optionalType, .packElementType, .packExpansionType, .someOrAnyType, .suppressedType, .tupleType:
13031303
self._syntaxNode = node._syntaxNode
13041304
default:
13051305
return nil
@@ -1329,6 +1329,7 @@ public struct TypeSyntax: TypeSyntaxProtocol, SyntaxHashable {
13291329
.node(ClassRestrictionTypeSyntax.self),
13301330
.node(CompositionTypeSyntax.self),
13311331
.node(DictionaryTypeSyntax.self),
1332+
.node(EditorPlaceholderTypeSyntax.self),
13321333
.node(FunctionTypeSyntax.self),
13331334
.node(IdentifierTypeSyntax.self),
13341335
.node(ImplicitlyUnwrappedOptionalTypeSyntax.self),
@@ -1488,6 +1489,7 @@ extension Syntax {
14881489
.node(EditorPlaceholderDeclSyntax.self),
14891490
.node(EditorPlaceholderExprSyntax.self),
14901491
.node(EditorPlaceholderPatternSyntax.self),
1492+
.node(EditorPlaceholderTypeSyntax.self),
14911493
.node(EffectsAttributeArgumentListSyntax.self),
14921494
.node(EnumCaseDeclSyntax.self),
14931495
.node(EnumCaseElementListSyntax.self),

Sources/SwiftSyntax/generated/SyntaxEnum.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ public enum SyntaxEnum {
106106
case editorPlaceholderDecl(EditorPlaceholderDeclSyntax)
107107
case editorPlaceholderExpr(EditorPlaceholderExprSyntax)
108108
case editorPlaceholderPattern(EditorPlaceholderPatternSyntax)
109+
case editorPlaceholderType(EditorPlaceholderTypeSyntax)
109110
case effectsAttributeArgumentList(EffectsAttributeArgumentListSyntax)
110111
case enumCaseDecl(EnumCaseDeclSyntax)
111112
case enumCaseElementList(EnumCaseElementListSyntax)
@@ -482,6 +483,8 @@ public extension Syntax {
482483
return .editorPlaceholderExpr(EditorPlaceholderExprSyntax(self)!)
483484
case .editorPlaceholderPattern:
484485
return .editorPlaceholderPattern(EditorPlaceholderPatternSyntax(self)!)
486+
case .editorPlaceholderType:
487+
return .editorPlaceholderType(EditorPlaceholderTypeSyntax(self)!)
485488
case .effectsAttributeArgumentList:
486489
return .effectsAttributeArgumentList(EffectsAttributeArgumentListSyntax(self)!)
487490
case .enumCaseDecl:

Sources/SwiftSyntax/generated/SyntaxKind.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ public enum SyntaxKind: CaseIterable {
106106
case editorPlaceholderDecl
107107
case editorPlaceholderExpr
108108
case editorPlaceholderPattern
109+
case editorPlaceholderType
109110
case effectsAttributeArgumentList
110111
case enumCaseDecl
111112
case enumCaseElementList
@@ -603,6 +604,8 @@ public enum SyntaxKind: CaseIterable {
603604
return EditorPlaceholderExprSyntax.self
604605
case .editorPlaceholderPattern:
605606
return EditorPlaceholderPatternSyntax.self
607+
case .editorPlaceholderType:
608+
return EditorPlaceholderTypeSyntax.self
606609
case .effectsAttributeArgumentList:
607610
return EffectsAttributeArgumentListSyntax.self
608611
case .enumCaseDecl:

Sources/SwiftSyntax/generated/SyntaxRewriter.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,13 @@ open class SyntaxRewriter {
717717
return PatternSyntax(visitChildren(node))
718718
}
719719

720+
/// Visit a ``EditorPlaceholderTypeSyntax``.
721+
/// - Parameter node: the node that is being visited
722+
/// - Returns: the rewritten node
723+
open func visit(_ node: EditorPlaceholderTypeSyntax) -> TypeSyntax {
724+
return TypeSyntax(visitChildren(node))
725+
}
726+
720727
/// Visit a ``EffectsAttributeArgumentListSyntax``.
721728
/// - Parameter node: the node that is being visited
722729
/// - Returns: the rewritten node
@@ -2467,6 +2474,10 @@ open class SyntaxRewriter {
24672474
return {
24682475
self.visitImpl($0, EditorPlaceholderPatternSyntax.self, self.visit)
24692476
}
2477+
case .editorPlaceholderType:
2478+
return {
2479+
self.visitImpl($0, EditorPlaceholderTypeSyntax.self, self.visit)
2480+
}
24702481
case .effectsAttributeArgumentList:
24712482
return {
24722483
self.visitImpl($0, EffectsAttributeArgumentListSyntax.self, self.visit)
@@ -3403,6 +3414,8 @@ open class SyntaxRewriter {
34033414
return visitImpl(node, EditorPlaceholderExprSyntax.self, visit)
34043415
case .editorPlaceholderPattern:
34053416
return visitImpl(node, EditorPlaceholderPatternSyntax.self, visit)
3417+
case .editorPlaceholderType:
3418+
return visitImpl(node, EditorPlaceholderTypeSyntax.self, visit)
34063419
case .effectsAttributeArgumentList:
34073420
return visitImpl(node, EffectsAttributeArgumentListSyntax.self, visit)
34083421
case .enumCaseDecl:

Sources/SwiftSyntax/generated/SyntaxTransform.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,11 @@ public protocol SyntaxTransformVisitor {
475475
/// - Returns: the sum of whatever the child visitors return.
476476
func visit(_ node: EditorPlaceholderPatternSyntax) -> ResultType
477477

478+
/// Visiting ``EditorPlaceholderTypeSyntax`` specifically.
479+
/// - Parameter node: the node we are visiting.
480+
/// - Returns: the sum of whatever the child visitors return.
481+
func visit(_ node: EditorPlaceholderTypeSyntax) -> ResultType
482+
478483
/// Visiting ``EffectsAttributeArgumentListSyntax`` specifically.
479484
/// - Parameter node: the node we are visiting.
480485
/// - Returns: the sum of whatever the child visitors return.
@@ -2048,6 +2053,13 @@ extension SyntaxTransformVisitor {
20482053
visitAny(Syntax(node))
20492054
}
20502055

2056+
/// Visiting ``EditorPlaceholderTypeSyntax`` specifically.
2057+
/// - Parameter node: the node we are visiting.
2058+
/// - Returns: nil by default.
2059+
public func visit(_ node: EditorPlaceholderTypeSyntax) -> ResultType {
2060+
visitAny(Syntax(node))
2061+
}
2062+
20512063
/// Visiting ``EffectsAttributeArgumentListSyntax`` specifically.
20522064
/// - Parameter node: the node we are visiting.
20532065
/// - Returns: nil by default.
@@ -3536,6 +3548,8 @@ extension SyntaxTransformVisitor {
35363548
return visit(derived)
35373549
case .editorPlaceholderPattern(let derived):
35383550
return visit(derived)
3551+
case .editorPlaceholderType(let derived):
3552+
return visit(derived)
35393553
case .effectsAttributeArgumentList(let derived):
35403554
return visit(derived)
35413555
case .enumCaseDecl(let derived):

Sources/SwiftSyntax/generated/SyntaxVisitor.swift

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1126,6 +1126,18 @@ open class SyntaxVisitor {
11261126
open func visitPost(_ node: EditorPlaceholderPatternSyntax) {
11271127
}
11281128

1129+
/// Visiting ``EditorPlaceholderTypeSyntax`` specifically.
1130+
/// - Parameter node: the node we are visiting.
1131+
/// - Returns: how should we continue visiting.
1132+
open func visit(_ node: EditorPlaceholderTypeSyntax) -> SyntaxVisitorContinueKind {
1133+
return .visitChildren
1134+
}
1135+
1136+
/// The function called after visiting ``EditorPlaceholderTypeSyntax`` and its descendants.
1137+
/// - node: the node we just finished visiting.
1138+
open func visitPost(_ node: EditorPlaceholderTypeSyntax) {
1139+
}
1140+
11291141
/// Visiting ``EffectsAttributeArgumentListSyntax`` specifically.
11301142
/// - Parameter node: the node we are visiting.
11311143
/// - Returns: how should we continue visiting.
@@ -3784,6 +3796,10 @@ open class SyntaxVisitor {
37843796
return {
37853797
self.visitImpl($0, EditorPlaceholderPatternSyntax.self, self.visit, self.visitPost)
37863798
}
3799+
case .editorPlaceholderType:
3800+
return {
3801+
self.visitImpl($0, EditorPlaceholderTypeSyntax.self, self.visit, self.visitPost)
3802+
}
37873803
case .effectsAttributeArgumentList:
37883804
return {
37893805
self.visitImpl($0, EffectsAttributeArgumentListSyntax.self, self.visit, self.visitPost)
@@ -4723,6 +4739,8 @@ open class SyntaxVisitor {
47234739
visitImpl(node, EditorPlaceholderExprSyntax.self, visit, visitPost)
47244740
case .editorPlaceholderPattern:
47254741
visitImpl(node, EditorPlaceholderPatternSyntax.self, visit, visitPost)
4742+
case .editorPlaceholderType:
4743+
visitImpl(node, EditorPlaceholderTypeSyntax.self, visit, visitPost)
47264744
case .effectsAttributeArgumentList:
47274745
visitImpl(node, EffectsAttributeArgumentListSyntax.self, visit, visitPost)
47284746
case .enumCaseDecl:

0 commit comments

Comments
 (0)