SyntaxNode

Struct SyntaxNode 

Source
pub struct SyntaxNode<'db>(/* private fields */);

Implementations§

Source§

impl SyntaxNode<'static>

Source

pub fn ingredient(zalsa: &Zalsa) -> &IngredientImpl<Self>

Source§

impl<'db> SyntaxNode<'db>

Source

pub fn new<Db_, T0: Lookup<SyntaxNodeLongId<'db>> + Hash>( db: &'db Db_, long: T0, ) -> Self
where Db_: ?Sized + Database, SyntaxNodeLongId<'db>: HashEqLike<T0>,

Source

pub fn long<Db_>(self, db: &'db Db_) -> &'db SyntaxNodeLongId<'db>
where Db_: ?Sized + Database,

Source§

impl SyntaxNode<'_>

Source

pub fn default_debug_fmt(this: Self, f: &mut Formatter<'_>) -> Result
where for<'db> SyntaxNodeLongId<'db>: Debug,

Default debug formatting for this struct (may be useful if you define your own Debug impl)

Source§

impl<'db> SyntaxNode<'db>

Source

pub fn from_intern_id(intern_id: Id) -> Self

Source

pub fn as_intern_id(self) -> Id

Source§

impl<'a> SyntaxNode<'a>

Source

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

Source

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

Source

pub fn new_with_inner( db: &'a dyn Database, green: GreenId<'a>, offset: TextOffset, parent: Option<SyntaxNode<'a>>, stable_ptr: SyntaxStablePtrId<'a>, ) -> Self

Source

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

Source

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

Source

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

Source

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

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 parent(&self, db: &'a dyn Database) -> Option<SyntaxNode<'a>>

Source

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

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

Source§

fn as_id(&self) -> Id

Source§

impl<'db> Clone for SyntaxNode<'db>

Source§

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

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 Configuration for SyntaxNode<'static>

Source§

const LOCATION: Location

Source§

const DEBUG_NAME: &'static str = "SyntaxNode"

Source§

const PERSIST: bool = false

Whether this struct should be persisted with the database.
Source§

const REVISIONS: NonZeroUsize

Source§

type Fields<'a> = (SyntaxNodeLongId<'a>,)

The fields of the struct being interned.
Source§

type Struct<'db> = SyntaxNode<'db>

The end user struct
Source§

fn serialize<S: Serializer>( fields: &Self::Fields<'_>, serializer: S, ) -> Result<S::Ok, S::Error>

Serialize the fields using serde. Read more
Source§

fn deserialize<'de, D: Deserializer<'de>>( deserializer: D, ) -> Result<Self::Fields<'static>, D::Error>

Deserialize the fields using serde. Read more
Source§

fn heap_size(_value: &Self::Fields<'_>) -> Option<usize>

Returns the size of any heap allocations in the output value, in bytes.
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<'db> FromId for SyntaxNode<'db>

Source§

fn from_id(id: Id) -> Self

Source§

impl<'db> HasJar for SyntaxNode<'db>

Source§

const KIND: JarKind = zalsa_::JarKind::Struct

The [JarKind] for Self::Jar.
Source§

type Jar = JarImpl<SyntaxNode<'static>>

The [Jar] associated with this ingredient.
Source§

impl<'db> Hash for SyntaxNode<'db>

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<'db> Intern<'db, SyntaxNode<'db>> for SyntaxNodeLongId<'db>

Source§

fn intern(self, db: &'db dyn Database) -> SyntaxNode<'db>

Source§

impl<'db> PartialEq for SyntaxNode<'db>

Source§

fn eq(&self, other: &SyntaxNode<'db>) -> 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<'db> SalsaStructInDb for SyntaxNode<'db>

Source§

type MemoIngredientMap = MemoIngredientSingletonIndex

Source§

fn lookup_ingredient_index(aux: &Zalsa) -> IngredientIndices

Lookup or create ingredient indices. Read more
Source§

fn entries(zalsa: &Zalsa) -> impl Iterator<Item = DatabaseKeyIndex> + '_

Returns the IDs of any instances of this struct in the database.
Source§

fn cast(id: Id, type_id: TypeId) -> Option<Self>

Plumbing to support nested salsa supertypes. Read more
Source§

unsafe fn memo_table( zalsa: &Zalsa, id: Id, current_revision: Revision, ) -> MemoTableWithTypes<'_>

Return the memo table associated with id. Read more
Source§

impl<'db> Update for SyntaxNode<'db>

Source§

unsafe fn maybe_update(old_pointer: *mut Self, new_value: Self) -> bool

Returns Read more
Source§

impl<'db> Copy for SyntaxNode<'db>

Source§

impl<'db> Eq for SyntaxNode<'db>

Source§

impl<'db> Send for SyntaxNode<'db>

Source§

impl<'db> StructuralPartialEq for SyntaxNode<'db>

Source§

impl<'db> Sync for SyntaxNode<'db>

Auto Trait Implementations§

§

impl<'db> Freeze for SyntaxNode<'db>

§

impl<'db> RefUnwindSafe for SyntaxNode<'db>

§

impl<'db> Unpin for SyntaxNode<'db>

§

impl<'db> UnwindSafe for SyntaxNode<'db>

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