Skip to content

Commit

Permalink
Move to a LanguageLayerQueryCursor.Target struct
Browse files Browse the repository at this point in the history
  • Loading branch information
mattmassicotte committed Sep 11, 2024
1 parent b31cf6f commit a11390b
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 34 deletions.
10 changes: 3 additions & 7 deletions Sources/SwiftTreeSitterLayer/LanguageLayer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -229,13 +229,9 @@ extension LanguageLayer: Queryable {
throw LanguageLayerError.noRootNode
}

return LanguageLayerQueryCursor(
query: query,
tree: tree,
set: set,
depth: depth,
languageName: languageName
)
let target = LanguageLayerQueryCursor.Target(tree: tree, query: query, depth: depth, name: languageName)

return LanguageLayerQueryCursor(target: target, set: set)
}

public func executeQuery(_ queryDef: Query.Definition, in set: IndexSet) throws -> LanguageTreeQueryCursor {
Expand Down
39 changes: 16 additions & 23 deletions Sources/SwiftTreeSitterLayer/LanguageLayerQueryCursor.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,34 +4,29 @@ import SwiftTreeSitter
import enum SwiftTreeSitter.Predicate

public struct LanguageLayerQueryCursor {
public struct Target {
let tree: Tree
let query: Query
let depth: Int
let name: String
}

private let ranges: [NSRange]
private let query: Query
private let tree: Tree
public let target: Target
private var activeCursor: QueryCursor?
private var index: Int
public let depth: Int
public let languageName: String

init(query: Query, tree: Tree, set: IndexSet, depth: Int, languageName: String) {
self.tree = tree
self.query = query
init(target: LanguageLayerQueryCursor.Target, set: IndexSet) {
self.target = target
self.ranges = set.rangeView.compactMap({ NSRange($0) })
self.index = ranges.index(before: ranges.startIndex)
self.depth = depth
self.languageName = languageName

advanceRange()
}

init(target: LanguageTreeQueryCursor.Target, set: IndexSet) {
self.init(
query: target.1,
tree: target.0,
set: set,
depth: target.2,
languageName: target.3
)
}
// init(query: Query, tree: Tree, set: IndexSet, depth: Int, languageName: String) {
//
// }
}

extension LanguageLayerQueryCursor: Sequence, IteratorProtocol {
Expand All @@ -46,7 +41,7 @@ extension LanguageLayerQueryCursor: Sequence, IteratorProtocol {

let range = ranges[index]

self.activeCursor = query.execute(in: tree, depth: depth)
self.activeCursor = target.query.execute(in: target.tree, depth: target.depth)

self.activeCursor?.setRange(range)
}
Expand All @@ -66,14 +61,12 @@ extension LanguageLayerQueryCursor: Sequence, IteratorProtocol {
}

public struct LanguageTreeQueryCursor {
typealias Target = (Tree, Query, Int, String)

private var activeCursor: LanguageLayerQueryCursor?
private let targets: [Target]
private let targets: [LanguageLayerQueryCursor.Target]
private var index: Int
private var set: IndexSet

init(set: IndexSet, targets: [Target]) {
init(set: IndexSet, targets: [LanguageLayerQueryCursor.Target]) {
self.set = set
self.targets = targets
self.index = targets.index(before: targets.startIndex)
Expand Down
8 changes: 4 additions & 4 deletions Sources/SwiftTreeSitterLayer/Snapshots.swift
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,12 @@ public struct LanguageLayerSnapshot: Sendable {
return set
}

func queryTarget(for queryDef: Query.Definition) throws -> LanguageTreeQueryCursor.Target {
func queryTarget(for queryDef: Query.Definition) throws -> LanguageLayerQueryCursor.Target {
guard let query = data.queries[queryDef] else {
throw LanguageLayerError.queryUnavailable(data.name, queryDef)
}

return (tree, query, depth, data.name)
return .init(tree: tree, query: query, depth: depth, name: data.name)
}
}

Expand Down Expand Up @@ -75,8 +75,8 @@ public struct LanguageLayerTreeSnapshot: Sendable {
}
}

private func queryTargets(in set: IndexSet, for queryDef: Query.Definition) throws -> [LanguageTreeQueryCursor.Target] {
var targets = [LanguageTreeQueryCursor.Target]()
private func queryTargets(in set: IndexSet, for queryDef: Query.Definition) throws -> [LanguageLayerQueryCursor.Target] {
var targets = [LanguageLayerQueryCursor.Target]()

try enumerateSnapshots(in: set) { snapshot in
let target = try snapshot.queryTarget(for: queryDef)
Expand Down

0 comments on commit a11390b

Please sign in to comment.