Skip to main content

galvan_parse/
lib.rs

1#[cfg(feature = "exec")]
2pub mod exec;
3
4use galvan_files::Source;
5use thiserror::Error;
6
7pub use tree_sitter::*;
8
9#[derive(Debug, Error)]
10#[error("Could not parse source: {path}")]
11pub struct ParseError { path: Box<str> }
12pub type ParseTree = Tree;
13pub type ParseResult = Result<ParseTree, ParseError>;
14
15pub fn parse_source(source: &Source) -> ParseResult {
16    let mut parser = Parser::new();
17    parser
18        .set_language(&tree_sitter_galvan::language())
19        .expect("Error loading Galvan grammar!");
20
21    let content = source.content();
22    parser.parse(content, None).ok_or_else(|| { 
23        let file = match source {
24            Source::File { path, content: _, canonical_name: _ } => path.to_string_lossy(),
25            Source::Str(_) => "{input string}".into(),
26            Source::Missing => "{missing}".into(),
27            Source::Builtin => "{builtin}".into(),
28
29        };
30        ParseError { path: file.into() } })
31}