@@ -114,6 +114,11 @@ public extension SyntaxProtocol {
114
114
return SyntaxChildren ( _syntaxNode)
115
115
}
116
116
117
+ /// The index of this node in a `SyntaxChildren` collection.
118
+ var index : SyntaxChildrenIndex {
119
+ return SyntaxChildrenIndex ( self . data. absoluteRaw. info)
120
+ }
121
+
117
122
/// Whether or not this node is marked as `present`.
118
123
var isPresent : Bool {
119
124
return raw. isPresent
@@ -163,7 +168,8 @@ public extension SyntaxProtocol {
163
168
guard let parent = self . parent else {
164
169
return nil
165
170
}
166
- for absoluteRaw in PresentRawSyntaxPreviousSiblings ( _syntaxNode) {
171
+ let siblings = PresentRawSyntaxChildren ( parent)
172
+ for absoluteRaw in siblings [ ..< self . index] . reversed ( ) {
167
173
let child = Syntax ( SyntaxData ( absoluteRaw, parent: parent) )
168
174
if let token = child. lastToken {
169
175
return token
@@ -178,7 +184,9 @@ public extension SyntaxProtocol {
178
184
guard let parent = self . parent else {
179
185
return nil
180
186
}
181
- for absoluteRaw in PresentRawSyntaxNextSiblings ( _syntaxNode) {
187
+ let siblings = PresentRawSyntaxChildren ( parent)
188
+ let nextSiblingIndex = siblings. index ( after: self . index)
189
+ for absoluteRaw in siblings [ nextSiblingIndex... ] {
182
190
let child = Syntax ( SyntaxData ( absoluteRaw, parent: parent) )
183
191
if let token = child. firstToken {
184
192
return token
0 commit comments