From 6c89d16fe68e0772dfca53ff0aa375ed088fa0d1 Mon Sep 17 00:00:00 2001 From: pvincent Date: Wed, 29 Jul 2026 22:57:04 +0400 Subject: [PATCH] populate_error_arrays --- poc | 58 +++++++++++++++++++++++++++++++--------------- test/poc.test.bash | 2 +- 2 files changed, 40 insertions(+), 20 deletions(-) diff --git a/poc b/poc index 5b6565e..b91e352 100755 --- a/poc +++ b/poc @@ -189,6 +189,17 @@ function on_error { fi } +function populate_error_arrays { + + local source=$1 line=$2 payload=$3 + 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[@]}" '
') +} + function on_pipe { trap - RETURN local tmp_error regex source lineno @@ -251,7 +262,7 @@ function dump_failure { echo -n '╚' for ((i = 0; i < length_box; i++)); do echo -n '═'; done echo '╝' - miaou_debug '' + miaou_debug '' else echo -n '╚' for ((i = 0; i < 4; i++)); do echo -n '═'; done @@ -259,7 +270,7 @@ function dump_failure { for ((i = 5; i < length_box; i++)); do echo -n '═'; done echo '╝' echo " ║" - miaou_debug '' + miaou_debug '' fi tty_ansi RESET miaou_debug '' @@ -330,30 +341,39 @@ function on_exit { regex='^(.*): line ([0-9]+): (.*): unbound variable$' if [[ $failure_code -eq 1 ]] && [[ "$last_error" =~ $regex ]]; then - local source line payload + failure_type='UNBOUND_VARIABLE' + failure_payload="${BASH_REMATCH[3]}" + failure_code=2 - source="${BASH_REMATCH[1]}" - line="${BASH_REMATCH[2]}" - payload="${BASH_REMATCH[3]}" + local source="${BASH_REMATCH[1]}" line="${BASH_REMATCH[2]}" 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=$failure_code - failure_type='UNBOUND_VARIABLE' - failure_payload=$payload + populate_error_arrays "$source" "$line" "$failure_payload" unset 'tmp_error[-1]' - add_miaou_error "${BASH_SOURCE[1]}" "${BASH_LINENO[0]}" "${failure_code}" "${failure_type}" "${failure_payload}" + add_miaou_error "$source" "$line" "${failure_code}" "${failure_type}" "${failure_payload}" miaou_debug "" else - failure_type='UNKNOWN ERROR' + regex='^(.*): line ([0-9]+): (.*): No such file or directory$' + if [[ $failure_code -eq 1 ]] && [[ "$last_error" =~ $regex ]]; then + failure_type='SOURCE_NOT_FOUND' + failure_payload="${BASH_REMATCH[3]}" + failure_code=3 + + local source="${BASH_REMATCH[1]}" line="${BASH_REMATCH[2]}" + error_source=("${BASH_SOURCE[@]}") + error_lineno=("${BASH_LINENO[@]}") + error_funcname=("${FUNCNAME[@]}") + populate_error_arrays "$source" "$line" "$failure_payload" + + unset 'tmp_error[-1]' + add_miaou_error "$source" "$line" "${failure_code}" "${failure_type}" "${failure_payload}" + miaou_debug "" + else + failure_type='UNKNOWN ERROR' + failure_payload="$BASH_COMMAND" + fi fi miaou_debug "" fi @@ -367,7 +387,7 @@ function on_exit { fi fi if [[ $failure_code -gt 0 ]]; then - miaou_debug "" + miaou_debug "" else miaou_debug "" fi diff --git a/test/poc.test.bash b/test/poc.test.bash index 45b2dc0..9fda4d9 100755 --- a/test/poc.test.bash +++ b/test/poc.test.bash @@ -55,7 +55,7 @@ fail_type last_false COMMAND_ERROR fail_type subshell_term SUBSHELL_ERROR fail_type exit EXIT fail_type command_not_found COMMAND_NOT_FOUND -# fail_type source_not_found SOURCE_NOT_FOUND +fail_type source_not_found SOURCE_NOT_FOUND # fail_type file_not_found FILE_NOT_FOUND # fail_type subshell_error COMMAND_NOT_FOUND '(hint: prefer source than subshell)' # fail_type command_error COMMAND_ERROR