Skip to main content

treesitter_types/runtime/
from_node.rs

1use super::error::ParseError;
2use super::span::Span;
3
4/// Every generated struct and enum implements this.
5pub trait FromNode<'tree>: Sized {
6    fn from_node(node: tree_sitter::Node<'tree>, src: &'tree [u8]) -> Result<Self, ParseError>;
7}
8
9/// Implemented by every generated leaf type (identifiers, literals, etc.)
10pub trait LeafNode<'tree>: FromNode<'tree> {
11    /// Raw text of this node in the source, borrowed from src.
12    fn text(&self) -> &'tree str;
13}
14
15/// Implemented by every generated type that has a source location.
16pub trait Spanned {
17    fn span(&self) -> Span;
18
19    fn start(&self) -> tree_sitter::Point {
20        self.span().start
21    }
22
23    fn end(&self) -> tree_sitter::Point {
24        self.span().end
25    }
26}