1
1
mirror of https://github.com/github/semantic.git synced 2024-12-19 21:01:35 +03:00
semantic/prototype/doubt-difftool/TSNode.swift

36 lines
936 B
Swift
Raw Normal View History

// Copyright © 2015 GitHub. All rights reserved.
2015-10-28 23:55:28 +03:00
typealias TSDocument = COpaquePointer
extension TSNode {
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))
}
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)
}
}
}