pub struct NodeMatch<'t, D: Doc>(/* private fields */);Expand description
Result of a successful pattern match containing the matched node and captured variables.
NodeMatch combines an AST node with the meta-variables captured during
pattern matching. It acts like a regular Node (through [Deref]) while
also providing access to captured variables through [get_env].
§Lifetime
The lifetime 't ties the match to its source document, ensuring memory safety.
§Usage Patterns
// Use as a regular node
let text = node_match.text();
let position = node_match.start_pos();
// Access captured meta-variables
let env = node_match.get_env();
let captured_name = env.get_match("VAR_NAME").unwrap();
// Generate replacement code
let edit = node_match.replace_by("new code with $VAR_NAME");§Type Parameters
't- Lifetime tied to the source documentD: Doc- Document type containing the source and language info
Implementations§
Source§impl<'tree, D: Doc> NodeMatch<'tree, D>
impl<'tree, D: Doc> NodeMatch<'tree, D>
pub const fn new(node: Node<'tree, D>, env: MetaVarEnv<'tree, D>) -> Self
pub const fn get_node(&self) -> &Node<'tree, D>
Sourcepub const fn get_env(&self) -> &MetaVarEnv<'tree, D>
pub const fn get_env(&self) -> &MetaVarEnv<'tree, D>
Returns the populated MetaVarEnv for this match.
pub const fn get_env_mut(&mut self) -> &mut MetaVarEnv<'tree, D>
Methods from Deref<Target = Node<'tree, D>>§
pub fn get_doc(&self) -> &'r D
pub fn node_id(&self) -> usize
pub fn is_leaf(&self) -> bool
Sourcepub fn is_named_leaf(&self) -> bool
pub fn is_named_leaf(&self) -> bool
if has no named children.
N.B. it is different from is_named && is_leaf
pub fn is_error(&self) -> bool
pub fn kind(&self) -> Cow<'_, str>
pub fn kind_id(&self) -> u16
pub fn is_named(&self) -> bool
pub fn is_missing(&self) -> bool
Sourcepub fn start_pos(&self) -> Position
pub fn start_pos(&self) -> Position
Nodes’ start position in terms of zero-based rows and columns.
pub fn text(&self) -> Cow<'r, str>
pub fn lang(&self) -> &'r D::Lang
Sourcepub fn get_inner_node(&self) -> D::Node<'r>
pub fn get_inner_node(&self) -> D::Node<'r>
the underlying tree-sitter Node
pub fn root(&self) -> &'r Root<D>
pub fn matches<M: Matcher>(&self, m: M) -> bool
pub fn inside<M: Matcher>(&self, m: M) -> bool
pub fn has<M: Matcher>(&self, m: M) -> bool
pub fn precedes<M: Matcher>(&self, m: M) -> bool
pub fn follows<M: Matcher>(&self, m: M) -> bool
pub fn parent(&self) -> Option<Self>
pub fn children(&self) -> impl ExactSizeIterator<Item = Node<'r, D>> + '_
pub fn child(&self, nth: usize) -> Option<Self>
pub fn field(&self, name: &str) -> Option<Self>
pub fn child_by_field_id(&self, field_id: u16) -> Option<Self>
pub fn field_children( &self, name: &str, ) -> impl Iterator<Item = Node<'r, D>> + '_
Sourcepub fn ancestors(&self) -> impl Iterator<Item = Node<'r, D>> + '_
pub fn ancestors(&self) -> impl Iterator<Item = Node<'r, D>> + '_
Returns all ancestors nodes of self.
Using cursor is overkill here because adjust cursor is too expensive.
pub fn next(&self) -> Option<Self>
Sourcepub fn next_all(&self) -> impl Iterator<Item = Node<'r, D>> + '_
pub fn next_all(&self) -> impl Iterator<Item = Node<'r, D>> + '_
Returns all sibling nodes next to self.
pub fn prev(&self) -> Option<Self>
pub fn prev_all(&self) -> impl Iterator<Item = Node<'r, D>> + '_
pub fn dfs<'s>(&'s self) -> impl Iterator<Item = Node<'r, D>> + 's
pub fn find<M: Matcher>(&self, pat: M) -> Option<NodeMatch<'r, D>>
pub fn find_all<'s, M: Matcher + 's>( &'s self, pat: M, ) -> impl Iterator<Item = NodeMatch<'r, D>> + 's
pub fn replace<M: Matcher, R: Replacer<D>>( &self, matcher: M, replacer: R, ) -> Option<Edit<<D as Doc>::Source>>
pub fn after(&self) -> Edit<<D as Doc>::Source>
pub fn before(&self) -> Edit<<D as Doc>::Source>
pub fn append(&self) -> Edit<<D as Doc>::Source>
pub fn prepend(&self) -> Edit<<D as Doc>::Source>
Trait Implementations§
Source§impl<'tree, D: Doc> Borrow<Node<'tree, D>> for NodeMatch<'tree, D>
NodeMatch is an immutable view to Node
impl<'tree, D: Doc> Borrow<Node<'tree, D>> for NodeMatch<'tree, D>
NodeMatch is an immutable view to Node