pub struct SyntaxNode<'db>(/* private fields */);Implementations§
Source§impl SyntaxNode<'static>
impl SyntaxNode<'static>
pub fn ingredient(zalsa: &Zalsa) -> &IngredientImpl<Self>
Source§impl<'db> SyntaxNode<'db>
impl<'db> SyntaxNode<'db>
pub fn new<Db_, T0: Lookup<SyntaxNodeLongId<'db>> + Hash>( db: &'db Db_, long: T0, ) -> Self
pub fn long<Db_>(self, db: &'db Db_) -> &'db SyntaxNodeLongId<'db>
Source§impl SyntaxNode<'_>
impl SyntaxNode<'_>
Sourcepub fn default_debug_fmt(this: Self, f: &mut Formatter<'_>) -> Resultwhere
for<'db> SyntaxNodeLongId<'db>: Debug,
pub fn default_debug_fmt(this: Self, f: &mut Formatter<'_>) -> Resultwhere
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>
impl<'db> SyntaxNode<'db>
pub fn from_intern_id(intern_id: Id) -> Self
pub fn as_intern_id(self) -> Id
Source§impl<'a> SyntaxNode<'a>
impl<'a> SyntaxNode<'a>
pub fn new_root( db: &'a dyn Database, file_id: FileId<'a>, green: GreenId<'a>, ) -> Self
pub fn new_root_with_offset( db: &'a dyn Database, file_id: FileId<'a>, green: GreenId<'a>, initial_offset: Option<TextOffset>, ) -> Self
pub fn new_with_inner( db: &'a dyn Database, green: GreenId<'a>, offset: TextOffset, parent: Option<SyntaxNode<'a>>, stable_ptr: SyntaxStablePtrId<'a>, ) -> Self
pub fn offset(&self, db: &dyn Database) -> TextOffset
pub fn width(&self, db: &dyn Database) -> TextWidth
pub fn kind(&self, db: &dyn Database) -> SyntaxKind
pub fn span(&self, db: &dyn Database) -> TextSpan
Sourcepub fn text(&self, db: &'a dyn Database) -> Option<SmolStrId<'a>>
pub fn text(&self, db: &'a dyn Database) -> Option<SmolStrId<'a>>
Returns the text of the token if this node is a token.
Sourcepub fn green_node(&self, db: &'a dyn Database) -> &'a GreenNode<'a>
pub fn green_node(&self, db: &'a dyn Database) -> &'a GreenNode<'a>
Returns the green node of the syntax node.
Sourcepub fn span_without_trivia(&self, db: &dyn Database) -> TextSpan
pub fn span_without_trivia(&self, db: &dyn Database) -> TextSpan
Returns the span of the syntax node without trivia.
pub fn parent(&self, db: &'a dyn Database) -> Option<SyntaxNode<'a>>
pub fn stable_ptr(&self, db: &'a dyn Database) -> SyntaxStablePtrId<'a>
Sourcepub fn get_terminal_token(
&'a self,
db: &'a dyn Database,
) -> Option<SyntaxNode<'a>>
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.
Sourcepub fn get_children(&self, db: &'a dyn Database) -> &'a [SyntaxNode<'a>]
pub fn get_children(&self, db: &'a dyn Database) -> &'a [SyntaxNode<'a>]
Gets the children syntax nodes of the current node.
Sourcepub fn span_start_without_trivia(&self, db: &dyn Database) -> TextOffset
pub fn span_start_without_trivia(&self, db: &dyn Database) -> TextOffset
Returns the start of the span of the syntax node without trivia.
Sourcepub fn span_end_without_trivia(&self, db: &dyn Database) -> TextOffset
pub fn span_end_without_trivia(&self, db: &dyn Database) -> TextOffset
Returns the end of the span of the syntax node without trivia.
Sourcepub fn lookup_offset(
&self,
db: &'a dyn Database,
offset: TextOffset,
) -> SyntaxNode<'a>
pub fn lookup_offset( &self, db: &'a dyn Database, offset: TextOffset, ) -> SyntaxNode<'a>
Lookups a syntax node using an offset.
Sourcepub fn lookup_position(
&self,
db: &'a dyn Database,
position: TextPosition,
) -> SyntaxNode<'a>
pub fn lookup_position( &self, db: &'a dyn Database, position: TextPosition, ) -> SyntaxNode<'a>
Lookups a syntax node using a position.
Sourcepub fn get_text(&self, db: &'a dyn Database) -> &'a str
pub fn get_text(&self, db: &'a dyn Database) -> &'a str
Returns all the text under the syntax node.
Sourcepub fn get_text_without_inner_commentable_children(
&self,
db: &dyn Database,
) -> String
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.
Sourcepub fn get_text_without_all_comment_trivia(&self, db: &dyn Database) -> String
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.
Sourcepub fn get_text_without_trivia(self, db: &'a dyn Database) -> SmolStrId<'a>
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.
Sourcepub fn get_text_of_span(self, db: &'a dyn Database, span: TextSpan) -> &'a str
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.
Sourcepub fn descendants(
&self,
db: &'a dyn Database,
) -> impl Iterator<Item = SyntaxNode<'a>> + 'a
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.
Sourcepub fn preorder(&self, db: &'a dyn Database) -> Preorder<'a> ⓘ
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.
Sourcepub fn tokens(&self, db: &'a dyn Database) -> impl Iterator<Item = Self> + 'a
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.
Sourcepub fn cast<T: TypedSyntaxNode<'a>>(self, db: &'a dyn Database) -> Option<T>
pub fn cast<T: TypedSyntaxNode<'a>>(self, db: &'a dyn Database) -> Option<T>
Mirror of TypedSyntaxNode::cast.
Sourcepub fn ancestors(
&self,
db: &'a dyn Database,
) -> impl Iterator<Item = SyntaxNode<'a>> + 'a
pub fn ancestors( &self, db: &'a dyn Database, ) -> impl Iterator<Item = SyntaxNode<'a>> + 'a
Creates an iterator that yields ancestors of this syntax node.
Sourcepub fn ancestors_with_self(
&self,
db: &'a dyn Database,
) -> impl Iterator<Item = SyntaxNode<'a>> + 'a
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.
Sourcepub fn is_ancestor(&self, db: &dyn Database, node: &SyntaxNode<'_>) -> bool
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.
Sourcepub fn is_descendant(&self, db: &dyn Database, node: &SyntaxNode<'_>) -> bool
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.
Sourcepub fn is_ancestor_or_self(
&self,
db: &dyn Database,
node: &SyntaxNode<'_>,
) -> bool
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.
Sourcepub fn is_descendant_or_self(
&self,
db: &dyn Database,
node: &SyntaxNode<'_>,
) -> bool
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.
Sourcepub fn ancestor_of_kind(
&self,
db: &'a dyn Database,
kind: SyntaxKind,
) -> Option<SyntaxNode<'a>>
pub fn ancestor_of_kind( &self, db: &'a dyn Database, kind: SyntaxKind, ) -> Option<SyntaxNode<'a>>
Finds the first ancestor of a given kind.
Sourcepub fn ancestor_of_type<T: TypedSyntaxNode<'a>>(
&self,
db: &'a dyn Database,
) -> Option<T>
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.
Sourcepub fn parent_of_kind(
&self,
db: &'a dyn Database,
kind: SyntaxKind,
) -> Option<SyntaxNode<'a>>
pub fn parent_of_kind( &self, db: &'a dyn Database, kind: SyntaxKind, ) -> Option<SyntaxNode<'a>>
Finds the parent of a given kind.
Sourcepub fn parent_of_type<T: TypedSyntaxNode<'a>>(
&self,
db: &'a dyn Database,
) -> Option<T>
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.
Sourcepub fn ancestor_of_kinds(
&self,
db: &'a dyn Database,
kinds: &[SyntaxKind],
) -> Option<SyntaxNode<'a>>
pub fn ancestor_of_kinds( &self, db: &'a dyn Database, kinds: &[SyntaxKind], ) -> Option<SyntaxNode<'a>>
Finds the first parent of one of the kinds.
Sourcepub fn parent_kind(&self, db: &dyn Database) -> Option<SyntaxKind>
pub fn parent_kind(&self, db: &dyn Database) -> Option<SyntaxKind>
Gets the kind of the given node’s parent if it exists.
Sourcepub fn grandparent_kind(&self, db: &dyn Database) -> Option<SyntaxKind>
pub fn grandparent_kind(&self, db: &dyn Database) -> Option<SyntaxKind>
Gets the kind of the given node’s grandparent if it exists.
Sourcepub fn grandgrandparent_kind(&self, db: &dyn Database) -> Option<SyntaxKind>
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> Clone for SyntaxNode<'db>
impl<'db> Clone for SyntaxNode<'db>
Source§fn clone(&self) -> SyntaxNode<'db>
fn clone(&self) -> SyntaxNode<'db>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Configuration for SyntaxNode<'static>
impl Configuration for SyntaxNode<'static>
const LOCATION: Location
const DEBUG_NAME: &'static str = "SyntaxNode"
const REVISIONS: NonZeroUsize
Source§type Fields<'a> = (SyntaxNodeLongId<'a>,)
type Fields<'a> = (SyntaxNodeLongId<'a>,)
Source§type Struct<'db> = SyntaxNode<'db>
type Struct<'db> = SyntaxNode<'db>
Source§fn serialize<S: Serializer>(
fields: &Self::Fields<'_>,
serializer: S,
) -> Result<S::Ok, S::Error>
fn serialize<S: Serializer>( fields: &Self::Fields<'_>, serializer: S, ) -> Result<S::Ok, S::Error>
serde. Read moreSource§fn deserialize<'de, D: Deserializer<'de>>(
deserializer: D,
) -> Result<Self::Fields<'static>, D::Error>
fn deserialize<'de, D: Deserializer<'de>>( deserializer: D, ) -> Result<Self::Fields<'static>, D::Error>
serde. Read moreSource§impl<'db> Debug for SyntaxNode<'db>
impl<'db> Debug for SyntaxNode<'db>
Source§impl<'db> DebugWithDb<'db> for SyntaxNode<'db>
impl<'db> DebugWithDb<'db> for SyntaxNode<'db>
type Db = dyn Database
fn fmt(&self, f: &mut Formatter<'_>, db: &'db Self::Db) -> Result
fn debug<'me>(&'me self, db: &'db Self::Db) -> DebugWith<'me, 'db, Self::Db>where
Self: Sized + 'me,
fn into_debug<'me>(self, db: &'db Self::Db) -> DebugWith<'me, 'db, Self::Db>where
Self: Sized + 'me,
Source§impl<'db> HasJar for SyntaxNode<'db>
impl<'db> HasJar for SyntaxNode<'db>
Source§impl<'db> Hash for SyntaxNode<'db>
impl<'db> Hash for SyntaxNode<'db>
Source§impl<'db> Intern<'db, SyntaxNode<'db>> for SyntaxNodeLongId<'db>
impl<'db> Intern<'db, SyntaxNode<'db>> for SyntaxNodeLongId<'db>
fn intern(self, db: &'db dyn Database) -> SyntaxNode<'db>
Source§impl<'db> PartialEq for SyntaxNode<'db>
impl<'db> PartialEq for SyntaxNode<'db>
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.
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>>
fn attributes_elements( &self, db: &'a dyn Database, ) -> impl Iterator<Item = Attribute<'a>>
self.attributes(db).elements(db).Source§fn query_attr(
&self,
db: &'a dyn Database,
attr: &'a str,
) -> impl Iterator<Item = Attribute<'a>>
fn query_attr( &self, db: &'a dyn Database, attr: &'a str, ) -> impl Iterator<Item = Attribute<'a>>
attr attached to this node.Source§fn find_attr(
&self,
db: &'a dyn Database,
attr: &'a str,
) -> Option<Attribute<'a>>
fn find_attr( &self, db: &'a dyn Database, attr: &'a str, ) -> Option<Attribute<'a>>
attr attached to this node.Source§impl<'db> SalsaStructInDb for SyntaxNode<'db>
impl<'db> SalsaStructInDb for SyntaxNode<'db>
type MemoIngredientMap = MemoIngredientSingletonIndex
Source§fn lookup_ingredient_index(aux: &Zalsa) -> IngredientIndices
fn lookup_ingredient_index(aux: &Zalsa) -> IngredientIndices
Source§fn entries(zalsa: &Zalsa) -> impl Iterator<Item = DatabaseKeyIndex> + '_
fn entries(zalsa: &Zalsa) -> impl Iterator<Item = DatabaseKeyIndex> + '_
Source§impl<'db> Update for SyntaxNode<'db>
impl<'db> Update for SyntaxNode<'db>
impl<'db> Copy for SyntaxNode<'db>
impl<'db> Eq for SyntaxNode<'db>
impl<'db> Send for SyntaxNode<'db>
impl<'db> StructuralPartialEq for SyntaxNode<'db>
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> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<'db, T> DebugDbUpcast<'db, T> for Twhere
T: ?Sized,
impl<'db, T> DebugDbUpcast<'db, T> for Twhere
T: ?Sized,
fn debug_db_upcast(&'db self) -> &'db T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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