pvincent 2 weeks ago
parent
commit
7ffd7d3171
  1. 73
      poc

73
poc

@ -4,7 +4,39 @@
MIAOU_BASH_ERROR=$(mktemp -t "$(basename "$0").XXXXXXXX" --tmpdir="/run/user/$(id -u)") MIAOU_BASH_ERROR=$(mktemp -t "$(basename "$0").XXXXXXXX" --tmpdir="/run/user/$(id -u)")
MIAOU_DEBUG=${MIAOU_DEBUG:-false} MIAOU_DEBUG=${MIAOU_DEBUG:-false}
readonly MIAOU_BASH_ERROR MIAOU_DEBUG
declare -A ANSI
ANSI[RESET]=0
ANSI[STYLE_ITALIC]=3
ANSI[STYLE_BOLD]=1
ANSI[STYLE_UNDERLINE]=4
ANSI[STYLE_STRIKETHROUGH]=9
ANSI[FG_BLACK]=30
ANSI[FG_RED]=31
ANSI[FG_GREEN]=32
ANSI[FG_YELLOW]=33
ANSI[FG_BLUE]=34
ANSI[FG_PURPLE]=35
ANSI[FG_CYAN]=36
ANSI[FG_WHITE]=37
ANSI[FG_GRAY]=90
ANSI[FG_LIGHTBLUE]=94
ANSI[FG_MAGENTA]=95
ANSI[BG_BLACK]=40
ANSI[BG_RED]=41
ANSI[BG_GREEN]=42
ANSI[BG_YELLOW]=43
ANSI[BG_BLUE]=44
ANSI[BG_PURPLE]=45
ANSI[BG_CYAN]=46
ANSI[BG_WHITE]=47
ANSI[BG_GRAY]=90
ANSI[BG_MAGENTA]=95
readonly MIAOU_BASH_ERROR MIAOU_DEBUG ANSI
## functions ## functions
@ -20,8 +52,12 @@ function miaou_debug {
} }
function tty_ansi { function tty_ansi {
fg="${1:-}"
[[ -n $fg ]] && >/dev/tty echo -ne "\e[${fg}m" || true
local code="$1"
if [[ -v ANSI[$code] ]]; then
>/dev/tty echo -ne "\e[${ANSI[$code]}m"
else
>&2 echo "unknown ansi key: <$code>"
fi
} }
function print_miaou_error { function print_miaou_error {
@ -75,6 +111,7 @@ function on_pipe {
lineno=${BASH_REMATCH[2]} lineno=${BASH_REMATCH[2]}
failure_code=${BASH_REMATCH[3]} failure_code=${BASH_REMATCH[3]}
failure_type="SUBSHELL_ERROR" failure_type="SUBSHELL_ERROR"
failure_payload='...'
error_source=("$source" "${error_source[@]}") error_source=("$source" "${error_source[@]}")
error_lineno=("$lineno" "${error_lineno[@]}") error_lineno=("$lineno" "${error_lineno[@]}")
error_funcname=("${error_funcname[@]}" '<main>') error_funcname=("${error_funcname[@]}" '<main>')
@ -89,28 +126,26 @@ function on_pipe {
function dump_stderr { function dump_stderr {
miaou_debug --stderr-- miaou_debug --stderr--
mapfile -t tmp_error <"$MIAOU_BASH_ERROR" mapfile -t tmp_error <"$MIAOU_BASH_ERROR"
tty_ansi 94
tty_ansi FG_LIGHTBLUE
for i in "${tmp_error[@]}"; do echo "$i"; done for i in "${tmp_error[@]}"; do echo "$i"; done
tty_ansi 0
tty_ansi RESET
miaou_debug --end of stderr-- miaou_debug --end of stderr--
} }
function dump_failure { function dump_failure {
local i local i
miaou_debug --tty error box-- miaou_debug --tty error box--
tty_ansi 95
length_box=$((${#failure_type} + ${#failure_code} + (2 * 2) + 1))
tty_ansi FG_MAGENTA
length_box=$((${#failure_type} + ${#failure_code} + (2 * 2) + 2))
[[ -v failure_payload ]] && length_box=$((length_box + ${#failure_payload} + (2 * 2) + 1))
echo -n '╔' echo -n '╔'
for i in $(seq 1 $length_box); do echo -n '═'; done for i in $(seq 1 $length_box); do echo -n '═'; done
echo '╗' echo '╗'
echo -n "║ $failure_type"
if [[ -v failure_payload ]]; then
tty_ansi 94
echo -n " $failure_payload"
fi
tty_ansi 33
echo -n "║ $failure_type "
[[ -v failure_payload ]] && echo -n ' ' && tty_ansi FG_CYAN && echo -n " $failure_payload "
tty_ansi FG_YELLOW
printf "%5s" " $failure_code " printf "%5s" " $failure_code "
tty_ansi 95
tty_ansi FG_MAGENTA
echo "║" echo "║"
echo -n '╚' echo -n '╚'
for i in $(seq 1 4); do echo -n '═'; done for i in $(seq 1 4); do echo -n '═'; done
@ -118,7 +153,7 @@ function dump_failure {
for i in $(seq $((i + 2)) $length_box); do echo -n '═'; done for i in $(seq $((i + 2)) $length_box); do echo -n '═'; done
echo '╝' echo '╝'
echo " ║" echo " ║"
tty_ansi 0
tty_ansi RESET
miaou_debug --end of tty error box-- miaou_debug --end of tty error box--
} }
@ -126,15 +161,15 @@ function dump_stacktrace {
miaou_debug --stacktrace ${#error_source[@]}-- miaou_debug --stacktrace ${#error_source[@]}--
local i source lineno funcname local i source lineno funcname
for i in "${!error_source[@]}"; do for i in "${!error_source[@]}"; do
tty_ansi 95
tty_ansi FG_MAGENTA
echo -n " ╟─⟶" echo -n " ╟─⟶"
[[ $i -gt 0 ]] && tty_ansi 90
tty_ansi 3
[[ $i -gt 0 ]] && tty_ansi FG_GRAY
tty_ansi STYLE_ITALIC
source="${error_source[$i]}" source="${error_source[$i]}"
lineno="${error_lineno[$i]}" lineno="${error_lineno[$i]}"
funcname="${error_funcname[$i]}" funcname="${error_funcname[$i]}"
printf "%40s:%.4s" "$source" "$lineno" printf "%40s:%.4s" "$source" "$lineno"
tty_ansi 0
tty_ansi RESET
printf " \t%s" "$funcname" printf " \t%s" "$funcname"
echo echo
done done

Loading…
Cancel
Save