mirror of
https://github.com/zsh-users/zsh-syntax-highlighting.git
synced 2025-04-17 11:35:32 +08:00
Perf: speed up _zsh_highlight_main__type
This commit is contained in:
parent
826aa7312d
commit
edf433081e
@ -157,6 +157,16 @@ _zsh_highlight_main_calculate_fallback() {
|
|||||||
#
|
#
|
||||||
# The result will be stored in REPLY.
|
# The result will be stored in REPLY.
|
||||||
_zsh_highlight_main__type() {
|
_zsh_highlight_main__type() {
|
||||||
|
# Cache lookup
|
||||||
|
if (( $+_zsh_highlight_main__command_type_cache )); then
|
||||||
|
REPLY=$_zsh_highlight_main__command_type_cache[$1]
|
||||||
|
if [[ -n "$REPLY" ]]; then
|
||||||
|
REPLY[-1]=
|
||||||
|
[[ -n $REPLY ]]
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
integer -r aliases_allowed=${2-1}
|
integer -r aliases_allowed=${2-1}
|
||||||
# We won't cache replies of anything that exists as an alias at all, to
|
# 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.
|
# ensure the cached value is correct regardless of $aliases_allowed.
|
||||||
@ -165,36 +175,28 @@ _zsh_highlight_main__type() {
|
|||||||
# ### $aliases_allowed, on the assumption that aliases are the common case.
|
# ### $aliases_allowed, on the assumption that aliases are the common case.
|
||||||
integer may_cache=1
|
integer may_cache=1
|
||||||
|
|
||||||
# Cache lookup
|
|
||||||
if (( $+_zsh_highlight_main__command_type_cache )); then
|
|
||||||
REPLY=$_zsh_highlight_main__command_type_cache[(e)$1]
|
|
||||||
if [[ -n "$REPLY" ]]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Main logic
|
# Main logic
|
||||||
if (( $#options_to_set )); then
|
if (( $#options_to_set )); then
|
||||||
setopt localoptions $options_to_set;
|
setopt localoptions $options_to_set;
|
||||||
fi
|
fi
|
||||||
unset REPLY
|
unset REPLY
|
||||||
if zmodload -e zsh/parameter; then
|
if zmodload -e zsh/parameter; then
|
||||||
if (( $+aliases[(e)$1] )); then
|
if (( $+aliases[$1] )); then
|
||||||
may_cache=0
|
may_cache=0
|
||||||
fi
|
fi
|
||||||
if (( ${+galiases[(e)$1]} )) && (( aliases_allowed )); then
|
if (( ${+galiases[$1]} )) && (( aliases_allowed )); then
|
||||||
REPLY='global alias'
|
REPLY='global alias'
|
||||||
elif (( $+aliases[(e)$1] )) && (( aliases_allowed )); then
|
elif (( $+aliases[$1] )) && (( aliases_allowed )); then
|
||||||
REPLY=alias
|
REPLY=alias
|
||||||
elif [[ $1 == *.* && -n ${1%.*} ]] && (( $+saliases[(e)${1##*.}] )); then
|
elif [[ $1 == *.* && -n ${1%.*} ]] && (( $+saliases[${1##*.}] )); then
|
||||||
REPLY='suffix alias'
|
REPLY='suffix alias'
|
||||||
elif (( $reswords[(Ie)$1] )); then
|
elif (( $reswords[(Ie)$1] )); then
|
||||||
REPLY=reserved
|
REPLY=reserved
|
||||||
elif (( $+functions[(e)$1] )); then
|
elif (( $+functions[$1] )); then
|
||||||
REPLY=function
|
REPLY=function
|
||||||
elif (( $+builtins[(e)$1] )); then
|
elif (( $+builtins[$1] )); then
|
||||||
REPLY=builtin
|
REPLY=builtin
|
||||||
elif (( $+commands[(e)$1] )); then
|
elif (( $+commands[$1] )); then
|
||||||
REPLY=command
|
REPLY=command
|
||||||
# None of the special hashes had a match, so fall back to 'type -w', for
|
# None of the special hashes had a match, so fall back to 'type -w', for
|
||||||
# forward compatibility with future versions of zsh that may add new command
|
# forward compatibility with future versions of zsh that may add new command
|
||||||
@ -206,6 +208,12 @@ _zsh_highlight_main__type() {
|
|||||||
# falling through to the $() below, incurring a fork. (Issue #354.)
|
# falling through to the $() below, incurring a fork. (Issue #354.)
|
||||||
#
|
#
|
||||||
# The first disjunct mimics the isrelative() C call from the zsh bug.
|
# The first disjunct mimics the isrelative() C call from the zsh bug.
|
||||||
|
elif [[ $1 == */* || $ZSH_VERSION != (5.<9->*|<6->.*) ]]; then
|
||||||
|
if [[ -n $1(#qN.*) || -o path_dirs && -n ${^path}/$1(#qN.*) ]]; then
|
||||||
|
REPLY=command
|
||||||
|
else
|
||||||
|
REPLY=none
|
||||||
|
fi
|
||||||
elif { [[ $1 != */* ]] || is-at-least 5.3 } &&
|
elif { [[ $1 != */* ]] || is-at-least 5.3 } &&
|
||||||
# Add a subshell to avoid a zsh upstream bug; see issue #606.
|
# Add a subshell to avoid a zsh upstream bug; see issue #606.
|
||||||
# ### Remove the subshell when we stop supporting zsh 5.7.1 (I assume 5.8 will have the bugfix).
|
# ### Remove the subshell when we stop supporting zsh 5.7.1 (I assume 5.8 will have the bugfix).
|
||||||
@ -231,11 +239,10 @@ _zsh_highlight_main__type() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Cache population
|
# Cache population
|
||||||
if (( may_cache )) && (( $+_zsh_highlight_main__command_type_cache )); then
|
if (( may_cache && $+_zsh_highlight_main__command_type_cache )); then
|
||||||
_zsh_highlight_main__command_type_cache[(e)$1]=$REPLY
|
_zsh_highlight_main__command_type_cache[$1]=$REPLY.
|
||||||
fi
|
fi
|
||||||
[[ -n $REPLY ]]
|
[[ -n $REPLY ]]
|
||||||
return $?
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Checks whether $1 is something that can be run.
|
# Checks whether $1 is something that can be run.
|
||||||
@ -1241,7 +1248,7 @@ _zsh_highlight_main_highlighter_check_path()
|
|||||||
fi
|
fi
|
||||||
return 0
|
return 0
|
||||||
elif [[ ! -d $expanded_path ]]; then
|
elif [[ ! -d $expanded_path ]]; then
|
||||||
# ### This seems unreachable for the current callers
|
REPLY=command
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
Loading…
Reference in New Issue
Block a user