ast_grep_core/matcher/
text.rs1use super::Matcher;
2use crate::meta_var::MetaVarEnv;
3use crate::Doc;
4use crate::Node;
5
6use bit_set::BitSet;
7use regex::{Error as RegexError, Regex};
8use thiserror::Error;
9
10use std::borrow::Cow;
11
12#[derive(Debug, Error)]
13pub enum RegexMatcherError {
14 #[error("Parsing text matcher fails.")]
15 Regex(#[from] RegexError),
16}
17
18#[derive(Clone)]
19pub struct RegexMatcher {
20 regex: Regex,
21}
22
23impl RegexMatcher {
24 pub fn try_new(text: &str) -> Result<Self, RegexMatcherError> {
25 Ok(RegexMatcher {
26 regex: Regex::new(text)?,
27 })
28 }
29}
30
31impl Matcher for RegexMatcher {
32 fn match_node_with_env<'tree, D: Doc>(
33 &self,
34 node: Node<'tree, D>,
35 _env: &mut Cow<MetaVarEnv<'tree, D>>,
36 ) -> Option<Node<'tree, D>> {
37 self.regex.is_match(&node.text()).then_some(node)
38 }
39
40 fn potential_kinds(&self) -> Option<BitSet> {
41 None
42 }
43}