// Copyright © 2015 GitHub. All rights reserved. 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 } var children: AnyRandomAccessCollection { return AnyRandomAccessCollection(ChildrenCollection(node: self, count: ts_node_child_count, child: ts_node_child)) } var namedChildren: AnyRandomAccessCollection { 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) } } }