17 lines
697 B
Python
17 lines
697 B
Python
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 []
|