@@ -136,25 +136,15 @@ internal extension SyntaxProtocol {
136
136
137
137
public extension SyntaxProtocol {
138
138
/// A sequence over the `present` children of this node.
139
- var children : SyntaxChildren {
140
- return SyntaxChildren ( _syntaxNode)
139
+ func children( viewMode : SyntaxTreeViewMode ) -> SyntaxChildren {
140
+ return SyntaxChildren ( _syntaxNode, viewMode : viewMode )
141
141
}
142
142
143
143
/// The index of this node in a `SyntaxChildren` collection.
144
144
var index : SyntaxChildrenIndex {
145
145
return SyntaxChildrenIndex ( self . data. absoluteRaw. info)
146
146
}
147
147
148
- /// Whether or not this node is marked as `present`.
149
- var isPresent : Bool {
150
- return raw. isPresent
151
- }
152
-
153
- /// Whether or not this node is marked as `missing`.
154
- var isMissing : Bool {
155
- return raw. isMissing
156
- }
157
-
158
148
/// Whether or not this node is a token one.
159
149
var isToken : Bool {
160
150
return raw. isToken
@@ -191,45 +181,63 @@ public extension SyntaxProtocol {
191
181
/// Recursively walks through the tree to find the token semantically before
192
182
/// this node.
193
183
var previousToken : TokenSyntax ? {
184
+ return self . previousToken ( viewMode: . sourceAccurate)
185
+ }
186
+
187
+ /// Recursively walks through the tree to find the token semantically before
188
+ /// this node.
189
+ func previousToken( viewMode: SyntaxTreeViewMode ) -> TokenSyntax ? {
194
190
guard let parent = self . parent else {
195
191
return nil
196
192
}
197
- let siblings = PresentRawSyntaxChildren ( parent)
193
+ let siblings = NonNilRawSyntaxChildren ( parent, viewMode : viewMode )
198
194
for absoluteRaw in siblings [ ..< self . index] . reversed ( ) {
199
195
let child = Syntax ( SyntaxData ( absoluteRaw, parent: parent) )
200
- if let token = child. lastToken {
196
+ if let token = child. lastToken ( viewMode : viewMode ) {
201
197
return token
202
198
}
203
199
}
204
- return parent. previousToken
200
+ return parent. previousToken ( viewMode : viewMode )
205
201
}
206
202
207
203
/// Recursively walks through the tree to find the next token semantically
208
204
/// after this node.
209
205
var nextToken : TokenSyntax ? {
206
+ return self . nextToken ( viewMode: . sourceAccurate)
207
+ }
208
+
209
+ /// Recursively walks through the tree to find the next token semantically
210
+ /// after this node.
211
+ func nextToken( viewMode: SyntaxTreeViewMode ) -> TokenSyntax ? {
210
212
guard let parent = self . parent else {
211
213
return nil
212
214
}
213
- let siblings = PresentRawSyntaxChildren ( parent)
215
+ let siblings = NonNilRawSyntaxChildren ( parent, viewMode : viewMode )
214
216
let nextSiblingIndex = siblings. index ( after: self . index)
215
217
for absoluteRaw in siblings [ nextSiblingIndex... ] {
216
218
let child = Syntax ( SyntaxData ( absoluteRaw, parent: parent) )
217
- if let token = child. firstToken {
219
+ if let token = child. firstToken ( viewMode : viewMode ) {
218
220
return token
219
221
}
220
222
}
221
- return parent. nextToken
223
+ return parent. nextToken ( viewMode : viewMode )
222
224
}
223
225
224
- /// Returns the first token node that is part of this syntax node.
226
+ /// Returns the first token in this syntax node in the source accurate view of
227
+ /// the syntax tree.
225
228
var firstToken : TokenSyntax ? {
226
- if isMissing { return nil }
229
+ return self . firstToken ( viewMode: . sourceAccurate)
230
+ }
231
+
232
+ /// Returns the first token node that is part of this syntax node.
233
+ func firstToken( viewMode: SyntaxTreeViewMode ) -> TokenSyntax ? {
234
+ guard viewMode. shouldTraverse ( node: raw) else { return nil }
227
235
if let token = _syntaxNode. as ( TokenSyntax . self) {
228
236
return token
229
237
}
230
238
231
- for child in children {
232
- if let token = child. firstToken {
239
+ for child in children ( viewMode : viewMode ) {
240
+ if let token = child. firstToken ( viewMode : viewMode ) {
233
241
return token
234
242
}
235
243
}
@@ -238,13 +246,18 @@ public extension SyntaxProtocol {
238
246
239
247
/// Returns the last token node that is part of this syntax node.
240
248
var lastToken : TokenSyntax ? {
241
- if isMissing { return nil }
249
+ return self . lastToken ( viewMode: . sourceAccurate)
250
+ }
251
+
252
+ /// Returns the last token node that is part of this syntax node.
253
+ func lastToken( viewMode: SyntaxTreeViewMode ) -> TokenSyntax ? {
254
+ guard viewMode. shouldTraverse ( node: raw) else { return nil }
242
255
if let token = _syntaxNode. as ( TokenSyntax . self) {
243
256
return token
244
257
}
245
258
246
- for child in children. reversed ( ) {
247
- if let tok = child. lastToken {
259
+ for child in children ( viewMode : viewMode ) . reversed ( ) {
260
+ if let tok = child. lastToken ( viewMode : viewMode ) {
248
261
return tok
249
262
}
250
263
}
@@ -377,8 +390,8 @@ public extension SyntaxProtocol {
377
390
}
378
391
379
392
/// Sequence of tokens that are part of this Syntax node.
380
- var tokens : TokenSequence {
381
- return TokenSequence ( _syntaxNode)
393
+ func tokens( viewMode : SyntaxTreeViewMode ) -> TokenSequence {
394
+ return TokenSequence ( _syntaxNode, viewMode : viewMode )
382
395
}
383
396
384
397
/// Sequence of `SyntaxClassifiedRange`s for this syntax node.
@@ -466,15 +479,17 @@ public struct TokenSequence: Sequence {
466
479
public struct Iterator : IteratorProtocol {
467
480
var nextToken : TokenSyntax ?
468
481
let endPosition : AbsolutePosition
482
+ let viewMode : SyntaxTreeViewMode
469
483
470
- init ( _ token: TokenSyntax ? , endPosition: AbsolutePosition ) {
484
+ init ( _ token: TokenSyntax ? , endPosition: AbsolutePosition , viewMode : SyntaxTreeViewMode ) {
471
485
self . nextToken = token
472
486
self . endPosition = endPosition
487
+ self . viewMode = viewMode
473
488
}
474
489
475
490
public mutating func next( ) -> TokenSyntax ? {
476
491
guard let token = self . nextToken else { return nil }
477
- self . nextToken = token. nextToken
492
+ self . nextToken = token. nextToken ( viewMode : viewMode )
478
493
// Make sure we stop once we reach the end of the containing node.
479
494
if let nextTok = self . nextToken, nextTok. position >= self . endPosition {
480
495
self . nextToken = nil
@@ -484,17 +499,19 @@ public struct TokenSequence: Sequence {
484
499
}
485
500
486
501
let node : Syntax
502
+ let viewMode : SyntaxTreeViewMode
487
503
488
- public init ( _ node: Syntax ) {
504
+ public init ( _ node: Syntax , viewMode : SyntaxTreeViewMode ) {
489
505
self . node = node
506
+ self . viewMode = viewMode
490
507
}
491
508
492
509
public func makeIterator( ) -> Iterator {
493
- return Iterator ( node. firstToken, endPosition: node. endPosition)
510
+ return Iterator ( node. firstToken ( viewMode : viewMode ) , endPosition: node. endPosition, viewMode : viewMode )
494
511
}
495
512
496
513
public func reversed( ) -> ReversedTokenSequence {
497
- return ReversedTokenSequence ( node)
514
+ return ReversedTokenSequence ( node, viewMode : viewMode )
498
515
}
499
516
}
500
517
@@ -509,15 +526,17 @@ public struct ReversedTokenSequence: Sequence {
509
526
public struct Iterator : IteratorProtocol {
510
527
var nextToken : TokenSyntax ?
511
528
let startPosition : AbsolutePosition
529
+ let viewMode : SyntaxTreeViewMode
512
530
513
- init ( _ token: TokenSyntax ? , startPosition: AbsolutePosition ) {
531
+ init ( _ token: TokenSyntax ? , startPosition: AbsolutePosition , viewMode : SyntaxTreeViewMode ) {
514
532
self . nextToken = token
515
533
self . startPosition = startPosition
534
+ self . viewMode = viewMode
516
535
}
517
536
518
537
public mutating func next( ) -> TokenSyntax ? {
519
538
guard let token = self . nextToken else { return nil }
520
- self . nextToken = token. previousToken
539
+ self . nextToken = token. previousToken ( viewMode : viewMode )
521
540
// Make sure we stop once we went beyond the start of the containing node.
522
541
if let nextTok = self . nextToken, nextTok. position < self . startPosition {
523
542
self . nextToken = nil
@@ -527,17 +546,19 @@ public struct ReversedTokenSequence: Sequence {
527
546
}
528
547
529
548
let node : Syntax
549
+ let viewMode : SyntaxTreeViewMode
530
550
531
- public init ( _ node: Syntax ) {
551
+ public init ( _ node: Syntax , viewMode : SyntaxTreeViewMode ) {
532
552
self . node = node
553
+ self . viewMode = viewMode
533
554
}
534
555
535
556
public func makeIterator( ) -> Iterator {
536
- return Iterator ( node. lastToken, startPosition: node. position)
557
+ return Iterator ( node. lastToken ( viewMode : viewMode ) , startPosition: node. position, viewMode : viewMode )
537
558
}
538
559
539
560
public func reversed( ) -> TokenSequence {
540
- return TokenSequence ( node)
561
+ return TokenSequence ( node, viewMode : viewMode )
541
562
}
542
563
}
543
564
0 commit comments