diff --git a/poc b/poc index 879aaea..428ecdb 100755 --- a/poc +++ b/poc @@ -114,8 +114,10 @@ function tty_ansi { function print_miaou_error { local source="$1" line="$2" code="$3" type="$4" payload="${5:-}" - >&2 echo -n "${source}: line ${line}: miaou_error: ${type} ${code}" - [[ -n "$payload" ]] && >&2 echo " payload: ${payload}" || >&2 echo + local message + message="${source}: line ${line}: miaou_error: ${type} ${code}" + [[ -n "$payload" ]] && message+=" payload: ${payload}" + [[ -v tmp_error ]] && miaou_debug "tmp_error=${#tmp_error[@]}" && tmp_error+=("$message") || >&2 echo "$message" } function on_error { @@ -194,7 +196,7 @@ function on_pipe { } function dump_stderr { - miaou_debug '' + miaou_debug "" tty_ansi FG_LIGHTBLUE for i in "${tmp_error[@]}"; do echo "$i"; done tty_ansi RESET @@ -273,32 +275,34 @@ function on_exit { else if [[ $code -gt 0 && ${#tmp_error[@]} -gt 0 ]]; then last_error="${tmp_error[-1]}" - miaou_debug "" - if [[ $code -eq 1 ]]; then - regex='^(.*): line ([0-9]+): (.*): unbound variable$' - if [[ "$last_error" =~ $regex ]]; then - local source line payload - - source="${BASH_REMATCH[1]}" - line="${BASH_REMATCH[2]}" - payload="${BASH_REMATCH[3]}" - error_source=("${BASH_SOURCE[@]}") - error_lineno=("${BASH_LINENO[@]}") - error_funcname=("${FUNCNAME[@]}") - unset 'error_source[0]' 'error_lineno[0]' 'error_funcname[0]' - unset 'error_source[-1]' 'error_lineno[-1]' 'error_funcname[-1]' - unset 'error_source[-1]' 'error_lineno[-1]' 'error_funcname[-1]' - error_source=("$source" "${error_source[@]}") - error_lineno=("$line" "${error_lineno[@]}") - error_funcname=("${error_funcname[@]}" '
') - - failure_code=$code - failure_type='UNBOUND_VARIABLE' - failure_payload=$payload - miaou_debug "" - fi + miaou_debug "" + + regex='^(.*): line ([0-9]+): (.*): unbound variable$' + if [[ $code -eq 1 ]] && [[ "$last_error" =~ $regex ]]; then + local source line payload + + source="${BASH_REMATCH[1]}" + line="${BASH_REMATCH[2]}" + payload="${BASH_REMATCH[3]}" + error_source=("${BASH_SOURCE[@]}") + error_lineno=("${BASH_LINENO[@]}") + error_funcname=("${FUNCNAME[@]}") + unset 'error_source[0]' 'error_lineno[0]' 'error_funcname[0]' + unset 'error_source[-1]' 'error_lineno[-1]' 'error_funcname[-1]' + unset 'error_source[-1]' 'error_lineno[-1]' 'error_funcname[-1]' + error_source=("$source" "${error_source[@]}") + error_lineno=("$line" "${error_lineno[@]}") + error_funcname=("${error_funcname[@]}" '
') + + failure_code=$code + failure_type='UNBOUND_VARIABLE' + failure_payload=$payload + + print_miaou_error "${BASH_SOURCE[1]}" "${BASH_LINENO[0]}" "${failure_code}" "${failure_type}" "${failure_payload}" + unset 'tmp_error[-2]' # replace previous last_error + miaou_debug "" fi - miaou_debug "" + miaou_debug "" fi fi