Add bash completion for pkica
Static completion rules for all pkica commands, options and option values, plus unit, interactive (tmux) and --help reconciliation tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
81404a24cc
commit
11283c573a
@@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env bash
|
||||
# Сверка таблиц pkica.bash-completion с реальным выводом `pkica ... --help`.
|
||||
# Запуск (из WSL/Linux): bash tests/check_tree.sh [путь к pkica]
|
||||
# Без аргумента используется pkica из PATH.
|
||||
|
||||
root=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)
|
||||
pkica=${1:-$(command -v pkica)}
|
||||
[[ -x $pkica ]] || { echo "pkica not found: укажите путь аргументом"; exit 1; }
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
source "$root/pkica.bash-completion" || exit 1
|
||||
|
||||
fail=0 nodes=0
|
||||
|
||||
walk()
|
||||
{
|
||||
local path=$1 help cmds opts expected_cmds expected_opts sub
|
||||
help=$("$pkica" ${path#pkica} --help 2>&1)
|
||||
nodes=$((nodes + 1))
|
||||
|
||||
cmds=$(awk '/^Commands:/{f=1;next} f&&/^$/{f=0} f&&/^ [a-z]/{print $1}' <<<"$help" |
|
||||
tr '\n' ' ' | sed 's/ $//')
|
||||
opts=$(awk '/^Options:/{f=1;next} /^(Commands:)?$/{f=0}
|
||||
f&&/^ -/{s=$1; gsub(/-\?\|/,"",s); if($2 ~ /^</) s=s "="; printf "%s ", s}' <<<"$help" |
|
||||
sed 's/ $//')
|
||||
|
||||
expected_cmds=${_pkica_cmds[$path]-}
|
||||
expected_opts=${_pkica_opts[$path]:--h|--help}
|
||||
|
||||
if [[ $cmds != "$expected_cmds" ]]; then
|
||||
fail=$((fail + 1))
|
||||
printf 'MISMATCH commands [%s]\n help: %s\n completion: %s\n' "$path" "$cmds" "$expected_cmds"
|
||||
fi
|
||||
if [[ $opts != "$expected_opts" ]]; then
|
||||
fail=$((fail + 1))
|
||||
printf 'MISMATCH options [%s]\n help: %s\n completion: %s\n' "$path" "$opts" "$expected_opts"
|
||||
fi
|
||||
|
||||
for sub in $cmds; do
|
||||
walk "$path $sub"
|
||||
done
|
||||
}
|
||||
|
||||
walk pkica
|
||||
|
||||
# Узлы в таблицах, которых нет в утилите.
|
||||
for key in "${!_pkica_cmds[@]}" "${!_pkica_opts[@]}"; do
|
||||
"$pkica" ${key#pkica} --help 2>&1 | grep -q "^Usage: $key " || {
|
||||
fail=$((fail + 1))
|
||||
printf 'UNKNOWN node in completion: [%s]\n' "$key"
|
||||
}
|
||||
done
|
||||
|
||||
echo "checked nodes: $nodes, mismatches: $fail"
|
||||
((fail == 0))
|
||||
Reference in New Issue
Block a user