Skip to main content

HirNode

Enum HirNode 

Source
pub enum HirNode<'hir> {
    Undefined,
    Root(&'hir HirRoot),
    Text(&'hir HirText<'hir>),
    Internal(&'hir HirInternal),
    Scope(&'hir HirScope<'hir>),
    File(&'hir HirFile),
    Ident(&'hir HirIdent<'hir>),
}

Variants§

§

Undefined

§

Root(&'hir HirRoot)

§

Text(&'hir HirText<'hir>)

§

Internal(&'hir HirInternal)

§

Scope(&'hir HirScope<'hir>)

§

File(&'hir HirFile)

§

Ident(&'hir HirIdent<'hir>)

Implementations§

Source§

impl<'hir> HirNode<'hir>

Source

pub fn format(&self, _unit: CompileUnit<'hir>) -> String

Source

pub fn base(&self) -> Option<&HirBase>

Get the base information for any HIR node

Source

pub fn kind(&self) -> HirKind

Get the kind of this HIR node

Source

pub fn is_kind(&self, kind: HirKind) -> bool

Check if this node is of a specific kind

Source

pub fn field_id(&self) -> u16

Get the field ID of this node (used in structured tree navigation)

For example, in a function declaration, the name field might have field_id=1 and the body field_id=2. Panics on Undefined node.

Source

pub fn child_ids(&self) -> &[HirId]

Get child IDs of this node

Source

pub fn children(&self, unit: &CompileUnit<'hir>) -> SmallVec<[HirNode<'hir>; 8]>

Get children nodes of this node - uses SmallVec to avoid heap allocation for small child counts

Source

pub fn kind_id(&self) -> u16

Get tree-sitter kind ID for this node (distinct from HirKind)

Source

pub fn id(&self) -> HirId

Get unique HirId for this node within its compilation unit. Panics on Undefined.

Source

pub fn start_byte(&self) -> usize

Get byte offset where this node starts in source. Panics on Undefined.

Source

pub fn end_byte(&self) -> usize

Get byte offset where this node ends (exclusive). Panics on Undefined.

Source

pub fn child_count(&self) -> usize

Get count of direct children

Source

pub fn parent(&self) -> Option<HirId>

Get parent HirId if it exists

Source

pub fn child_by_field( &self, unit: &CompileUnit<'hir>, field_id: u16, ) -> Option<HirNode<'hir>>

Find optional child with matching field ID

Source

pub fn child_by_kind( &self, unit: &CompileUnit<'hir>, kind_id: u16, ) -> Option<HirNode<'hir>>

Source

pub fn ident_symbol_by_field( &self, unit: &CompileUnit<'hir>, field_id: u16, ) -> Option<&'hir Symbol>

Returns the symbol referenced by the identifier within a specific child field.

Source

pub fn ident_symbol(&self, unit: &CompileUnit<'hir>) -> Option<&'hir Symbol>

Returns the ident symbol if any. Prefers finding an identifier that has a symbol set (useful for scoped paths where the target identifier has the resolved symbol).

Source

pub fn child_by_field_recursive( &self, unit: &CompileUnit<'hir>, field_id: u16, ) -> Option<HirNode<'hir>>

Recursively search down the tree for a child with matching field ID. Keeps going deeper until it finds a match or reaches a leaf node.

Source

pub fn find_ident( &self, unit: &CompileUnit<'hir>, ) -> Option<&'hir HirIdent<'hir>>

Find the identifier for the first child node that is an identifier or interior node. Recursively searches for identifiers within interior nodes.

Source

pub fn find_symboled_ident( &self, unit: &CompileUnit<'hir>, ) -> Option<&'hir HirIdent<'hir>>

Find the deepest/rightmost identifier that has a symbol set. This is useful for call expressions where we want the resolved callee, not just the first identifier in a scoped path like crate::module::func.

Source

pub fn find_text(&self, unit: &CompileUnit<'hir>) -> Option<&str>

Find the first text node’s content in children (for keywords like “self”).

Source

pub fn ident_by_field( &self, unit: &CompileUnit<'hir>, field_id: u16, ) -> Option<&'hir HirIdent<'hir>>

Find identifier for the first child with a matching field ID. For scoped types like crate::module::Type, returns Type (the direct type_identifier child). For generic types like Repository<User>, recurses into the type child to get Repository.

Source

pub fn as_root(&self) -> Option<&'hir HirRoot>

Source

pub fn as_text(&self) -> Option<&'hir HirText<'hir>>

Source

pub fn as_scope(&self) -> Option<&'hir HirScope<'hir>>

Source

pub fn scope_and_ident_by_field( &self, unit: &CompileUnit<'hir>, field_id: u16, ) -> Option<(&'hir HirScope<'hir>, &'hir HirIdent<'hir>)>

Get scope and child identifier by field - convenience method combining as_scope() and ident_by_field()

Source

pub fn collect_by_field_kind( &self, unit: &CompileUnit<'hir>, field_id: u16, ) -> Vec<&'hir HirIdent<'hir>>

Collect identifiers by field kind matching a specific field ID

Source

pub fn as_file(&self) -> Option<&'hir HirFile>

Source

pub fn as_internal(&self) -> Option<&'hir HirInternal>

Source

pub fn as_ident(&self) -> Option<&'hir HirIdent<'hir>>

Source

pub fn collect_idents( &self, unit: &CompileUnit<'hir>, ) -> Vec<&'hir HirIdent<'hir>>

Recursively collect all identifier nodes under this node

Source

pub fn is_trivia(&self) -> bool

Check if node is trivia (whitespace, comment, etc.)

Source

pub fn set_block_id(&self, block_id: BlockId)

Set the block ID on the symbol associated with this node. Works for both HirScope (gets symbol from scope) and HirIdent (has direct symbol). Does nothing if no symbol is associated or if the symbol is a primitive (shared globally).

Source

pub fn opt_symbol(&self) -> Option<&'hir Symbol>

Get the symbol associated with this node if any. Works for both HirScope and HirIdent nodes.

Trait Implementations§

Source§

impl<'a> ArenaInsert<'a> for HirNode<'a>

Source§

fn insert_into(self, arena: &'a ArenaInner) -> &'a Self

Source§

impl<'a> ArenaInsertWithId<'a> for HirNode<'a>

Source§

fn insert_with_id(self, arena: &'a ArenaInner, id: usize) -> &'a Self

Source§

impl<'hir> Clone for HirNode<'hir>

Source§

fn clone(&self) -> HirNode<'hir>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'hir> Debug for HirNode<'hir>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'hir> Default for HirNode<'hir>

Source§

fn default() -> HirNode<'hir>

Returns the “default value” for a type. Read more
Source§

impl<'hir> Copy for HirNode<'hir>

Auto Trait Implementations§

§

impl<'hir> Freeze for HirNode<'hir>

§

impl<'hir> !RefUnwindSafe for HirNode<'hir>

§

impl<'hir> Send for HirNode<'hir>

§

impl<'hir> Sync for HirNode<'hir>

§

impl<'hir> Unpin for HirNode<'hir>

§

impl<'hir> !UnwindSafe for HirNode<'hir>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more