Skip to content

Commit 6d507ec

Browse files
committed
Add editor place holder type
1 parent 3cff8d7 commit 6d507ec

File tree

20 files changed

+385
-10
lines changed

20 files changed

+385
-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: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -530,4 +530,28 @@ 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+
kind: .token(choices: [.token(.identifier)]),
544+
documentation: """
545+
The actual editor placeholder that starts with `<#` and ends with `#>`.
546+
"""
547+
),
548+
Child(
549+
name: "genericArgumentClause",
550+
kind: .node(kind: .genericArgumentClause),
551+
documentation: "Generic arguments that is attatched to the type.",
552+
isOptional: true
553+
),
554+
]
555+
),
556+
533557
]

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/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:

0 commit comments

Comments
 (0)