32 lines
1.5 KiB
Python
32 lines
1.5 KiB
Python
#!/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)
|