Skip to content

Commit

Permalink
global: work around bash-4.4 no-argument return in trap
Browse files Browse the repository at this point in the history
  • Loading branch information
akinomyoga committed Feb 19, 2023
1 parent adaec05 commit eb4ffce
Show file tree
Hide file tree
Showing 17 changed files with 77 additions and 63 deletions.
2 changes: 1 addition & 1 deletion ble.pp
Expand Up @@ -2337,7 +2337,7 @@ function ble/base/attach-from-PROMPT_COMMAND {
# #D1354: 入れ子の ble/base/attach-from-PROMPT_COMMAND の時は一番
# 外側で ble-attach を実行する様にする。3>&2 2>/dev/null のリダ
# イレクトにより stdout.off の効果が巻き戻されるのを防ぐ為。
[[ ${ble_base_attach_from_prompt_command-} != processing ]] || return
[[ ${ble_base_attach_from_prompt_command-} != processing ]] || return 0
fi

# 既に attach 状態の時は処理はスキップ
Expand Down
2 changes: 1 addition & 1 deletion blerc.template
Expand Up @@ -932,7 +932,7 @@ function blerc/emacs-load-hook {
#ble-bind -f 'M-C-h' kill-backward-cword
#ble-bind -f 'M-BS' kill-backward-cword

return
return 0
}
blehook/eval-after-load keymap_emacs blerc/emacs-load-hook

Expand Down
2 changes: 1 addition & 1 deletion contrib
1 change: 1 addition & 0 deletions docs/ChangeLog.md
Expand Up @@ -535,6 +535,7 @@
- edit: update prompts on g2sgr change `#D1906` 40625ac
- util, decode, vi: fix leak variables `#D1933` 8d5cab8
- util: support `bleopt debug_idle` `#D1945` fa10184
- global: work around bash-4.4 no-argument return in trap `#D1970` xxxxxxx

## Contrib

Expand Down
2 changes: 1 addition & 1 deletion lib/core-complete.sh
Expand Up @@ -4048,7 +4048,7 @@ function ble/complete/mandb/search-file {

local path
ble/complete/mandb/search-file/.extract-path "$command"
ble/complete/mandb/search-file/.check "$path" && return
ble/complete/mandb/search-file/.check "$path" && return 0

# Get manpaths
ble/string#split ret : "$MANPATH"
Expand Down
6 changes: 3 additions & 3 deletions lib/core-syntax.sh
Expand Up @@ -5584,7 +5584,7 @@ function ble/syntax/completion-context/.check-prefix/ctx:quote/.check-container-
ble/syntax/completion-context/.add argument "$wbeg2"
elif ((wt==CTX_CPATI)); then # case pattern の内部
#ble/syntax/completion-context/.add file "$wbeg2"
return
return 0
fi
fi
}
Expand Down Expand Up @@ -7436,7 +7436,7 @@ function ble/highlight/layer:syntax/update {
_ble_highlight_layer_syntax_active=
PREV_UMIN=0 PREV_UMAX=${#1}
fi
return
return 0
fi

# 前回 layer:syntax が無効だった時
Expand Down Expand Up @@ -7532,7 +7532,7 @@ function ble/highlight/layer:syntax/update {
}

function ble/highlight/layer:syntax/getg {
[[ ! $bleopt_highlight_syntax ]] && return
[[ $bleopt_highlight_syntax ]] || return 1
local i=$1
if [[ ${_ble_highlight_layer_syntax3_table[i]} ]]; then
g=${_ble_highlight_layer_syntax3_table[i]}
Expand Down
57 changes: 35 additions & 22 deletions make_command.sh
Expand Up @@ -1074,6 +1074,8 @@ function sub:check-all {
#------------------------------------------------------------------------------
# sub:scan

_make_rex_escseq='(\[[ -?]*[@-~])*'

function sub:scan/grc-source {
local -a options=(--color --exclude=./{test,memo,ext,wiki,contrib,[TD]????.*} --exclude=\*.{md,awk} --exclude=./{GNUmakefile,make_command.sh})
grc "${options[@]}" "$@"
Expand Down Expand Up @@ -1113,12 +1115,12 @@ function sub:scan/list-command {

function sub:scan/builtin {
echo "--- $FUNCNAME $1 ---"
local command=$1 esc='(\[[ -?]*[@-~])*'
local command=$1 esc=$_make_rex_escseq
sub:scan/list-command --exclude-this --exclude={generate-release-note.sh,lib/test-*.sh,make,ext} "$command" "${@:2}" |
grep -Ev "$rex_grep_head([[:space:]]*|[[:alnum:][:space:]]*[[:space:]])#|(\b|$esc)(builtin|function)$esc([[:space:]]$esc)+$command(\b|$esc)" |
grep -Ev "$command(\b|$esc)=" |
grep -Ev "ble\.sh $esc\($esc$command$esc\)$esc" |
sed -E 'h;s/'"$esc"'//g;\Z(\.awk|push|load|==) \b'"$command"'\bZd;g'
sed -E 'h;s/'"$_make_rex_escseq"'//g;\Z(\.awk|push|load|==) \b'"$command"'\bZd;g'
}

function sub:scan/check-todo-mark {
Expand Down Expand Up @@ -1164,13 +1166,27 @@ function sub:scan/bash501-arith-base {
grc '\b10#\$' --exclude={test,ChangeLog.md}
}

function sub:scan/bash404-no-argument-return {
echo "--- $FUNCNAME ---"
grc --color 'return[[:space:]]*($|[;|&<>])' --exclude={test,wiki,ChangeLog.md,make,docs,make_command.sh} |
sed -E 'h;s/'"$_make_rex_escseq"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
\Z@returnZd
\Z\) return;Zd
\Zreturn;[[:space:]]*$Zd
\Zif \(REQ == "[A-Z]+"\)Zd
\Z\(return\|ret\)Zd
\Z_ble_trap_done=return$Zd
g'
}

function sub:scan/bash502-patsub_replacement {
echo "--- $FUNCNAME ---"
# bash-5.2 patsub_replacement で ${var/pat/string} の string 中の & が特別な
# 意味を持つ様になったので、特に意識する場合を除いては quote が必要になった。
local esc='(\[[ -?]*[@-~])*'
grc --color '\$\{[[:alnum:]_]+(\[[^][]*\])?//?([^{}]|\{[^{}]*\})+/[^{}"'\'']*([&$]|\\)' --exclude=./test |
sed -E 'h;s/'"$esc"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
sed -E 'h;s/'"$_make_rex_escseq"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
\Z//?\$q/\$Q\}Zd
\Z//?\$q/\$qq\}Zd
\Z//?\$qq/\$q\}Zd
Expand All @@ -1187,7 +1203,7 @@ function sub:scan/bash502-patsub_replacement {
g'

grc --color '"[^"]*\$\{[[:alnum:]_]+(\[[^][]*\])?//?([^{}]|\{[^{}]*\})+/[^{}"'\'']*"[^"]*([&$]|\\)' --exclude=./test |
sed -E 'h;s/'"$esc"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
sed -E 'h;s/'"$_make_rex_escseq"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
\Z#D1751Zd
g'
}
Expand Down Expand Up @@ -1250,9 +1266,8 @@ function sub:scan/array-count-in-arithmetic-expression {
# unset 変数名 としていると誤って関数が消えることがある。
function sub:scan/unset-variable {
echo "--- $FUNCNAME ---"
local esc='(\[[ -?]*[@-~])*'
sub:scan/list-command unset --exclude-this |
sed -E 'h;s/'"$esc"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
sed -E 'h;s/'"$_make_rex_escseq"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
\Zunset[[:space:]]-[vf]Zd
\Z^[[:space:]]*#Zd
\Zunset _ble_init_(version|arg|exit|command)\bZd
Expand All @@ -1265,9 +1280,8 @@ function sub:scan/unset-variable {
}
function sub:scan/eval-literal {
echo "--- $FUNCNAME ---"
local esc='(\[[ -?]*[@-~])*'
sub:scan/grc-source 'builtin eval "\$' |
sed -E 'h;s/'"$esc"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
sed -E 'h;s/'"$_make_rex_escseq"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
\Zeval "(\$[[:alnum:]_]+)+(\[[^]["'\''\$`]+\])?\+?=Zd
g'
}
Expand All @@ -1284,10 +1298,8 @@ function sub:scan/mistake-_ble_bash {

function sub:scan/command-layout {
echo "--- $FUNCNAME ---"
local esc='(\[[ -?]*[@-~])*'

grc '/(enter-command-layout|\.insert-newline|\.newline)([[:space:]]|$)' --exclude=./{text,ext} --exclude=./make_command.sh --exclude=\*.md --color |
sed -E 'h;s/'"$esc"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
sed -E 'h;s/'"$_make_rex_escseq"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
\Z^[[:space:]]*#Zd
\Z^[[:space:]]*function [^[:space:]]* \{$Zd
\Z[: ]keep-infoZd
Expand All @@ -1300,7 +1312,7 @@ function sub:scan/word-splitting-number {
# #D1835 一般には IFS に整数が含まれるている場合もあるので ${#...} や
# $((...)) や >&$fd であってもちゃんと quote する必要がある。
grc '[<>]&\$|([[:space:]]|=\()\$(\(\(|\{#|\?)' --exclude={docs,mwg_pp.awk} |
sed -E 'h;s/'"$esc"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
sed -E 'h;s/'"$_make_rex_escseq"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
\Z^[^#]*(^|[[:space:]])#Zd
\Z^([^"]|"[^\#]*")*"[^"]*([& (]\$)Zd
\Z^[^][]*\[\[[^][]*([& (]\$)Zd
Expand All @@ -1318,21 +1330,21 @@ function sub:scan {
exit
fi

local esc='(\[[ -?]*[@-~])*'
local esc=$_make_rex_escseq
local rex_grep_head="^$esc[[:graph:]]+$esc:$esc[[:digit:]]*$esc:$esc"

# builtin return break continue : eval echo unset は unset しているので大丈夫のはず

#sub:scan/builtin 'history'
sub:scan/builtin 'echo' --exclude=./keymap/vi_test.sh --exclude=./ble.pp |
sed -E 'h;s/'"$esc"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
sed -E 'h;s/'"$_make_rex_escseq"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
\Z\bstty[[:space:]]+echoZd
\Zecho \$PPIDZd
\Zmandb-help=%'\''help echo'\''Zd
g'
#sub:scan/builtin '(compopt|type|printf)'
sub:scan/builtin 'bind' |
sed -E 'h;s/'"$esc"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
sed -E 'h;s/'"$_make_rex_escseq"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
\Zinvalid bind typeZd
\Zline = "bind"Zd
\Z'\'' bindZd
Expand All @@ -1341,18 +1353,18 @@ function sub:scan {
\Zoutputs of the "bind" builtinZd
g'
sub:scan/builtin 'read' |
sed -E 'h;s/'"$esc"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
sed -E 'h;s/'"$_make_rex_escseq"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
\ZDo not read Zd
\Zfailed to read Zd
g'
sub:scan/builtin 'exit' |
sed -E 'h;s/'"$esc"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
sed -E 'h;s/'"$_make_rex_escseq"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
\Zble.pp.*return 1 2>/dev/null || exit 1Zd
\Z^[-[:space:][:alnum:]_./:=$#*]+('\''[^'\'']*|"[^"()`]*|([[:space:]]|^)#.*)\bexit\bZd
\Z\(exit\) ;;Zd
\Zprint NR; exit;Zd;g'
sub:scan/builtin 'eval' |
sed -E 'h;s/'"$esc"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
sed -E 'h;s/'"$_make_rex_escseq"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
\Z\('\''eval'\''\)Zd
\Zbuiltins1=\(.* eval .*\)Zd
\Z\^eval --Zd
Expand All @@ -1364,21 +1376,21 @@ function sub:scan {
\ZLINENO=\$_ble_edit_LINENO evalZd
g'
sub:scan/builtin 'unset' |
sed -E 'h;s/'"$esc"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
sed -E 'h;s/'"$_make_rex_escseq"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
\Zunset _ble_init_(version|arg|exit|command)\bZd
\Zreadonly -f unsetZd
\Zunset -f builtinZd
\Z'\''\(unset\)'\''Zd
\Z"\$__ble_proc" "\$__ble_name" unsetZd
g'
sub:scan/builtin 'unalias' |
sed -E 'h;s/'"$esc"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
sed -E 'h;s/'"$_make_rex_escseq"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
\Zbuiltins1=\(.* unalias .*\)Zd
g'

#sub:scan/assign
sub:scan/builtin trap |
sed -E 'h;s/'"$esc"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
sed -E 'h;s/'"$_make_rex_escseq"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
\Z_ble_trap_handler="trap -- '\''\$\{_ble_trap_handler//\$q/\$Q}'\'' \$nZd
\Zline = "bind"Zd
\Ztrap_command=["'\'']trap -- Zd
Expand All @@ -1394,6 +1406,7 @@ function sub:scan {
sub:scan/check-todo-mark
sub:scan/bash300bug
sub:scan/bash301bug-array-element-length
sub:scan/bash404-no-argument-return
sub:scan/bash501-arith-base
sub:scan/bash502-patsub_replacement
sub:scan/gawk402bug-regex-check
Expand Down
10 changes: 5 additions & 5 deletions memo/D1405.extract-man.sh
Expand Up @@ -13,16 +13,16 @@ function ble/complete/mandb/search-file {
local command=$1

# Try "man -w" first
ble/complete/mandb/search-file/.check "$(man -w "$command" 2>/dev/null)" && return
ble/complete/mandb/search-file/.check "$(man -w "$command" 2>/dev/null)" && return 0

local manpath=${MANPATH:-/usr/share/man:/usr/local/share/man:/usr/local/man}
ble/string#split manpath : "$manpath"
local path
for path in "${manpath[@]}"; do
ble/complete/mandb/search-file/.check "$path/man1/$man.1.gz" && return
ble/complete/mandb/search-file/.check "$path/man1/$man.1" && return
ble/complete/mandb/search-file/.check "$path/man1/$man.8.gz" && return
ble/complete/mandb/search-file/.check "$path/man1/$man.8" && return
ble/complete/mandb/search-file/.check "$path/man1/$man.1.gz" && return 0
ble/complete/mandb/search-file/.check "$path/man1/$man.1" && return 0
ble/complete/mandb/search-file/.check "$path/man1/$man.8.gz" && return 0
ble/complete/mandb/search-file/.check "$path/man1/$man.8" && return 0
done
return 1
}
Expand Down
8 changes: 4 additions & 4 deletions memo/D1589-ConvertAirlineThemes.sh
Expand Up @@ -47,16 +47,16 @@ function face {
# check mode
case ${mode%_modified} in
(normal|insert|replace|visual|commandline|inactive) ;;
(accents|tabline|ctrlp|terminal) return ;;
(*_paste|insert_replace|normal_error|insert_error) return ;;
(accents|tabline|ctrlp|terminal) return 0 ;;
(*_paste|insert_replace|normal_error|insert_error) return 0 ;;
(*) ble/util/print "$theme: Unknown mode '$mode'" >&2
esac

# check face
case $face in
(airline_[abcxyz]|airline_error|airline_term|airline_warning) ;;
(airline_*_to_airline_*) return ;;
(airline_file) return ;; # ?????? itchyny/landscape.vim で使用
(airline_*_to_airline_*) return 0 ;;
(airline_file) return 0 ;; # ?????? itchyny/landscape.vim で使用
(*) ble/util/print "$theme: Unknown face type '$face'" >&2
esac

Expand Down
4 changes: 2 additions & 2 deletions memo/D1645.check-c2w-table.sh
Expand Up @@ -19,7 +19,7 @@ function dump {
function c2w.binary {
local c=$1
ret=${_ble_unicode_EastAsianWidth_c2w[c]}
[[ $ret ]] && return
[[ $ret ]] && return 0

local l u m
((l=0,u=${#_ble_unicode_EastAsianWidth_c2w_ranges[@]}-1))
Expand All @@ -38,7 +38,7 @@ function c2w.binary {
function c2w.bindex {
local c=$1
ret=${_ble_unicode_EastAsianWidth_c2w[c]}
[[ $ret ]] && return
[[ $ret ]] && return 0

ret=${_ble_unicode_EastAsianWidth_c2w_index[c<0x20000?c>>8:((c>>12)-32+512)]}
if [[ $ret == *:* ]]; then
Expand Down
4 changes: 2 additions & 2 deletions memo/D1782.test.sh
Expand Up @@ -5,7 +5,7 @@ flag=
shopt -s extdebug

function set_exit {
return $1
return "$1"
}
function set_trap {
# DEBUG trap の中で trap や return を実行しても "現在のコマンド" は
Expand All @@ -20,7 +20,7 @@ function set_trap {
# Note: continue や return の前に指定した終了ステータスは DEBUG trap
# (extdebug) の振る舞いには関係ない。
#
#trap '[[ $flag == 1 ]] && { echo "cmd:$FUNCNAME/$BASH_COMMAND"; set_exit 2; return; }' DEBUG
#trap '[[ $flag == 1 ]] && { echo "cmd:$FUNCNAME/$BASH_COMMAND"; set_exit 2; return 2; }' DEBUG

trap '[[ $flag == 1 ]] && { echo "cmd:$FUNCNAME/$BASH_COMMAND"; shopt -s extdebug; set_exit 2; }' DEBUG
}
Expand Down
11 changes: 5 additions & 6 deletions note.txt
Expand Up @@ -1935,12 +1935,7 @@ bash_tips
- todo 項目の整理
- leakvars
- keymap の移動 (これは別 commit にする?)

2023-02-14

* no-argument return がまたある。make scan でチェックするべき。

$ grc 'return[[:space:]]*($|[;|&])'
- make_command.sh の整理 (scan 分離, char_width 分離)

2023-02-12

Expand Down Expand Up @@ -6657,6 +6652,10 @@ bash_tips

2023-02-14

* make: no-argument return がまたある。make scan でチェックするべき [#D1970]

$ grc 'return[[:space:]]*($|[;|&])'

* histdb: git info 等追加情報を user の指定で記録できる様にする [#D1969]
→ "bleopt histdb_remarks" として実装した。

Expand Down
6 changes: 3 additions & 3 deletions src/canvas.sh
Expand Up @@ -1391,7 +1391,7 @@ function ble/canvas/trace/.put-atomic.draw {
}
function ble/canvas/trace/.put-ascii.draw {
local value=$1 w=${#1}
[[ $value ]] || return
[[ $value ]] || return 0

if [[ $flag_clip ]]; then
local xL=$x xR=$((x+w))
Expand Down Expand Up @@ -2898,14 +2898,14 @@ function ble/canvas/goto.draw {
_ble_canvas_excursion_x=
_ble_canvas_excursion_y=
function ble/canvas/excursion-start.draw {
[[ $_ble_canvas_excursion ]] && return
[[ $_ble_canvas_excursion ]] && return 1
_ble_canvas_excursion=1
_ble_canvas_excursion_x=$_ble_canvas_x
_ble_canvas_excursion_y=$_ble_canvas_y
ble/canvas/put.draw "$_ble_term_sc"
}
function ble/canvas/excursion-end.draw {
[[ $_ble_canvas_excursion ]] || return
[[ $_ble_canvas_excursion ]] || return 1
_ble_canvas_excursion=
ble/canvas/put.draw "$_ble_term_rc"
_ble_canvas_x=$_ble_canvas_excursion_x
Expand Down

0 comments on commit eb4ffce

Please sign in to comment.