Skip to main content

treesitter_types/runtime/
error.rs

1use super::span::Span;
2
3#[derive(Debug, thiserror::Error)]
4pub enum ParseError {
5    #[error("missing required field '{field}' at {span:?}")]
6    MissingField { field: &'static str, span: Span },
7
8    #[error("unexpected node kind '{kind}' at {span:?}")]
9    UnexpectedKind { kind: String, span: Span },
10
11    #[error("UTF-8 error in source")]
12    Utf8(#[from] std::str::Utf8Error),
13
14    #[error("tree-sitter parse failed (returned None)")]
15    ParseFailed,
16}
17
18impl ParseError {
19    pub fn missing_field(field: &'static str, node: tree_sitter::Node<'_>) -> Self {
20        Self::MissingField {
21            field,
22            span: Span::from(node),
23        }
24    }
25
26    pub fn unexpected_kind(kind: &str, node: tree_sitter::Node<'_>) -> Self {
27        Self::UnexpectedKind {
28            kind: kind.to_owned(),
29            span: Span::from(node),
30        }
31    }
32}