Skip to main content

panproto_parse/
error.rs

1//! Error types for full-AST parsing and emission.
2
3use miette::Diagnostic;
4
5/// Errors from full-AST parse and emit operations.
6#[non_exhaustive]
7#[derive(Debug, thiserror::Error, Diagnostic)]
8pub enum ParseError {
9    /// Tree-sitter failed to parse the source file.
10    #[error("tree-sitter parse failed for {path}")]
11    TreeSitterParse {
12        /// The file path that failed to parse.
13        path: String,
14    },
15
16    /// The source file's language could not be detected.
17    #[error("unknown language for file extension: {extension}")]
18    UnknownLanguage {
19        /// The unrecognized file extension.
20        extension: String,
21    },
22
23    /// Schema construction failed during AST walking.
24    #[error("schema construction failed: {reason}")]
25    SchemaConstruction {
26        /// Description of the construction failure.
27        reason: String,
28    },
29
30    /// Emission failed when converting a schema back to source text.
31    #[error("emit failed for protocol {protocol}: {reason}")]
32    EmitFailed {
33        /// The protocol being emitted.
34        protocol: String,
35        /// Description of the emit failure.
36        reason: String,
37    },
38
39    /// Theory extraction from grammar metadata failed.
40    #[error("theory extraction failed: {reason}")]
41    TheoryExtraction {
42        /// Description of the extraction failure.
43        reason: String,
44    },
45
46    /// JSON deserialization of node-types.json failed.
47    #[error("failed to parse node-types.json: {source}")]
48    NodeTypesJson {
49        /// The underlying JSON parse error.
50        #[source]
51        source: serde_json::Error,
52    },
53
54    /// A protocol error propagated from panproto-protocols.
55    #[error(transparent)]
56    Protocol(#[from] panproto_protocols::ProtocolError),
57
58    /// A tags-query failed to compile against a grammar.
59    ///
60    /// Raised when `tree-sitter-tags` rejects the grammar's `queries/tags.scm`
61    /// (or a project-level override) for structural reasons: malformed
62    /// S-expression, unknown capture name outside the tags-query vocabulary,
63    /// or regex syntax error in a `#strip!` predicate.
64    #[error("scope-detection query failed to compile: {reason}")]
65    ScopeQueryCompile {
66        /// Underlying compiler error message.
67        reason: String,
68    },
69}