feat: add AST checker engine framework with 9 Phase 1 engines

This commit is contained in:
2026-05-25 20:39:31 -06:00
parent c36e6623bd
commit 811b065e05
7 changed files with 169 additions and 0 deletions

View File

@@ -0,0 +1,16 @@
from .base import BaseEngine
class CountNodeEngine(BaseEngine):
def check(self, tree, rule, language, mapping):
target = rule["target"]
node_type = mapping.get(target, target)
nodes = self.collect_nodes(tree.root_node, node_type)
count = len(nodes)
min_count = rule.get("min")
max_count = rule.get("max")
if min_count is not None and count < min_count:
return [rule.get("message", f"{target} 至少出现 {min_count} 次,当前 {count}")]
if max_count is not None and count > max_count:
return [rule.get("message", f"{target} 至多出现 {max_count} 次,当前 {count}")]
return []