use ropey::Rope;
use tree_sitter as ts;
pub use ts::TextProvider;
pub struct TextProviderRope<'a>(pub &'a Rope);
impl<'a> TextProvider<&'a [u8]> for &'a TextProviderRope<'a> {
type I = ChunksBytes<'a>;
fn text(&mut self, node: tree_sitter::Node) -> Self::I {
ChunksBytes(self.0.byte_slice(node.byte_range()).chunks())
}
}
pub struct ChunksBytes<'a>(pub ropey::iter::Chunks<'a>);
impl<'a> Iterator for ChunksBytes<'a> {
type Item = &'a [u8];
fn next(&mut self) -> Option<Self::Item> {
self.0.next().map(|s| s.as_bytes())
}
}