From 7fb6f9979121f35436a80ee90185b95984159f93 Mon Sep 17 00:00:00 2001 From: Daniel Shahaf Date: Fri, 3 Jun 2016 04:16:13 +0000 Subject: [PATCH] 'main': Try the "non-command word" codepath when a word may be either a command word or a non-command word. Fixes #231. Fixes #330. --- highlighters/main/main-highlighter.zsh | 7 ++++++- highlighters/main/test-data/assign-array2.zsh | 2 +- highlighters/main/test-data/assign-array3.zsh | 2 +- highlighters/main/test-data/assign-subshell.zsh | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/highlighters/main/main-highlighter.zsh b/highlighters/main/main-highlighter.zsh index 263917b..4df9ca1 100644 --- a/highlighters/main/main-highlighter.zsh +++ b/highlighters/main/main-highlighter.zsh @@ -273,6 +273,7 @@ _zsh_highlight_main_highlighter() # which add the entry early so escape sequences within the string override # the string's color. integer already_added=0 + style=unknown-token if [[ $this_word == *':start:'* ]]; then in_array_assignment=false if [[ $arg == 'noglob' ]]; then @@ -468,12 +469,16 @@ _zsh_highlight_main_highlighter() ;; esac fi - else # $arg is a non-command word + fi + if (( ! already_added )) && [[ $style == unknown-token ]] && # not handled by the 'command word' codepath + { (( in_redirection )) || [[ $this_word == *':regular:'* ]] || [[ $this_word == *':sudo_opt:'* ]] || [[ $this_word == *':sudo_arg:'* ]] } + then # $arg is a non-command word case $arg in $'\x29') # subshell or end of array assignment if $in_array_assignment; then style=assign in_array_assignment=false + next_word+=':start:' else style=reserved-word fi;; diff --git a/highlighters/main/test-data/assign-array2.zsh b/highlighters/main/test-data/assign-array2.zsh index 330ae5f..37ba372 100644 --- a/highlighters/main/test-data/assign-array2.zsh +++ b/highlighters/main/test-data/assign-array2.zsh @@ -32,5 +32,5 @@ BUFFER='A=(hello world) ls' expected_region_highlight=( "1 3 assign" # A=( "15 15 assign" # ) - "17 18 command 'issue #330'" # ls + "17 18 command" # ls ) diff --git a/highlighters/main/test-data/assign-array3.zsh b/highlighters/main/test-data/assign-array3.zsh index 2241d55..26c42e9 100644 --- a/highlighters/main/test-data/assign-array3.zsh +++ b/highlighters/main/test-data/assign-array3.zsh @@ -32,5 +32,5 @@ BUFFER='A=(hello world) b=42' expected_region_highlight=( "1 3 assign" # A=( "15 15 assign" # ) - "17 20 assign 'issue #330'" # b=42 + "17 20 assign" # b=42 ) diff --git a/highlighters/main/test-data/assign-subshell.zsh b/highlighters/main/test-data/assign-subshell.zsh index 77cdd65..fc04f6b 100644 --- a/highlighters/main/test-data/assign-subshell.zsh +++ b/highlighters/main/test-data/assign-subshell.zsh @@ -32,5 +32,5 @@ BUFFER='(A=1)' expected_region_highlight=( "1 1 reserved-word" # ( "2 4 assign" # A=1 - "5 5 reserved-word 'issue #231'" # ) + "5 5 reserved-word" # ) )