Files
OnlineJudge/ast_checker/engines/node_count.py

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 []