@@ -39,10 +39,17 @@ public protocol ${kind}ListBuildable: SyntaxListBuildable {
39
39
func build${kind}List(format: Format, leadingTrivia: Trivia?) -> [${build_kind}]
40
40
}
41
41
42
+ % buildable_type = kind + 'Buildable'
43
+ public protocol ExpressibleAs${buildable_type} {
44
+ func create${buildable_type}() -> ${buildable_type}
45
+ }
46
+
42
47
% if kind == 'Syntax':
43
- public protocol ${kind}Buildable: ${kind}ListBuildable {
48
+ public protocol ${buildable_type}: ExpressibleAs${buildable_type}, ${kind}ListBuildable {
49
+ % elif kind == 'Decl':
50
+ public protocol ${buildable_type}: ExpressibleAs${buildable_type}, SyntaxBuildable, ${kind}ListBuildable, ExpressibleAsMemberDeclListItem, ExpressibleAsCodeBlockItem {
44
51
% else:
45
- public protocol ${kind}Buildable: SyntaxBuildable, ${kind}ListBuildable {
52
+ public protocol ${buildable_type}: ExpressibleAs${buildable_type}, SyntaxBuildable, ${kind}ListBuildable {
46
53
% end
47
54
/// Builds a `${build_kind}`.
48
55
/// - Parameter format: The `Format` to use.
@@ -51,7 +58,13 @@ public protocol ${kind}Buildable: SyntaxBuildable, ${kind}ListBuildable {
51
58
func build${kind}(format: Format, leadingTrivia: Trivia?) -> ${build_kind}
52
59
}
53
60
54
- extension ${kind}Buildable {
61
+ extension ${buildable_type} {
62
+ public func create${buildable_type}() -> ${buildable_type} {
63
+ return self
64
+ }
65
+ }
66
+
67
+ extension ${buildable_type} {
55
68
% if kind != 'Syntax':
56
69
/// Builds a `${build_kind}`.
57
70
/// - Returns: A `${build_kind}`.
@@ -82,6 +95,20 @@ extension ${kind}Buildable {
82
95
[build${kind}(format: format, leadingTrivia: leadingTrivia)]
83
96
}
84
97
}
98
+ % if kind == 'Decl':
99
+
100
+ extension DeclBuildable {
101
+ public func createMemberDeclListItem() -> MemberDeclListItem {
102
+ MemberDeclListItem(decl: self)
103
+ }
104
+ }
105
+
106
+ extension DeclBuildable {
107
+ public func createCodeBlockItem() -> CodeBlockItem {
108
+ CodeBlockItem(item: self)
109
+ }
110
+ }
111
+ % end
85
112
86
113
% end
87
114
% end
@@ -196,5 +223,26 @@ public struct ${node.syntax_kind}: SyntaxBuildable {
196
223
}
197
224
}
198
225
226
+ % end
227
+
228
+ % if node.is_buildable() or node.is_syntax_collection():
229
+ public protocol ExpressibleAs${node.syntax_kind} {
230
+ func create${node.syntax_kind}() -> ${node.syntax_kind}
231
+ }
232
+
233
+ extension ${node.syntax_kind}: ExpressibleAs${node.syntax_kind} {
234
+ public func create${node.syntax_kind}() -> ${node.syntax_kind} {
235
+ return self
236
+ }
237
+ }
199
238
% end
200
239
% end
240
+
241
+ public protocol ExpressibleAsTokenSyntax {
242
+ func createTokenSyntax() -> TokenSyntax
243
+ }
244
+ extension TokenSyntax: ExpressibleAsTokenSyntax {
245
+ public func createTokenSyntax() -> TokenSyntax {
246
+ self
247
+ }
248
+ }
0 commit comments