main: Recursively expand aliases

This commit is contained in:
Matthew Martin 2018-10-01 11:23:59 -04:00
parent e1ecf950e2
commit 57386f30ae

View File

@ -500,26 +500,37 @@ _zsh_highlight_main_highlighter_highlight_list()
if [[ $this_word == *:start:* ]] && ! (( in_redirection )); then
# Expand aliases.
# TODO: this should be done iteratively, e.g., 'alias x=y y=z z=w\n x'
# And then the entire 'alias' branch of the 'case' statement should
# TODO: the entire 'alias' branch of the 'case' statement should
# be done here.
_zsh_highlight_main__type "$arg"
local res="$REPLY"
if [[ $res == "alias" ]]; then
_zsh_highlight_main__resolve_alias $arg
() {
# Use a temporary array to ensure the subscript is interpreted as
# an array subscript, not as a scalar subscript
local -a reply
# TODO: the ${interactive_comments+set} path needs to skip comments; see test-data/alias-comment1.zsh
reply=( ${interactive_comments-${(z)REPLY}}
${interactive_comments+${(zZ+c+)REPLY}} )
arg=$reply[1]
local -A seen_arg
while [[ $REPLY == alias ]]; do
seen_arg[$arg]=1
_zsh_highlight_main__resolve_alias $arg
# Use a temporary array to ensure the subscript is interpreted as
# an array subscript, not as a scalar subscript
local -a reply
# TODO: the ${interactive_comments+set} path needs to skip comments; see test-data/alias-comment1.zsh
reply=( ${interactive_comments-${(z)REPLY}}
${interactive_comments+${(zZ+c+)REPLY}} )
# Avoid looping forever on alias a=b b=c c=b, but allow alias foo='foo bar'
[[ $arg == $reply[1] ]] && break
arg=$reply[1]
if (( $+seen_arg[$arg] )); then
res=none
break
fi
_zsh_highlight_main__type "$arg"
done
}
fi
_zsh_highlight_main_highlighter_expand_path $arg
arg=$REPLY
if [[ $res != alias ]]; then
_zsh_highlight_main_highlighter_expand_path $arg
arg=$REPLY
else
_zsh_highlight_main_highlighter_expand_path $arg
arg=$REPLY
_zsh_highlight_main__type "$arg"
res="$REPLY"
fi