brackets: Highlight closing ')' of array assignments correctly. (Issue #226.)
Followup to c0dafd1d85, which changed the highlight of
those ')'s from <nothing> to [reserved-word].
			
			
This commit is contained in:
		
							parent
							
								
									44e5323b53
								
							
						
					
					
						commit
						b285c7b821
					
				|  | @ -89,6 +89,7 @@ _zsh_highlight_main_highlighter() | ||||||
|   emulate -L zsh |   emulate -L zsh | ||||||
|   setopt localoptions extendedglob bareglobqual |   setopt localoptions extendedglob bareglobqual | ||||||
|   local start_pos=0 end_pos highlight_glob=true arg style |   local start_pos=0 end_pos highlight_glob=true arg style | ||||||
|  |   local in_array_assignment=false # true between 'a=(' and the matching ')' | ||||||
|   typeset -a ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR |   typeset -a ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR | ||||||
|   typeset -a ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS |   typeset -a ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS | ||||||
|   typeset -a ZSH_HIGHLIGHT_TOKENS_CONTROL_FLOW |   typeset -a ZSH_HIGHLIGHT_TOKENS_CONTROL_FLOW | ||||||
|  | @ -171,8 +172,11 @@ _zsh_highlight_main_highlighter() | ||||||
|     # the string's color. |     # the string's color. | ||||||
|     integer already_added=0 |     integer already_added=0 | ||||||
|     local style_override="" |     local style_override="" | ||||||
|     if [[ $this_word == *':start:'* ]] && [[ $arg = 'noglob' ]]; then |     if [[ $this_word == *':start:'* ]]; then | ||||||
|       highlight_glob=false |       in_array_assignment=false | ||||||
|  |       if [[ $arg == 'noglob' ]]; then | ||||||
|  |         highlight_glob=false | ||||||
|  |       fi | ||||||
|     fi |     fi | ||||||
| 
 | 
 | ||||||
|     # advance $start_pos, skipping over whitespace in $buf. |     # advance $start_pos, skipping over whitespace in $buf. | ||||||
|  | @ -251,7 +255,9 @@ _zsh_highlight_main_highlighter() | ||||||
|         *': hashed')    style=$ZSH_HIGHLIGHT_STYLES[hashed-command];; |         *': hashed')    style=$ZSH_HIGHLIGHT_STYLES[hashed-command];; | ||||||
|         *)              if _zsh_highlight_main_highlighter_check_assign; then |         *)              if _zsh_highlight_main_highlighter_check_assign; then | ||||||
|                           style=$ZSH_HIGHLIGHT_STYLES[assign] |                           style=$ZSH_HIGHLIGHT_STYLES[assign] | ||||||
|                           if [[ $arg[-1] != '(' ]]; then |                           if [[ $arg[-1] == '(' ]]; then | ||||||
|  |                             in_array_assignment=true | ||||||
|  |                           else | ||||||
|                             # assignment to a scalar parameter. |                             # assignment to a scalar parameter. | ||||||
|                             # (For array assignments, the command doesn't start until the ")" token.) |                             # (For array assignments, the command doesn't start until the ")" token.) | ||||||
|                             next_word+=':start:' |                             next_word+=':start:' | ||||||
|  | @ -299,7 +305,13 @@ _zsh_highlight_main_highlighter() | ||||||
|      fi |      fi | ||||||
|     else # $arg is a non-command word |     else # $arg is a non-command word | ||||||
|       case $arg in |       case $arg in | ||||||
|         $'\x29') style=$ZSH_HIGHLIGHT_STYLES[reserved-word];; # subshell |         $'\x29') # subshell or end of array assignment | ||||||
|  |                  if $in_array_assignment; then | ||||||
|  |                    style=$ZSH_HIGHLIGHT_STYLES[assign] | ||||||
|  |                    in_array_assignment=false | ||||||
|  |                  else | ||||||
|  |                    style=$ZSH_HIGHLIGHT_STYLES[reserved-word] | ||||||
|  |                  fi;; | ||||||
|         $'\x7d') style=$ZSH_HIGHLIGHT_STYLES[reserved-word];; # block |         $'\x7d') style=$ZSH_HIGHLIGHT_STYLES[reserved-word];; # block | ||||||
|         '--'*)   style=$ZSH_HIGHLIGHT_STYLES[double-hyphen-option];; |         '--'*)   style=$ZSH_HIGHLIGHT_STYLES[double-hyphen-option];; | ||||||
|         '-'*)    style=$ZSH_HIGHLIGHT_STYLES[single-hyphen-option];; |         '-'*)    style=$ZSH_HIGHLIGHT_STYLES[single-hyphen-option];; | ||||||
|  |  | ||||||
|  | @ -0,0 +1,38 @@ | ||||||
|  | # ------------------------------------------------------------------------------------------------- | ||||||
|  | # Copyright (c) 2015 zsh-syntax-highlighting contributors | ||||||
|  | # All rights reserved. | ||||||
|  | # | ||||||
|  | # Redistribution and use in source and binary forms, with or without modification, are permitted | ||||||
|  | # provided that the following conditions are met: | ||||||
|  | # | ||||||
|  | #  * Redistributions of source code must retain the above copyright notice, this list of conditions | ||||||
|  | #    and the following disclaimer. | ||||||
|  | #  * Redistributions in binary form must reproduce the above copyright notice, this list of | ||||||
|  | #    conditions and the following disclaimer in the documentation and/or other materials provided | ||||||
|  | #    with the distribution. | ||||||
|  | #  * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors | ||||||
|  | #    may be used to endorse or promote products derived from this software without specific prior | ||||||
|  | #    written permission. | ||||||
|  | # | ||||||
|  | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR | ||||||
|  | # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND | ||||||
|  | # FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR | ||||||
|  | # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||||
|  | # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||||
|  | # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER | ||||||
|  | # IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | ||||||
|  | # OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  | # ------------------------------------------------------------------------------------------------- | ||||||
|  | # -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- | ||||||
|  | # vim: ft=zsh sw=2 ts=2 et | ||||||
|  | # ------------------------------------------------------------------------------------------------- | ||||||
|  | 
 | ||||||
