1mod nodes;
2
3pub use nodes::AstNodes;
4
5use oxc_allocator::{Address, GetAddress};
6use oxc_ast::AstKind;
7use oxc_span::{GetSpan, Span};
8use oxc_syntax::{node::NodeId, scope::ScopeId};
9
10#[derive(Debug, Clone, Copy)]
12pub struct AstNode<'a> {
13 kind: AstKind<'a>,
15
16 scope_id: ScopeId,
18}
19
20impl<'a> AstNode<'a> {
21 pub(crate) fn new(kind: AstKind<'a>, scope_id: ScopeId) -> Self {
22 Self { kind, scope_id }
23 }
24
25 #[inline]
27 pub fn kind(&self) -> AstKind<'a> {
28 self.kind
29 }
30
31 #[inline]
33 pub fn id(&self) -> NodeId {
34 self.kind.node_id()
35 }
36
37 #[inline]
43 pub fn scope_id(&self) -> ScopeId {
44 self.scope_id
45 }
46}
47
48impl GetSpan for AstNode<'_> {
49 #[inline]
50 fn span(&self) -> Span {
51 self.kind.span()
52 }
53}
54
55impl GetAddress for AstNode<'_> {
56 #[inline]
57 fn address(&self) -> Address {
58 self.kind.address()
59 }
60}