satisfiesTextPredicates method

bool satisfiesTextPredicates(
  1. TreeSitterQuery query, {
  2. String? source,
  3. TreeSitterQueryTextProvider? textProvider,
})

Applies only Tree-sitter's built-in text predicates to this match.

Property and general predicates are metadata and intentionally do not participate, matching Rust QueryMatch::satisfies_text_predicates.

Implementation

bool satisfiesTextPredicates(
  TreeSitterQuery query, {
  String? source,
  TreeSitterQueryTextProvider? textProvider,
}) {
  query._checkPatternIndex(patternIndex);
  final pattern = <TreeSitterStructuralQueryPattern>[
    ...query.structuralPatterns,
    ...query.matchPatterns,
  ].where((candidate) => candidate.patternIndex == patternIndex).firstOrNull;
  if (pattern == null || pattern.predicates.isEmpty) return true;

  final bindings = <String, List<_TreeSitterBoundNode>>{};
  for (final capture in captures) {
    final ancestors = <TreeSitterNode>[];
    for (
      var parent = capture.node.parent;
      parent != null;
      parent = parent.parent
    ) {
      ancestors.insert(0, parent);
    }
    bindings
        .putIfAbsent(capture.name, () => <_TreeSitterBoundNode>[])
        .add(_TreeSitterBoundNode(capture.node, ancestors));
  }
  return query._textPredicatesMatch(
    pattern.predicates,
    bindings,
    source,
    textProvider,
  );
}