|  | ZSH_HIGHLIGHT_STYLES[assign]=$unused_highlight | ||||||
|  | BUFFER='(A=(hello world))' | ||||||
|  | 
 | ||||||
|  | expected_region_highlight=( | ||||||
|  |   "1 1 $ZSH_HIGHLIGHT_STYLES[reserved-word]" # ( | ||||||
|  |   "2 4 $ZSH_HIGHLIGHT_STYLES[assign]" # A=( | ||||||
|  |   "16 16 $ZSH_HIGHLIGHT_STYLES[assign]" # ) | ||||||
|  |   "17 17 $ZSH_HIGHLIGHT_STYLES[reserved-word]" # ) | ||||||
|  | ) | ||||||
|  | @ -32,5 +32,7 @@ BUFFER='A=1 b=("foo" bar)' | ||||||
| 
 | 
 | ||||||
| expected_region_highlight=( | expected_region_highlight=( | ||||||
|   "1 3 $ZSH_HIGHLIGHT_STYLES[assign]" # A=1 |   "1 3 $ZSH_HIGHLIGHT_STYLES[assign]" # A=1 | ||||||
|  |   "5 7 $ZSH_HIGHLIGHT_STYLES[assign]" # b=( | ||||||
|   "8 12 $ZSH_HIGHLIGHT_STYLES[double-quoted-argument]" # "foo" |   "8 12 $ZSH_HIGHLIGHT_STYLES[double-quoted-argument]" # "foo" | ||||||
|  |   "17 17 $ZSH_HIGHLIGHT_STYLES[assign]" # ) | ||||||
| ) | ) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue