Coverage for patterns / common.py: 100%
18 statements
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-08 15:04 -0800
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-08 15:04 -0800
1"""Pattern detection utilities for code quality."""
3from __future__ import annotations
5from typing import TYPE_CHECKING
7if TYPE_CHECKING:
8 from tree_sitter import Language, Node
11def create_query(language: Language, source: str):
12 """Create a tree-sitter Query with error handling."""
13 from tree_sitter import Query
15 try:
16 return Query(language, source)
17 except Exception as e:
18 raise ValueError(f"Invalid query: {e}") from e
21def run_captures(query, root: Node) -> list[tuple[Node, str]]:
22 """Query captures for a root node and return flat list of (node, capture_name)."""
23 from tree_sitter import QueryCursor
25 if root.child_count == 0:
26 return []
27 cursor = QueryCursor(query)
28 result = []
29 for capture_name, node in cursor.captures(root).items():
30 for n in node:
31 result.append((n, capture_name))
32 return result