SyntaxNode

Struct SyntaxNode 

Source
pub struct SyntaxNode<'a> { /* private fields */ }
Expand description

SyntaxNode. Untyped view of the syntax tree. Adds parent() and offset() capabilities.

This is a public wrapper around a private tracked struct. Construction only happens through tracked functions to ensure uniqueness of SyntaxNodes. Use SyntaxNode::new_root or SyntaxNode::new_root_with_offset to create root nodes.

Implementations§

Source§

impl<'db> SyntaxNode<'db>

Source

pub fn offset(self, db: &'db dyn Database) -> TextOffset

Get the offset of this syntax node from the beginning of the file.

Source

pub fn parent(self, db: &'db dyn Database) -> Option<SyntaxNode<'db>>

Get the parent syntax node, if any.

Source

pub fn grandparent(self, db: &'db dyn Database) -> Option<SyntaxNode<'db>>

Get the grandparent syntax node, if any. This uses a cached parent when available, avoiding some database lookups.

Source

pub fn is_root(self) -> bool

Check if this syntax node is the root of the syntax tree.

Source

pub fn stable_ptr(self, _db: &'db dyn Database) -> SyntaxStablePtrId<'db>

Get the stable pointer for this syntax node.

Source

pub fn raw_id(&self, db: &'db dyn Database) -> &'db SyntaxNodeId<'db>

Source

pub fn key_fields(self, db: &'db dyn Database) -> &'db [GreenId<'db>]

Get the key fields of this syntax node. These define the unique identifier of the node.

Source

pub fn file_id(&self, db: &'db dyn Database) -> FileId<'db>

Returns the file id of the file containing this node.

Source

pub fn nth_parent<'r: 'db>( &self, db: &'r dyn Database, n: usize, ) -> SyntaxNode<'db>

Returns the stable pointer of the nth parent of this stable pointer. n = 0: returns itself. n = 1: return the parent. n = 2: return the grand parent. And so on… Assumes that the nth parent exists. Panics otherwise.

Source§

impl<'a> SyntaxNode<'a>

Source

pub fn new_root( db: &'a dyn Database, file_id: FileId<'a>, green: GreenId<'a>, ) -> Self

Create a new root syntax node.

Source

pub fn new_root_with_offset( db: &'a dyn Database, file_id: FileId<'a>, green: GreenId<'a>, initial_offset: Option<TextOffset>, ) -> Self

Create a new root syntax node with a custom initial offset.

Source

pub fn width(&self, db: &dyn Database) -> TextWidth

Get the width of this syntax node.

Source

pub fn kind(&self, _db: &dyn Database) -> SyntaxKind

Get the syntax kind of this node.

Source

pub fn span(&self, db: &dyn Database) -> TextSpan

Get the span of this syntax node.

Source

pub fn text(&self, db: &'a dyn Database) -> Option<SmolStrId<'a>>

Returns the text of the token if this node is a token.

Source

pub fn green_node(&self, db: &'a dyn Database) -> &'a GreenNode<'a>

Returns the green node of the syntax node.

Source

pub fn span_without_trivia(&self, db: &dyn Database) -> TextSpan

Returns the span of the syntax node without trivia.

Source

pub fn get_terminal_token( &'a self, db: &'a dyn Database, ) -> Option<SyntaxNode<'a>>

Gets the inner token from a terminal SyntaxNode. If the given node is not a terminal, returns None.

Source

pub fn get_children(&self, db: &'a dyn Database) -> &'a [SyntaxNode<'a>]

Gets the children syntax nodes of the current node.

Source

pub fn span_start_without_trivia(&self, db: &dyn Database) -> TextOffset

Returns the start of the span of the syntax node without trivia.

Source

pub fn span_end_without_trivia(&self, db: &dyn Database) -> TextOffset

Returns the end of the span of the syntax node without trivia.

Source

pub fn lookup_offset( &self, db: &'a dyn Database, offset: TextOffset, ) -> SyntaxNode<'a>

Lookups a syntax node using an offset.

Source

pub fn lookup_position( &self, db: &'a dyn Database, position: TextPosition, ) -> SyntaxNode<'a>

Lookups a syntax node using a position.

Source

pub fn get_text(&self, db: &'a dyn Database) -> &'a str

Returns all the text under the syntax node.

Source

pub fn get_text_without_inner_commentable_children( &self, db: &dyn Database, ) -> String

Returns all the text under the syntax node. It traverses all the syntax tree of the node, but ignores functions and modules. We ignore those, because if there’s some inner functions or modules, we don’t want to get raw text of them. Comments inside them refer themselves directly, not this SyntaxNode.

Source

pub fn get_text_without_all_comment_trivia(&self, db: &dyn Database) -> String

Returns all the text of the item without comments trivia. It traverses all the syntax tree of the node.

Source

pub fn get_text_without_trivia(self, db: &'a dyn Database) -> SmolStrId<'a>

Returns all the text under the syntax node, without the outmost trivia (the leading trivia of the first token and the trailing trivia of the last token).

Note that this traverses the syntax tree, and generates a new string, so use responsibly.

Source

pub fn get_text_of_span(self, db: &'a dyn Database, span: TextSpan) -> &'a str

Returns the text under the syntax node, according to the given span.

span is assumed to be contained within the span of self.

Note that this traverses the syntax tree, and generates a new string, so use responsibly.

Source

pub fn descendants( &self, db: &'a dyn Database, ) -> impl Iterator<Item = SyntaxNode<'a>> + 'a

Traverse the subtree rooted at the current node (including the current node) in preorder.

This is a shortcut for Self::preorder paired with filtering for WalkEvent::Enter events only.

Source

pub fn preorder(&self, db: &'a dyn Database) -> Preorder<'a>

Traverse the subtree rooted at the current node (including the current node) in preorder, excluding tokens.

Source

pub fn tokens(&self, db: &'a dyn Database) -> impl Iterator<Item = Self> + 'a

Gets all the leaves of the SyntaxTree, where the self node is the root of a tree.

Source

pub fn cast<T: TypedSyntaxNode<'a>>(self, db: &'a dyn Database) -> Option<T>

Source

pub fn ancestors( &self, db: &'a dyn Database, ) -> impl Iterator<Item = SyntaxNode<'a>> + 'a

Creates an iterator that yields ancestors of this syntax node.

Source

pub fn ancestors_with_self( &self, db: &'a dyn Database, ) -> impl Iterator<Item = SyntaxNode<'a>> + 'a

Creates an iterator that yields this syntax node and walks up its ancestors.

Source

pub fn is_ancestor(&self, db: &dyn Database, node: &SyntaxNode<'_>) -> bool

Checks whether this syntax node is strictly above the given syntax node in the syntax tree.

Source

pub fn is_descendant(&self, db: &dyn Database, node: &SyntaxNode<'_>) -> bool

Checks whether this syntax node is strictly under the given syntax node in the syntax tree.

Source

pub fn is_ancestor_or_self( &self, db: &dyn Database, node: &SyntaxNode<'_>, ) -> bool

Checks whether this syntax node is or is above the given syntax node in the syntax tree.

Source

pub fn is_descendant_or_self( &self, db: &dyn Database, node: &SyntaxNode<'_>, ) -> bool

Checks whether this syntax node is or is under the given syntax node in the syntax tree.

Source

pub fn ancestor_of_kind( &self, db: &'a dyn Database, kind: SyntaxKind, ) -> Option<SyntaxNode<'a>>

Finds the first ancestor of a given kind.

Source

pub fn ancestor_of_type<T: TypedSyntaxNode<'a>>( &self, db: &'a dyn Database, ) -> Option<T>

Finds the first ancestor of a given kind and returns it in typed form.

Source

pub fn parent_of_kind( &self, db: &'a dyn Database, kind: SyntaxKind, ) -> Option<SyntaxNode<'a>>

Finds the parent of a given kind.

Source

pub fn parent_of_type<T: TypedSyntaxNode<'a>>( &self, db: &'a dyn Database, ) -> Option<T>

Finds the parent of a given kind and returns it in typed form.

Source

pub fn ancestor_of_kinds( &self, db: &'a dyn Database, kinds: &[SyntaxKind], ) -> Option<SyntaxNode<'a>>

Finds the first parent of one of the kinds.

Source

pub fn parent_kind(&self, _db: &dyn Database) -> Option<SyntaxKind>

Gets the kind of the given node’s parent if it exists.

Source

pub fn grandparent_kind(&self, db: &dyn Database) -> Option<SyntaxKind>

Gets the kind of the given node’s grandparent if it exists.

Source

pub fn grandgrandparent_kind(&self, db: &dyn Database) -> Option<SyntaxKind>

Gets the kind of the given node’s grandgrandparent if it exists.

Trait Implementations§

Source§

impl<'a> Clone for SyntaxNode<'a>

Source§

fn clone(&self) -> SyntaxNode<'a>

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<'db> Debug for SyntaxNode<'db>

Source§

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

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

impl<'db> DebugWithDb<'db> for SyntaxNode<'db>

Source§

type Db = dyn Database

Source§

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

Source§

fn debug<'me>(&'me self, db: &'db Self::Db) -> DebugWith<'me, 'db, Self::Db>
where Self: Sized + 'me,

Source§

fn into_debug<'me>(self, db: &'db Self::Db) -> DebugWith<'me, 'db, Self::Db>
where Self: Sized + 'me,

Source§

impl<'a> Hash for SyntaxNode<'a>

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<'a> PartialEq for SyntaxNode<'a>

Source§

fn eq(&self, other: &SyntaxNode<'a>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<'a> QueryAttrs<'a> for SyntaxNode<'a>

Allows querying attributes of a syntax node, any typed node which QueryAttrs is implemented for should be added here.

Source§

fn attributes_elements( &self, db: &'a dyn Database, ) -> impl Iterator<Item = Attribute<'a>>

Generic call to self.attributes(db).elements(db).
Source§

fn query_attr( &self, db: &'a dyn Database, attr: &'a str, ) -> impl Iterator<Item = Attribute<'a>>

Collect all attributes named exactly attr attached to this node.
Source§

fn find_attr( &self, db: &'a dyn Database, attr: &'a str, ) -> Option<Attribute<'a>>

Find first attribute named exactly attr attached to this node.
Source§

fn has_attr(&self, db: &'a dyn Database, attr: &'a str) -> bool

Check if this node has an attribute named exactly attr.
Source§

fn has_attr_with_arg( &self, db: &'a dyn Database, attr_name: &'a str, arg_name: &str, ) -> bool

Checks if the given object has an attribute with the given name and argument.
Source§

impl<'a> Update for SyntaxNode<'a>

Source§

unsafe fn maybe_update(old_pointer_: *mut Self, new_value_: Self) -> bool

Returns Read more
Source§

impl<'a> Copy for SyntaxNode<'a>

Source§

impl<'a> Eq for SyntaxNode<'a>

Source§

impl<'a> StructuralPartialEq for SyntaxNode<'a>

Auto Trait Implementations§

§

impl<'a> Freeze for SyntaxNode<'a>

§

impl<'a> RefUnwindSafe for SyntaxNode<'a>

§

impl<'a> Send for SyntaxNode<'a>

§

impl<'a> Sync for SyntaxNode<'a>

§

impl<'a> Unpin for SyntaxNode<'a>

§

impl<'a> UnwindSafe for SyntaxNode<'a>

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<'db, T> DebugDbUpcast<'db, T> for T
where T: ?Sized,

Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
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