captureNames property
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);
}