'main': Highlight 'sudo' correctly when it's not installed.

No test because _zsh_highlight_main__type() falls back to 'type -w' which runs
'rehash' implicitly, so on systems where 'sudo' is installed it's not possible
to simulate its being absent.

Test by forcing _zsh_highlight_main__type() to return 'none' when the
argument is [[ $1 == 'sudo' ]], and: (1) Run 'make test' and confirm
that all tests either pass, or fail and the first test point that fails
is one that expects "sudo" at command position to be highlighted as
'command'; (2) In an interactive zsh, 'sudo' at command position is
highlighted as an error.
This commit is contained in:
Daniel Shahaf 2017-11-25 01:25:07 +00:00
parent c13ee4cf88
commit 26a82113b0

View File

@ -147,6 +147,7 @@ _zsh_highlight_main__type() {
fi
fi
if ! (( $+REPLY )); then
# Note that 'type -w' will run 'rehash' implicitly.
REPLY="${$(LC_ALL=C builtin type -w -- $1 2>/dev/null)##*: }"
fi
if (( $+_zsh_highlight_main__command_type_cache )); then
@ -457,7 +458,7 @@ _zsh_highlight_highlighter_main_paint()
elif [[ $this_word == *':start:'* ]] && (( in_redirection == 0 )); then # $arg is the command word
if [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$arg"} ]]; then
style=precommand
elif [[ "$arg" = "sudo" ]]; then
elif [[ "$arg" = "sudo" ]] && { _zsh_highlight_main__type sudo; [[ -n $REPLY && $REPLY != "none" ]] }; then
style=precommand
next_word=${next_word//:regular:/}
next_word+=':sudo_opt:'