#!/usr/bin/env python3 """Проверка: подсказка «Выбор [0-N]» в каждом меню kit должна совпадать с числом пунктов. Пункты считаются по строкам box (с учётом переносов через «\\»). Смысл проверки: мы добавляем в меню свои пункты — однажды подсказка осталась «0-10» при 11 пунктах, и человек не мог выбрать последний. """ import re import sys import pathlib path = pathlib.Path(sys.argv[1] if len(sys.argv) > 1 else "scripts/kit.sh") text = path.read_text(encoding="utf-8").replace("\\\n", "") lines = text.splitlines() bad = 0 for i, line in enumerate(lines): m = re.search(r'\bbox\s+"([^"]+)"(.*)$', line) if not m: continue items = re.findall(r'"(\d+)\.\s', m.group(2)) maxn = max((int(x) for x in items), default=0) prompt = None for j in range(i + 1, min(i + 120, len(lines))): pm = re.search(r'ask_num\s+"Выбор \[0-(\d+)\]', lines[j]) if pm: prompt = int(pm.group(1)) break if prompt != maxn: print(f"! меню «{m.group(1)}»: пунктов {maxn}, а подсказка «Выбор [0-{prompt}]»", file=sys.stderr) bad += 1 print(f"меню проверены: {len(lines) and sum(1 for l in lines if 'box \"' in l)} · рассинхронов: {bad}") sys.exit(1 if bad else 0)