@@ -454,3 +454,47 @@ def query_oneshot(self, query: str) -> Statement | None:
454454 if len (matched_statements ) == 0 :
455455 return None
456456 return matched_statements [0 ]
457+
458+ def query_identifiers (
459+ self , query : str , node : Node | None = None
460+ ) -> list [Identifier ]:
461+ """
462+ Executes a tree-sitter query to find identifiers in the file.
463+
464+ Args:
465+ identifier (str): The identifier to search for.
466+ node (Node | None): The tree-sitter node to query. If None, uses the root node of the file.
467+
468+ Returns:
469+ list[Identifier]: A list of identifiers that contain the specified identifier.
470+ """
471+ if node is None :
472+ node = self .node
473+ matched_nodes = self .parser .query_all (node , query )
474+ matched_identifiers = []
475+ for identifier in self .identifiers :
476+ for node in matched_nodes :
477+ if (
478+ identifier .node .start_byte >= node .start_byte
479+ and identifier .node .end_byte <= node .end_byte
480+ ):
481+ matched_identifiers .append (identifier )
482+ break
483+ return matched_identifiers
484+
485+ def query_identifier (
486+ self , query : str , node : Node | None = None
487+ ) -> Identifier | None :
488+ """
489+ Executes a tree-sitter oneshot query to find an identifier in the file.
490+
491+ Args:
492+ query (str): The tree-sitter oneshot query to execute.
493+
494+ Returns:
495+ Identifier | None: The first identifier that matches the query, or None if no match is found.
496+ """
497+ matched_identifiers = self .query_identifiers (query , node )
498+ if len (matched_identifiers ) == 0 :
499+ return None
500+ return matched_identifiers [0 ]
0 commit comments