2015-10-28 22:22:21 +03:00
|
|
|
// Copyright © 2015 GitHub. All rights reserved.
|
|
|
|
|
2015-10-28 23:55:28 +03:00
|
|
|
typealias TSDocument = COpaquePointer
|
|
|
|
|
2015-10-28 22:22:21 +03:00
|
|
|
extension TSNode {
|
2015-10-28 23:55:42 +03:00
|
|
|
func name(document: TSDocument) throws -> String {
|
|
|
|
struct E: ErrorType {}
|
|
|
|
guard let name = String.fromCString(ts_node_name(self, document)) else { throw E() }
|
|
|
|
return name
|
|
|
|
}
|
|
|
|
|
2015-10-28 23:28:37 +03:00
|
|
|
var children: AnyRandomAccessCollection<TSNode> {
|
|
|
|
return AnyRandomAccessCollection(ChildrenCollection(node: self, count: ts_node_child_count, child: ts_node_child))
|
|
|
|
}
|
|
|
|
|
|
|
|
var namedChildren: AnyRandomAccessCollection<TSNode> {
|
|
|
|
return AnyRandomAccessCollection(ChildrenCollection(node: self, count: ts_node_named_child_count, child: ts_node_named_child))
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2015-10-28 22:22:21 +03:00
|
|
|
private struct ChildrenCollection: CollectionType {
|
|
|
|
let node: TSNode
|
|
|
|
let count: TSNode -> Int
|
|
|
|
let child: (TSNode, Int) -> TSNode
|
|
|
|
|
|
|
|
subscript (index: Int) -> TSNode {
|
|
|
|
return child(node, index)
|
|
|
|
}
|
|
|
|
|
|
|
|
let startIndex = 0
|
|
|
|
var endIndex: Int {
|
|
|
|
return count(node)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|