@@ -135,9 +135,14 @@ internal extension SyntaxProtocol {
135
135
}
136
136
137
137
public extension SyntaxProtocol {
138
- /// A sequence over the `present` children of this node.
138
+ @ available ( * , deprecated , message : " Use children(viewMode:) instead " )
139
139
var children : SyntaxChildren {
140
- return SyntaxChildren ( _syntaxNode)
140
+ return children ( viewMode: . sourceAccurate)
141
+ }
142
+
143
+ /// A sequence over the `present` children of this node.
144
+ func children( viewMode: SyntaxTreeViewMode ) -> SyntaxChildren {
145
+ return SyntaxChildren ( _syntaxNode, viewMode: viewMode)
141
146
}
142
147
143
148
/// The index of this node in a `SyntaxChildren` collection.
@@ -147,12 +152,12 @@ public extension SyntaxProtocol {
147
152
148
153
/// Whether or not this node is marked as `present`.
149
154
var isPresent : Bool {
150
- return raw. isPresent
155
+ return raw. presence == . present
151
156
}
152
157
153
158
/// Whether or not this node is marked as `missing`.
154
159
var isMissing : Bool {
155
- return raw. isMissing
160
+ return raw. presence == . missing
156
161
}
157
162
158
163
/// Whether or not this node is a token one.
@@ -191,45 +196,63 @@ public extension SyntaxProtocol {
191
196
/// Recursively walks through the tree to find the token semantically before
192
197
/// this node.
193
198
var previousToken : TokenSyntax ? {
199
+ return self . previousToken ( viewMode: . sourceAccurate)
200
+ }
201
+
202
+ /// Recursively walks through the tree to find the token semantically before
203
+ /// this node.
204
+ func previousToken( viewMode: SyntaxTreeViewMode ) -> TokenSyntax ? {
194
205
guard let parent = self . parent else {
195
206
return nil
196
207
}
197
- let siblings = PresentRawSyntaxChildren ( parent)
208
+ let siblings = NonNilRawSyntaxChildren ( parent, viewMode : viewMode )
198
209
for absoluteRaw in siblings [ ..< self . index] . reversed ( ) {
199
210
let child = Syntax ( SyntaxData ( absoluteRaw, parent: parent) )
200
- if let token = child. lastToken {
211
+ if let token = child. lastToken ( viewMode : viewMode ) {
201
212
return token
202
213
}
203
214
}
204
- return parent. previousToken
215
+ return parent. previousToken ( viewMode : viewMode )
205
216
}
206
217
207
218
/// Recursively walks through the tree to find the next token semantically
208
219
/// after this node.
209
220
var nextToken : TokenSyntax ? {
221
+ return self . nextToken ( viewMode: . sourceAccurate)
222
+ }
223
+
224
+ /// Recursively walks through the tree to find the next token semantically
225
+ /// after this node.
226
+ func nextToken( viewMode: SyntaxTreeViewMode ) -> TokenSyntax ? {
210
227
guard let parent = self . parent else {
211
228
return nil
212
229
}
213
- let siblings = PresentRawSyntaxChildren ( parent)
230
+ let siblings = NonNilRawSyntaxChildren ( parent, viewMode : viewMode )
214
231
let nextSiblingIndex = siblings. index ( after: self . index)
215
232
for absoluteRaw in siblings [ nextSiblingIndex... ] {
216
233
let child = Syntax ( SyntaxData ( absoluteRaw, parent: parent) )
217
- if let token = child. firstToken {
234
+ if let token = child. firstToken ( viewMode : viewMode ) {
218
235
return token
219
236
}
220
237
}
221
- return parent. nextToken
238
+ return parent. nextToken ( viewMode : viewMode )
222
239
}
223
240
224
- /// Returns the first token node that is part of this syntax node.
241
+ /// Returns the first token in this syntax node in the source accurate view of
242
+ /// the syntax tree.
225
243
var firstToken : TokenSyntax ? {
226
- if isMissing { return nil }
244
+ return self . firstToken ( viewMode: . sourceAccurate)
245
+ }
246
+
247
+ /// Returns the first token node that is part of this syntax node.
248
+ func firstToken( viewMode: SyntaxTreeViewMode ) -> TokenSyntax ? {
249
+ guard viewMode. shouldTraverse ( node: raw) else { return nil }
227
250
if let token = _syntaxNode. as ( TokenSyntax . self) {
228
251
return token
229
252
}
230
253
231
- for child in children {
232
- if let token = child. firstToken {
254
+ for child in children ( viewMode : viewMode ) {
255
+ if let token = child. firstToken ( viewMode : viewMode ) {
233
256
return token
234
257
}
235
258
}
@@ -238,13 +261,18 @@ public extension SyntaxProtocol {
238
261
239
262
/// Returns the last token node that is part of this syntax node.
240
263
var lastToken : TokenSyntax ? {
241
- if isMissing { return nil }
264
+ return self . lastToken ( viewMode: . sourceAccurate)
265
+ }
266
+
267
+ /// Returns the last token node that is part of this syntax node.
268
+ func lastToken( viewMode: SyntaxTreeViewMode ) -> TokenSyntax ? {
269
+ guard viewMode. shouldTraverse ( node: raw) else { return nil }
242
270
if let token = _syntaxNode. as ( TokenSyntax . self) {
243
271
return token
244
272
}
245
273
246
- for child in children. reversed ( ) {
247
- if let tok = child. lastToken {
274
+ for child in children ( viewMode : viewMode ) . reversed ( ) {
275
+ if let tok = child. lastToken ( viewMode : viewMode ) {
248
276
return tok
249
277
}
250
278
}
@@ -377,8 +405,14 @@ public extension SyntaxProtocol {
377
405
}
378
406
379
407
/// Sequence of tokens that are part of this Syntax node.
408
+ @available ( * , deprecated, message: " Use tokens(viewMode:) instead " )
380
409
var tokens : TokenSequence {
381
- return TokenSequence ( _syntaxNode)
410
+ return tokens ( viewMode: . sourceAccurate)
411
+ }
412
+
413
+ /// Sequence of tokens that are part of this Syntax node.
414
+ func tokens( viewMode: SyntaxTreeViewMode ) -> TokenSequence {
415
+ return TokenSequence ( _syntaxNode, viewMode: viewMode)
382
416
}
383
417
384
418
/// Sequence of `SyntaxClassifiedRange`s for this syntax node.
@@ -466,15 +500,17 @@ public struct TokenSequence: Sequence {
466
500
public struct Iterator : IteratorProtocol {
467
501
var nextToken : TokenSyntax ?
468
502
let endPosition : AbsolutePosition
503
+ let viewMode : SyntaxTreeViewMode
469
504
470
- init ( _ token: TokenSyntax ? , endPosition: AbsolutePosition ) {
505
+ init ( _ token: TokenSyntax ? , endPosition: AbsolutePosition , viewMode : SyntaxTreeViewMode ) {
471
506
self . nextToken = token
472
507
self . endPosition = endPosition
508
+ self . viewMode = viewMode
473
509
}
474
510
475
511
public mutating func next( ) -> TokenSyntax ? {
476
512
guard let token = self . nextToken else { return nil }
477
- self . nextToken = token. nextToken
513
+ self . nextToken = token. nextToken ( viewMode : viewMode )
478
514
// Make sure we stop once we reach the end of the containing node.
479
515
if let nextTok = self . nextToken, nextTok. position >= self . endPosition {
480
516
self . nextToken = nil
@@ -484,17 +520,19 @@ public struct TokenSequence: Sequence {
484
520
}
485
521
486
522
let node : Syntax
523
+ let viewMode : SyntaxTreeViewMode
487
524
488
- public init ( _ node: Syntax ) {
525
+ public init ( _ node: Syntax , viewMode : SyntaxTreeViewMode ) {
489
526
self . node = node
527
+ self . viewMode = viewMode
490
528
}
491
529
492
530
public func makeIterator( ) -> Iterator {
493
- return Iterator ( node. firstToken, endPosition: node. endPosition)
531
+ return Iterator ( node. firstToken ( viewMode : viewMode ) , endPosition: node. endPosition, viewMode : viewMode )
494
532
}
495
533
496
534
public func reversed( ) -> ReversedTokenSequence {
497
- return ReversedTokenSequence ( node)
535
+ return ReversedTokenSequence ( node, viewMode : viewMode )
498
536
}
499
537
}
500
538
@@ -509,15 +547,17 @@ public struct ReversedTokenSequence: Sequence {
509
547
public struct Iterator : IteratorProtocol {
510
548
var nextToken : TokenSyntax ?
511
549
let startPosition : AbsolutePosition
550
+ let viewMode : SyntaxTreeViewMode
512
551
513
- init ( _ token: TokenSyntax ? , startPosition: AbsolutePosition ) {
552
+ init ( _ token: TokenSyntax ? , startPosition: AbsolutePosition , viewMode : SyntaxTreeViewMode ) {
514
553
self . nextToken = token
515
554
self . startPosition = startPosition
555
+ self . viewMode = viewMode
516
556
}
517
557
518
558
public mutating func next( ) -> TokenSyntax ? {
519
559
guard let token = self . nextToken else { return nil }
520
- self . nextToken = token. previousToken
560
+ self . nextToken = token. previousToken ( viewMode : viewMode )
521
561
// Make sure we stop once we went beyond the start of the containing node.
522
562
if let nextTok = self . nextToken, nextTok. position < self . startPosition {
523
563
self . nextToken = nil
@@ -527,17 +567,19 @@ public struct ReversedTokenSequence: Sequence {
527
567
}
528
568
529
569
let node : Syntax
570
+ let viewMode : SyntaxTreeViewMode
530
571
531
- public init ( _ node: Syntax ) {
572
+ public init ( _ node: Syntax , viewMode : SyntaxTreeViewMode ) {
532
573
self . node = node
574
+ self . viewMode = viewMode
533
575
}
534
576
535
577
public func makeIterator( ) -> Iterator {
536
- return Iterator ( node. lastToken, startPosition: node. position)
578
+ return Iterator ( node. lastToken ( viewMode : viewMode ) , startPosition: node. position, viewMode : viewMode )
537
579
}
538
580
539
581
public func reversed( ) -> TokenSequence {
540
- return TokenSequence ( node)
582
+ return TokenSequence ( node, viewMode : viewMode )
541
583
}
542
584
}
543
585
0 commit comments