Skip to content

Commit 0b170fa

Browse files
authored
Merge pull request #1103 from bnbarham/add-detach
Add a `detach()` to syntax nodes
2 parents a0e90a4 + 165b028 commit 0b170fa

File tree

11 files changed

+335
-619
lines changed

11 files changed

+335
-619
lines changed

Sources/SwiftParser/Parser+Entry.swift.gyb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ public protocol SyntaxParseable: SyntaxProtocol {
5151
extension ${node.name}: SyntaxParseable {
5252
public static func parse(from parser: inout Parser) -> Self {
5353
let node = parser.${node.parser_function}()
54-
return parser.parseRemainder(into: node).syntax
54+
let raw = RawSyntax(parser.parseRemainder(into: node))
55+
return Syntax(raw: raw).cast(Self.self)
5556
}
5657
}
5758

Sources/SwiftParser/gyb_generated/Parser+Entry.swift

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,70 +44,80 @@ public protocol SyntaxParseable: SyntaxProtocol {
4444
extension DeclSyntax: SyntaxParseable {
4545
public static func parse(from parser: inout Parser) -> Self {
4646
let node = parser.parseDeclaration()
47-
return parser.parseRemainder(into: node).syntax
47+
let raw = RawSyntax(parser.parseRemainder(into: node))
48+
return Syntax(raw: raw).cast(Self.self)
4849
}
4950
}
5051

5152
extension ExprSyntax: SyntaxParseable {
5253
public static func parse(from parser: inout Parser) -> Self {
5354
let node = parser.parseExpression()
54-
return parser.parseRemainder(into: node).syntax
55+
let raw = RawSyntax(parser.parseRemainder(into: node))
56+
return Syntax(raw: raw).cast(Self.self)
5557
}
5658
}
5759

5860
extension StmtSyntax: SyntaxParseable {
5961
public static func parse(from parser: inout Parser) -> Self {
6062
let node = parser.parseStatement()
61-
return parser.parseRemainder(into: node).syntax
63+
let raw = RawSyntax(parser.parseRemainder(into: node))
64+
return Syntax(raw: raw).cast(Self.self)
6265
}
6366
}
6467

6568
extension TypeSyntax: SyntaxParseable {
6669
public static func parse(from parser: inout Parser) -> Self {
6770
let node = parser.parseType()
68-
return parser.parseRemainder(into: node).syntax
71+
let raw = RawSyntax(parser.parseRemainder(into: node))
72+
return Syntax(raw: raw).cast(Self.self)
6973
}
7074
}
7175

7276
extension PatternSyntax: SyntaxParseable {
7377
public static func parse(from parser: inout Parser) -> Self {
7478
let node = parser.parsePattern()
75-
return parser.parseRemainder(into: node).syntax
79+
let raw = RawSyntax(parser.parseRemainder(into: node))
80+
return Syntax(raw: raw).cast(Self.self)
7681
}
7782
}
7883

7984
extension MemberDeclBlockSyntax: SyntaxParseable {
8085
public static func parse(from parser: inout Parser) -> Self {
8186
let node = parser.parseMemberDeclList()
82-
return parser.parseRemainder(into: node).syntax
87+
let raw = RawSyntax(parser.parseRemainder(into: node))
88+
return Syntax(raw: raw).cast(Self.self)
8389
}
8490
}
8591

8692
extension SourceFileSyntax: SyntaxParseable {
8793
public static func parse(from parser: inout Parser) -> Self {
8894
let node = parser.parseSourceFile()
89-
return parser.parseRemainder(into: node).syntax
95+
let raw = RawSyntax(parser.parseRemainder(into: node))
96+
return Syntax(raw: raw).cast(Self.self)
9097
}
9198
}
9299

93100
extension SwitchCaseSyntax: SyntaxParseable {
94101
public static func parse(from parser: inout Parser) -> Self {
95102
let node = parser.parseSwitchCase()
96-
return parser.parseRemainder(into: node).syntax
103+
let raw = RawSyntax(parser.parseRemainder(into: node))
104+
return Syntax(raw: raw).cast(Self.self)
97105
}
98106
}
99107

100108
extension CatchClauseSyntax: SyntaxParseable {
101109
public static func parse(from parser: inout Parser) -> Self {
102110
let node = parser.parseCatchClause()
103-
return parser.parseRemainder(into: node).syntax
111+
let raw = RawSyntax(parser.parseRemainder(into: node))
112+
return Syntax(raw: raw).cast(Self.self)
104113
}
105114
}
106115

107116
extension GenericParameterClauseSyntax: SyntaxParseable {
108117
public static func parse(from parser: inout Parser) -> Self {
109118
let node = parser.parseGenericParameters()
110-
return parser.parseRemainder(into: node).syntax
119+
let raw = RawSyntax(parser.parseRemainder(into: node))
120+
return Syntax(raw: raw).cast(Self.self)
111121
}
112122
}
113123

Sources/SwiftSyntax/Raw/RawSyntaxNodeProtocol.swift

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ extension RawSyntax: RawSyntaxNodeProtocol {
6565
}
6666

6767
@_spi(RawSyntax)
68-
public struct RawTokenSyntax: RawSyntaxToSyntax, RawSyntaxNodeProtocol {
68+
public struct RawTokenSyntax: RawSyntaxNodeProtocol {
6969
public typealias SyntaxType = TokenSyntax
7070

7171
@_spi(RawSyntax)
@@ -225,24 +225,3 @@ public struct RawTokenSyntax: RawSyntaxToSyntax, RawSyntaxNodeProtocol {
225225
)
226226
}
227227
}
228-
229-
/// Provides the `Syntax` type that a RawSyntax node represents.
230-
/// All syntax nodes conform to this protocol.
231-
/// We cannot add `SyntaxType` to `RawSyntaxNodeProtocol` because then
232-
/// `RawSyntaxNodeProtocol` has associated type requirements, which limits the
233-
/// places that `RawSyntaxNodeProtocol` can be used.
234-
@_spi(RawSyntax)
235-
public protocol RawSyntaxToSyntax: RawSyntaxNodeProtocol {
236-
associatedtype SyntaxType: SyntaxProtocol
237-
}
238-
239-
// TODO: Is it worth having this?
240-
// The only place that should be using it is the parser, which only converts
241-
// to `Syntax` in a few places anyway - we could just do the case there.
242-
@_spi(RawSyntax)
243-
public extension RawSyntaxToSyntax {
244-
/// Realizes a `Syntax` node for this `RawSyntax` node.
245-
var syntax: SyntaxType {
246-
return Syntax(raw: raw).cast(SyntaxType.self)
247-
}
248-
}

Sources/SwiftSyntax/Raw/RawSyntaxNodes.swift.gyb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public protocol Raw${node.name}NodeProtocol: Raw${node.base_type}NodeProtocol {}
2828
% for node in SYNTAX_NODES:
2929

3030
@_spi(RawSyntax)
31-
public struct Raw${node.name}: Raw${node.name if node.is_base() else node.base_type}NodeProtocol, RawSyntaxToSyntax {
31+
public struct Raw${node.name}: Raw${node.name if node.is_base() else node.base_type}NodeProtocol {
3232
% enums = []
3333
% for child in node.children:
3434
% if child.node_choices:
@@ -69,7 +69,6 @@ public struct Raw${node.name}: Raw${node.name if node.is_base() else node.base_t
6969
}
7070

7171
% end
72-
public typealias SyntaxType = ${node.name}
7372

7473
@_spi(RawSyntax)
7574
public var layoutView: RawSyntaxLayoutView {

0 commit comments

Comments
 (0)