captureNames property

List<String> get captureNames

Capture names declared by every compiled query representation.

Implementation

List<String> get captureNames {
  _checkNotDisposed();
  final names = <String>{...capturesByKind.values};
  names.addAll(contextualCaptures.map((pattern) => pattern.capture));

  void addNode(TreeSitterQueryNodePattern pattern) {
    for (final alternative in pattern.alternatives) {
      addNode(alternative);
    }
    for (final child in pattern.children) {
      if (child.pattern case final pattern?) addNode(pattern);
      for (final grouped in child.group) {
        if (grouped.pattern case final pattern?) addNode(pattern);
      }
    }
    names.addAll(pattern.captures);
  }

  for (final pattern in structuralPatterns) {
    final root = pattern.root;
    if (root != null) addNode(root);
    for (final sibling in pattern.rootSiblings) {
      if (sibling.pattern case final pattern?) addNode(pattern);
    }
  }
  for (final pattern in matchPatterns) {
    final root = pattern.root;
    if (root != null) addNode(root);
    for (final sibling in pattern.rootSiblings) {
      if (sibling.pattern case final pattern?) addNode(pattern);
    }
  }
  if (declaredCaptureNames.isNotEmpty) {
    return List.unmodifiable(declaredCaptureNames.where(names.contains));
  }
  return List.unmodifiable(names);
}