mod nodes;
pub use nodes::AstNodes;
use oxc_allocator::{Address, GetAddress};
use oxc_ast::AstKind;
use oxc_span::{GetSpan, Span};
use oxc_syntax::{node::NodeId, scope::ScopeId};
#[derive(Debug, Clone, Copy)]
pub struct AstNode<'a> {
kind: AstKind<'a>,
scope_id: ScopeId,
}
impl<'a> AstNode<'a> {
pub(crate) fn new(kind: AstKind<'a>, scope_id: ScopeId) -> Self {
Self { kind, scope_id }
}
#[inline]
pub fn kind(&self) -> AstKind<'a> {
self.kind
}
#[inline]
pub fn id(&self) -> NodeId {
self.kind.node_id()
}
#[inline]
pub fn scope_id(&self) -> ScopeId {
self.scope_id
}
}
impl GetSpan for AstNode<'_> {
#[inline]
fn span(&self) -> Span {
self.kind.span()
}
}
impl GetAddress for AstNode<'_> {
#[inline]
fn address(&self) -> Address {
self.kind.address()
}
}