Skip to main content

oak_clojure/ast/
mod.rs

1#![doc = include_str!("readme.md")]
2use crate::{language::ClojureLanguage, parser::ClojureElementType};
3use oak_core::tree::{RedLeaf, RedNode};
4
5/// Type alias for a Clojure syntax node.
6pub type ClojureNode<'a> = RedNode<'a, ClojureLanguage>;
7
8/// Type alias for a Clojure token leaf.
9pub type ClojureToken = RedLeaf<ClojureLanguage>;
10
11/// Root node of a Clojure AST.
12#[derive(Debug, Clone, Copy)]
13pub struct ClojureRoot<'a> {
14    syntax: ClojureNode<'a>,
15}
16
17impl<'a> ClojureRoot<'a> {
18    /// Attempts to cast a ClojureNode to a ClojureRoot.
19    pub fn cast(node: ClojureNode<'a>) -> Option<Self> {
20        if node.green.kind == ClojureElementType::SourceFile { Some(ClojureRoot { syntax: node }) } else { None }
21    }
22
23    /// Returns a reference to the underlying syntax node.
24    pub fn syntax(&self) -> &ClojureNode<'a> {
25        &self.syntax
26    }
27}