'main': Let aliases be type-cached, and don't run type-checking twice (with slightly different settings) if path expansion returned the input unchanged.
In particular, note that applying all but the last hunk of this diff would cause «time» in command position to be highlighted as «command» rather than «reserved». (This is covered by tests.)
This commit is contained in:
parent
e0d1bc5c86
commit
c27470a08d
@ -159,16 +159,11 @@ _zsh_highlight_main_calculate_fallback() {
|
||||
_zsh_highlight_main__type() {
|
||||
integer -r aliases_allowed=${2-1}
|
||||
integer -r resword_allowed=${3-1}
|
||||
# We won't cache replies of anything that exists as an alias at all, to
|
||||
# ensure the cached value is correct regardless of $aliases_allowed.
|
||||
#
|
||||
# ### We probably _should_ cache them in a cache that's keyed on the value of
|
||||
# ### $aliases_allowed, on the assumption that aliases are the common case.
|
||||
integer may_cache=1
|
||||
readonly cache_key="${1}:$(( aliases_allowed ? 1 : 0)):$((resword_allowed ? 1 : 0))"
|
||||
|
||||
# Cache lookup
|
||||
if (( $+_zsh_highlight_main__command_type_cache )); then
|
||||
REPLY=$_zsh_highlight_main__command_type_cache[(e)$1]
|
||||
REPLY=$_zsh_highlight_main__command_type_cache[(e)$cache_key]
|
||||
if [[ -n "$REPLY" ]]; then
|
||||
return
|
||||
fi
|
||||
@ -180,9 +175,6 @@ _zsh_highlight_main__type() {
|
||||
fi
|
||||
unset REPLY
|
||||
if zmodload -e zsh/parameter; then
|
||||
if (( $+aliases[(e)$1] )); then
|
||||
may_cache=0
|
||||
fi
|
||||
if (( aliases_allowed )) && (( ${+galiases[(e)$1]} )); then
|
||||
REPLY='global alias'
|
||||
elif (( aliases_allowed )) && (( $+aliases[(e)$1] )) &&; then
|
||||
@ -226,14 +218,11 @@ _zsh_highlight_main__type() {
|
||||
# «$(…)»], which is area that has had some parsing bugs before 5.6
|
||||
# (approximately).
|
||||
REPLY="${$(:; (( aliases_allowed )) || unalias -- "$1" 2>/dev/null; LC_ALL=C builtin type -w -- "$1" 2>/dev/null)##*: }"
|
||||
if [[ $REPLY == 'alias' ]]; then
|
||||
may_cache=0
|
||||
fi
|
||||
fi
|
||||
|
||||
# Cache population
|
||||
if (( may_cache )) && (( $+_zsh_highlight_main__command_type_cache )); then
|
||||
_zsh_highlight_main__command_type_cache[(e)$1]=$REPLY
|
||||
if (( $+_zsh_highlight_main__command_type_cache )); then
|
||||
_zsh_highlight_main__command_type_cache[(e)$cache_key]=$REPLY
|
||||
fi
|
||||
[[ -n $REPLY ]]
|
||||
return $?
|
||||
@ -651,8 +640,10 @@ _zsh_highlight_main_highlighter_highlight_list()
|
||||
continue
|
||||
else
|
||||
_zsh_highlight_main_highlighter_expand_path $arg
|
||||
_zsh_highlight_main__type "$REPLY" 0 0
|
||||
res="$REPLY"
|
||||
if [[ $arg != $REPLY ]]; then
|
||||
_zsh_highlight_main__type "$REPLY" 0 0
|
||||
res="$REPLY"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user