grit_pattern_matcher/
analysis.rs

1use crate::{
2    context::{QueryContext, StaticDefinitions},
3    pattern::{Pattern, PatternOrPredicate, Predicate},
4};
5
6/// Determine if a provided pattern has a rewrite anywhere inside of it
7///
8/// Note this does not yet walk inside predicates and function calls
9pub fn has_rewrite<Q: QueryContext>(
10    current_pattern: &Pattern<Q>,
11    definitions: &StaticDefinitions<Q>,
12) -> bool {
13    for pattern in current_pattern.iter(definitions) {
14        if matches!(pattern, PatternOrPredicate::Pattern(Pattern::Rewrite(_))) {
15            return true;
16        }
17        if matches!(
18            pattern,
19            PatternOrPredicate::Predicate(Predicate::Rewrite(_))
20        ) {
21            return true;
22        }
23        if matches!(
24            pattern,
25            PatternOrPredicate::Predicate(Predicate::Accumulate(_))
26        ) {
27            return true;
28        }
29    }
30    false
31}