Skip to content

Commit e749a25

Browse files
committed
Make SyntaxChildren conform to BidirectionalCollection
1 parent 8d347ae commit e749a25

File tree

6 files changed

+1970
-1690
lines changed

6 files changed

+1970
-1690
lines changed

Sources/SwiftSyntax/Syntax.swift

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,11 @@ public extension SyntaxProtocol {
114114
return SyntaxChildren(_syntaxNode)
115115
}
116116

117+
/// The index of this node in a `SyntaxChildren` collection.
118+
var index: SyntaxChildrenIndex {
119+
return SyntaxChildrenIndex(self.data.absoluteRaw.info)
120+
}
121+
117122
/// Whether or not this node is marked as `present`.
118123
var isPresent: Bool {
119124
return raw.isPresent
@@ -185,7 +190,8 @@ public extension SyntaxProtocol {
185190
guard let parent = self.parent else {
186191
return nil
187192
}
188-
for absoluteRaw in PresentRawSyntaxPreviousSiblings(_syntaxNode) {
193+
let siblings = PresentRawSyntaxChildren(parent)
194+
for absoluteRaw in siblings[..<self.index].reversed() {
189195
let child = Syntax(SyntaxData(absoluteRaw, parent: parent))
190196
if let token = child.lastToken {
191197
return token
@@ -200,7 +206,9 @@ public extension SyntaxProtocol {
200206
guard let parent = self.parent else {
201207
return nil
202208
}
203-
for absoluteRaw in PresentRawSyntaxNextSiblings(_syntaxNode) {
209+
let siblings = PresentRawSyntaxChildren(parent)
210+
let nextSiblingIndex = siblings.index(after: self.index)
211+
for absoluteRaw in siblings[nextSiblingIndex...] {
204212
let child = Syntax(SyntaxData(absoluteRaw, parent: parent))
205213
if let token = child.firstToken {
206214
return token

0 commit comments

Comments
 (0)