'main': Fix the last commit's issue concerning parameter expansion at command word.
This commit is contained in:
		
							parent
							
								
									76d61360a7
								
							
						
					
					
						commit
						bf055f7df2
					
				|  | @ -499,6 +499,26 @@ _zsh_highlight_main_highlighter_highlight_list() | |||
|       } | ||||
|     fi | ||||
| 
 | ||||
|     # Expand parameters. | ||||
|     # | ||||
|     # ### For now, expand just '$foo', like that, without braces or anything. | ||||
|     () { | ||||
|       # That's not entirely correct --- if the parameter's value happens to be a reserved | ||||
|       # word, the parameter expansion will be highlighted as a reserved word --- but that | ||||
|       # incorrectness is outweighed by the usability improvement of permitting the use of | ||||
|       # parameters that refer to commands, functions, and builtins. | ||||
|       local -a match mbegin mend | ||||
|       local MATCH; integer MBEGIN MEND | ||||
|       if [[ $res == none ]] && (( ${+parameters} )) && | ||||
|          [[ ${arg[1]} == \$ ]] && [[ ${arg:1} =~ ^([A-Za-z_][A-Za-z0-9_]*|[0-9]+)$ ]] && | ||||
|          (( ${+parameters[(e)${MATCH}]} )) && [[ ${parameters[(e)$MATCH]} != *special* ]] | ||||
|          then | ||||
|         arg=${(P)MATCH} | ||||
|         _zsh_highlight_main__type "$arg" | ||||
|         res=$REPLY | ||||
|       fi | ||||
|     } | ||||
| 
 | ||||
|     # Special-case the first word after 'sudo'. | ||||
|     if (( ! in_redirection )); then | ||||
|       if [[ $this_word == *':sudo_opt:'* ]] && [[ $arg != -* ]]; then | ||||
|  | @ -539,23 +559,6 @@ _zsh_highlight_main_highlighter_highlight_list() | |||
|       next_word+=':sudo_opt:' | ||||
|       next_word+=':start:' | ||||
|      else | ||||
|       () { | ||||
|         # Special-case: command word is '$foo', like that, without braces or anything. | ||||
|         # | ||||
|         # That's not entirely correct --- if the parameter's value happens to be a reserved | ||||
|         # word, the parameter expansion will be highlighted as a reserved word --- but that | ||||
|         # incorrectness is outweighed by the usability improvement of permitting the use of | ||||
|         # parameters that refer to commands, functions, and builtins. | ||||
|         local -a match mbegin mend | ||||
|         local MATCH; integer MBEGIN MEND | ||||
|         if [[ $res == none ]] && (( ${+parameters} )) && | ||||
|            [[ ${arg[1]} == \$ ]] && [[ ${arg:1} =~ ^([A-Za-z_][A-Za-z0-9_]*|[0-9]+)$ ]] && | ||||
|            (( ${+parameters[(e)${MATCH}]} )) && [[ ${parameters[(e)$MATCH]} != *special* ]] | ||||
|            then | ||||
|           _zsh_highlight_main__type ${(P)MATCH} | ||||
|           res=$REPLY | ||||
|         fi | ||||
|       } | ||||
|       case $res in | ||||
|         reserved)       # reserved word | ||||
|                         style=reserved-word | ||||
|  |  | |||
|  | @ -29,6 +29,8 @@ | |||
| 
 | ||||
| local x=/usr/bin/env | ||||
| local y=sudo | ||||
| sudo(){} | ||||
| 
 | ||||
| BUFFER='$x "argument"; $y' | ||||
| 
 | ||||
| expected_region_highlight=( | ||||
|  | @ -36,5 +38,5 @@ expected_region_highlight=( | |||
|   "4 13 default" # "argument" | ||||
|   "4 13 double-quoted-argument" # "argument" | ||||
|   "14 14 commandseparator" # ; | ||||
|   "16 17 precommand 'parameter expansion precedes precommand recognition'" # $y (sudo) | ||||
|   "16 17 precommand" # $y (sudo) | ||||
| ) | ||||
|  |  | |||
|  | @ -29,10 +29,12 @@ | |||
| 
 | ||||
| # «/usr» at this point would be highlighted as path_prefix; so should | ||||
| # a parameter that expands to an equivalent string be highlighted. | ||||
| # | ||||
| # More complicated parameter substitutions aren't eval'd; issue #328. | ||||
| BUFFER='$PWD; ${PWD}' | ||||
| 
 | ||||
| expected_region_highlight=( | ||||
|   "1 4 unknown-token" # $PWD - not eval'd; issue #328 | ||||
|   "1 4 path" # $PWD | ||||
|   "5 5 commandseparator" # ; | ||||
|   "7 12 unknown-token" # ${PWD} | ||||
| ) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue