'main': Break out an anonymous function into a named function.

This is in order to allow it to be reused.

No functional change.
This commit is contained in:
Daniel Shahaf 2020-03-19 21:37:50 +00:00
parent 5d139fcd94
commit 7678a8a227

View File

@ -420,6 +420,56 @@ _zsh_highlight_highlighter_main_paint()
done
}
# Try to expand $1, if it's possible to do so safely.
#
# Uses two parameters from the caller: $parameter_name_pattern and $res.
#
# If expansion was done, set $reply to the expansion and return true.
# Otherwise, return false.
_zsh_highlight_main_highlighter__try_expand_parameter()
{
local arg="$1"
unset reply
{
# ### For now, expand just '$foo' or '${foo}', possibly with braces, but with
# ### no other features of the parameter expansion syntax. (No ${(x)foo},
# ### no ${foo[x]}, no ${foo:-x}.)
{
local -a match mbegin mend
local MATCH; integer MBEGIN MEND
local parameter_name
local -a words
if [[ $arg[1] == '$' ]] && [[ ${arg[2]} == '{' ]] && [[ ${arg[-1]} == '}' ]]; then
parameter_name=${${arg:2}%?}
elif [[ $arg[1] == '$' ]]; then
parameter_name=${arg:1}
fi
if [[ $res == none ]] && zmodload -e zsh/parameter &&
[[ ${parameter_name} =~ ^${~parameter_name_pattern}$ ]] &&
[[ ${parameters[(e)$MATCH]} != *special* ]]
then
# Set $arg and update $res.
case ${(tP)MATCH} in
(*array*|*assoc*)
words=( ${(P)MATCH} )
;;
("")
# not set
words=( )
;;
(*)
# scalar, presumably
words=( ${(P)MATCH} )
;;
esac
reply=( "${words[@]}" )
else
return 1
fi
}
}
}
# $1 is the offset of $4 from the parent buffer. Added to the returned highlights.
# $2 is the initial braces_stack (for a closing paren).
# $3 is 1 if $4 contains the end of $BUFFER, else 0.
@ -676,42 +726,13 @@ _zsh_highlight_main_highlighter_highlight_list()
fi
# Expand parameters.
#
# ### For now, expand just '$foo' or '${foo}', possibly with braces, but with
# ### no other features of the parameter expansion syntax. (No ${(x)foo},
# ### no ${foo[x]}, no ${foo:-x}.)
() {
if _zsh_highlight_main_highlighter__try_expand_parameter "$arg"; then
# That's not entirely correct --- if the parameter's value happens to be a reserved
# word, the parameter expansion will be highlighted as a reserved word --- but that
# incorrectness is outweighed by the usability improvement of permitting the use of
# parameters that refer to commands, functions, and builtins.
local -a match mbegin mend
local MATCH; integer MBEGIN MEND
local parameter_name
local -a words
if [[ $arg[1] == '$' ]] && [[ ${arg[2]} == '{' ]] && [[ ${arg[-1]} == '}' ]]; then
parameter_name=${${arg:2}%?}
elif [[ $arg[1] == '$' ]]; then
parameter_name=${arg:1}
fi
if [[ $res == none ]] && zmodload -e zsh/parameter &&
[[ ${parameter_name} =~ ^${~parameter_name_pattern}$ ]] &&
[[ ${parameters[(e)$MATCH]} != *special* ]]
then
# Set $arg and update $res.
case ${(tP)MATCH} in
(*array*|*assoc*)
words=( ${(P)MATCH} )
;;
("")
# not set
words=( )
;;
(*)
# scalar, presumably
words=( ${(P)MATCH} )
;;
esac
() {
local -a words; words=( "${reply[@]}" )
if (( $#words == 0 )); then
# Parameter elision is happening
(( ++in_redirection ))
@ -724,8 +745,8 @@ _zsh_highlight_main_highlighter_highlight_list()
_zsh_highlight_main__type "$arg" 0
res=$REPLY
fi
fi
}
}
fi
# Parse the sudo command line
if (( ! in_redirection )); then