'main': Break out an anonymous function into a named function.
This is in order to allow it to be reused. No functional change.
This commit is contained in:
		
							parent
							
								
									5d139fcd94
								
							
						
					
					
						commit
						7678a8a227
					
				|  | @ -420,6 +420,56 @@ _zsh_highlight_highlighter_main_paint() | |||
|   done | ||||
| } | ||||
| 
 | ||||
| # Try to expand $1, if it's possible to do so safely. | ||||
| #  | ||||
| # Uses two parameters from the caller: $parameter_name_pattern and $res. | ||||
| # | ||||
| # If expansion was done, set $reply to the expansion and return true. | ||||
| # Otherwise, return false. | ||||
| _zsh_highlight_main_highlighter__try_expand_parameter() | ||||
| { | ||||
|   local arg="$1" | ||||
|   unset reply | ||||
|   { | ||||
|     # ### For now, expand just '$foo' or '${foo}', possibly with braces, but with | ||||
|     # ### no other features of the parameter expansion syntax.  (No ${(x)foo}, | ||||
|     # ### no ${foo[x]}, no ${foo:-x}.) | ||||
|     { | ||||
|       local -a match mbegin mend | ||||
|       local MATCH; integer MBEGIN MEND | ||||
|       local parameter_name | ||||
|       local -a words | ||||
|       if [[ $arg[1] == '$' ]] && [[ ${arg[2]} == '{' ]] && [[ ${arg[-1]} == '}' ]]; then | ||||
|         parameter_name=${${arg:2}%?} | ||||
|       elif [[ $arg[1] == '$' ]]; then | ||||
|         parameter_name=${arg:1} | ||||
|       fi | ||||
|       if [[ $res == none ]] && zmodload -e zsh/parameter && | ||||
|          [[ ${parameter_name} =~ ^${~parameter_name_pattern}$ ]] && | ||||
|          [[ ${parameters[(e)$MATCH]} != *special* ]] | ||||
|       then | ||||
|         # Set $arg and update $res. | ||||
|         case ${(tP)MATCH} in | ||||
|           (*array*|*assoc*) | ||||
|             words=( ${(P)MATCH} ) | ||||
|             ;; | ||||
|           ("") | ||||
|             # not set | ||||
|             words=( ) | ||||
|             ;; | ||||
|           (*) | ||||
|             # scalar, presumably | ||||
|             words=( ${(P)MATCH} ) | ||||
|             ;; | ||||
|         esac | ||||
|         reply=( "${words[@]}" ) | ||||
|       else | ||||
|         return 1 | ||||
|       fi | ||||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| # $1 is the offset of $4 from the parent buffer. Added to the returned highlights. | ||||
| # $2 is the initial braces_stack (for a closing paren). | ||||
| # $3 is 1 if $4 contains the end of $BUFFER, else 0. | ||||
|  | @ -676,42 +726,13 @@ _zsh_highlight_main_highlighter_highlight_list() | |||
|     fi | ||||
| 
 | ||||
|     # Expand parameters. | ||||
|     # | ||||
|     # ### For now, expand just '$foo' or '${foo}', possibly with braces, but with | ||||
|     # ### no other features of the parameter expansion syntax.  (No ${(x)foo}, | ||||
|     # ### no ${foo[x]}, no ${foo:-x}.) | ||||
|     () { | ||||
|     if _zsh_highlight_main_highlighter__try_expand_parameter "$arg"; then | ||||
|       # 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 | ||||
|       local parameter_name | ||||
|       local -a words | ||||
|       if [[ $arg[1] == '$' ]] && [[ ${arg[2]} == '{' ]] && [[ ${arg[-1]} == '}' ]]; then | ||||
|         parameter_name=${${arg:2}%?} | ||||
|       elif [[ $arg[1] == '$' ]]; then | ||||
|         parameter_name=${arg:1} | ||||
|       fi | ||||
|       if [[ $res == none ]] && zmodload -e zsh/parameter && | ||||
|          [[ ${parameter_name} =~ ^${~parameter_name_pattern}$ ]] && | ||||
|          [[ ${parameters[(e)$MATCH]} != *special* ]] | ||||
|          then | ||||
|         # Set $arg and update $res. | ||||
|         case ${(tP)MATCH} in | ||||
|           (*array*|*assoc*) | ||||
|             words=( ${(P)MATCH} ) | ||||
|             ;; | ||||
|           ("") | ||||
|             # not set | ||||
|             words=( ) | ||||
|             ;; | ||||
|           (*) | ||||
|             # scalar, presumably | ||||
|             words=( ${(P)MATCH} ) | ||||
|             ;; | ||||
|         esac | ||||
|       () { | ||||
|         local -a words; words=( "${reply[@]}" ) | ||||
|         if (( $#words == 0 )); then | ||||
|           # Parameter elision is happening | ||||
|           (( ++in_redirection )) | ||||
|  | @ -724,8 +745,8 @@ _zsh_highlight_main_highlighter_highlight_list() | |||
|           _zsh_highlight_main__type "$arg" 0 | ||||
|           res=$REPLY | ||||
|         fi | ||||
|       fi | ||||
|     } | ||||
|       } | ||||
|     fi | ||||
| 
 | ||||
|     # Parse the sudo command line | ||||
|     if (( ! in_redirection )); then | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue