treesitter-types 0.2.0

Generate typed Rust structs from any tree-sitter node-types.json
Documentation
use super::span::Span;

#[derive(Debug, thiserror::Error)]
pub enum ParseError {
    #[error("missing required field '{field}' at {span:?}")]
    MissingField { field: &'static str, span: Span },

    #[error("unexpected node kind '{kind}' at {span:?}")]
    UnexpectedKind { kind: String, span: Span },

    #[error("UTF-8 error in source")]
    Utf8(#[from] std::str::Utf8Error),

    #[error("tree-sitter parse failed (returned None)")]
    ParseFailed,
}

impl ParseError {
    pub fn missing_field(field: &'static str, node: tree_sitter::Node<'_>) -> Self {
        Self::MissingField {
            field,
            span: Span::from(node),
        }
    }

    pub fn unexpected_kind(kind: &str, node: tree_sitter::Node<'_>) -> Self {
        Self::UnexpectedKind {
            kind: kind.to_owned(),
            span: Span::from(node),
        }
    }
}