@@ -85,7 +85,7 @@ fileprivate enum RawSyntaxData {
85
85
/// Represents the raw tree structure underlying the syntax tree. These nodes
86
86
/// have no notion of identity and only provide structure to the tree. They
87
87
/// are immutable and can be freely shared between syntax nodes.
88
- struct RawSyntax : Codable {
88
+ struct RawSyntax {
89
89
fileprivate let data : RawSyntaxData
90
90
let presence : SourcePresence
91
91
@@ -198,61 +198,6 @@ struct RawSyntax: Codable {
198
198
case nodeLookupFailed( SyntaxNodeId )
199
199
}
200
200
201
- /// Creates a RawSyntax from the provided Foundation Decoder.
202
- init ( from decoder: Decoder ) throws {
203
- let container = try decoder. container ( keyedBy: CodingKeys . self)
204
- let id = try container. decodeIfPresent ( SyntaxNodeId . self, forKey: . id)
205
- let omitted = try container. decodeIfPresent ( Bool . self, forKey: . omitted) ?? false
206
-
207
- if omitted {
208
- guard let id = id else {
209
- throw IncrementalDecodingError . omittedNodeHasNoId
210
- }
211
- guard let lookupFunc = decoder. userInfo [ . omittedNodeLookupFunction] as?
212
- ( SyntaxNodeId ) -> RawSyntax ? else {
213
- throw IncrementalDecodingError . noLookupFunctionPassed
214
- }
215
- guard let lookupNode = lookupFunc ( id) else {
216
- throw IncrementalDecodingError . nodeLookupFailed ( id)
217
- }
218
- self = lookupNode
219
- return
220
- }
221
-
222
- let presence = try container. decode ( SourcePresence . self, forKey: . presence)
223
- if let kind = try container. decodeIfPresent ( SyntaxKind . self, forKey: . kind) {
224
- let layout = try container. decode ( [ RawSyntax ? ] . self, forKey: . layout)
225
- self . init ( kind: kind, layout: layout, presence: presence, id: id)
226
- } else {
227
- let kind = try container. decode ( TokenKind . self, forKey: . tokenKind)
228
- let leadingTrivia = try container. decode ( Trivia . self, forKey: . leadingTrivia)
229
- let trailingTrivia = try container. decode ( Trivia . self, forKey: . trailingTrivia)
230
- self . init ( kind: kind, leadingTrivia: leadingTrivia,
231
- trailingTrivia: trailingTrivia, presence: presence, id: id)
232
- }
233
- if let callback = decoder. userInfo [ . rawSyntaxDecodedCallback] as?
234
- ( RawSyntax ) -> Void {
235
- callback ( self )
236
- }
237
- }
238
-
239
- /// Encodes the RawSyntax to the provided Foundation Encoder.
240
- func encode( to encoder: Encoder ) throws {
241
- var container = encoder. container ( keyedBy: CodingKeys . self)
242
- switch self . data {
243
- case let . node( kind, layout) :
244
- try container. encode ( id, forKey: . id)
245
- try container. encode ( kind, forKey: . kind)
246
- try container. encode ( layout, forKey: . layout)
247
- case let . token( kind, leadingTrivia, trailingTrivia) :
248
- try container. encode ( id, forKey: . id)
249
- try container. encode ( kind, forKey: . tokenKind)
250
- try container. encode ( leadingTrivia, forKey: . leadingTrivia)
251
- try container. encode ( trailingTrivia, forKey: . trailingTrivia)
252
- }
253
- try container. encode ( presence, forKey: . presence)
254
- }
255
-
256
201
/// Creates a RawSyntax node that's marked missing in the source with the
257
202
/// provided kind and layout.
258
203
/// - Parameters:
@@ -389,6 +334,63 @@ extension RawSyntax {
389
334
}
390
335
}
391
336
337
+ extension RawSyntax : Codable {
338
+ /// Creates a RawSyntax from the provided Foundation Decoder.
339
+ init ( from decoder: Decoder ) throws {
340
+ let container = try decoder. container ( keyedBy: CodingKeys . self)
341
+ let id = try container. decodeIfPresent ( SyntaxNodeId . self, forKey: . id)
342
+ let omitted = try container. decodeIfPresent ( Bool . self, forKey: . omitted) ?? false
343
+
344
+ if omitted {
345
+ guard let id = id else {
346
+ throw IncrementalDecodingError . omittedNodeHasNoId
347
+ }
348
+ guard let lookupFunc = decoder. userInfo [ . omittedNodeLookupFunction] as?
349
+ ( SyntaxNodeId ) -> RawSyntax ? else {
350
+ throw IncrementalDecodingError . noLookupFunctionPassed
351
+ }
352
+ guard let lookupNode = lookupFunc ( id) else {
353
+ throw IncrementalDecodingError . nodeLookupFailed ( id)
354
+ }
355
+ self = lookupNode
356
+ return
357
+ }
358
+
359
+ let presence = try container. decode ( SourcePresence . self, forKey: . presence)
360
+ if let kind = try container. decodeIfPresent ( SyntaxKind . self, forKey: . kind) {
361
+ let layout = try container. decode ( [ RawSyntax ? ] . self, forKey: . layout)
362
+ self . init ( kind: kind, layout: layout, presence: presence, id: id)
363
+ } else {
364
+ let kind = try container. decode ( TokenKind . self, forKey: . tokenKind)
365
+ let leadingTrivia = try container. decode ( Trivia . self, forKey: . leadingTrivia)
366
+ let trailingTrivia = try container. decode ( Trivia . self, forKey: . trailingTrivia)
367
+ self . init ( kind: kind, leadingTrivia: leadingTrivia,
368
+ trailingTrivia: trailingTrivia, presence: presence, id: id)
369
+ }
370
+ if let callback = decoder. userInfo [ . rawSyntaxDecodedCallback] as?
371
+ ( RawSyntax ) -> Void {
372
+ callback ( self )
373
+ }
374
+ }
375
+
376
+ /// Encodes the RawSyntax to the provided Foundation Encoder.
377
+ func encode( to encoder: Encoder ) throws {
378
+ var container = encoder. container ( keyedBy: CodingKeys . self)
379
+ switch self . data {
380
+ case let . node( kind, layout) :
381
+ try container. encode ( id, forKey: . id)
382
+ try container. encode ( kind, forKey: . kind)
383
+ try container. encode ( layout, forKey: . layout)
384
+ case let . token( kind, leadingTrivia, trailingTrivia) :
385
+ try container. encode ( id, forKey: . id)
386
+ try container. encode ( kind, forKey: . tokenKind)
387
+ try container. encode ( leadingTrivia, forKey: . leadingTrivia)
388
+ try container. encode ( trailingTrivia, forKey: . trailingTrivia)
389
+ }
390
+ try container. encode ( presence, forKey: . presence)
391
+ }
392
+ }
393
+
392
394
extension RawSyntax : ByteTreeObjectDecodable {
393
395
enum SyntaxType : UInt8 , ByteTreeScalarDecodable {
394
396
case token = 0
0 commit comments