From 0f11d80968e89071c0c978a6c7b50d11bcc744c5 Mon Sep 17 00:00:00 2001 From: Daniel Shahaf Date: Mon, 8 Jun 2020 14:23:43 +0000 Subject: [PATCH] 'main': Highlight the parentheses of array assignments as reserved words. Fixes #585. --- changelog.md | 4 ++++ highlighters/main/main-highlighter.zsh | 5 ++++- highlighters/main/test-data/array-cmdsep1.zsh | 1 + highlighters/main/test-data/array-cmdsep2.zsh | 2 ++ highlighters/main/test-data/array-cmdsep3.zsh | 2 ++ highlighters/main/test-data/assign-append.zsh | 2 ++ highlighters/main/test-data/assign-array.zsh | 2 ++ highlighters/main/test-data/assign-array2.zsh | 2 ++ highlighters/main/test-data/assign-array3.zsh | 2 ++ highlighters/main/test-data/assign.zsh | 2 ++ highlighters/main/test-data/bang-assign-array.zsh | 2 ++ highlighters/main/test-data/multiline-array-assignment1.zsh | 2 ++ .../main/test-data/param-positional-in-array-append.zsh | 1 + 13 files changed, 28 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index 1dd1c1d..d68d15c 100644 --- a/changelog.md +++ b/changelog.md @@ -85,6 +85,10 @@ - Highlight arithmetic expansions (e.g., `$(( 42 ))`) [#607 #649 #704] +- Highlight the parentheses of array assignments as reserved words (`foo=( bar )`). + The `assign` style remains supported and has precedence. + [#585] + # Changes in version 0.7.1 - Remove out-of-date information from the 0.7.0 changelog. diff --git a/highlighters/main/main-highlighter.zsh b/highlighters/main/main-highlighter.zsh index 6b3610c..25cbb0d 100644 --- a/highlighters/main/main-highlighter.zsh +++ b/highlighters/main/main-highlighter.zsh @@ -1007,6 +1007,7 @@ _zsh_highlight_main_highlighter_highlight_list() saw_assignment=true if [[ $arg[i] == '(' ]]; then in_array_assignment=true + _zsh_highlight_main_add_region_highlight start_pos+i-1 start_pos+i reserved-word else # assignment to a scalar parameter. # (For array assignments, the command doesn't start until the ")" token.) @@ -1088,9 +1089,11 @@ _zsh_highlight_main_highlighter_highlight_list() ($'\x29') # subshell or end of array assignment if $in_array_assignment; then - style=assign + _zsh_highlight_main_add_region_highlight $start_pos $end_pos assign + _zsh_highlight_main_add_region_highlight $start_pos $end_pos reserved-word in_array_assignment=false next_word+=':start:' + continue elif (( in_redirection )); then style=unknown-token else diff --git a/highlighters/main/test-data/array-cmdsep1.zsh b/highlighters/main/test-data/array-cmdsep1.zsh index 790c030..2fd55c0 100644 --- a/highlighters/main/test-data/array-cmdsep1.zsh +++ b/highlighters/main/test-data/array-cmdsep1.zsh @@ -33,6 +33,7 @@ bar(){} expected_region_highlight=( '1 3 assign' # a=( + '3 3 reserved-word' # ( '5 7 default' # foo '9 9 unknown-token' # | # zsh reports a parse error at this point. Nevertheless, we test how we diff --git a/highlighters/main/test-data/array-cmdsep2.zsh b/highlighters/main/test-data/array-cmdsep2.zsh index 2d2c865..0bda676 100644 --- a/highlighters/main/test-data/array-cmdsep2.zsh +++ b/highlighters/main/test-data/array-cmdsep2.zsh @@ -32,8 +32,10 @@ BUFFER=$'a=( foo ; bar )' expected_region_highlight=( '1 3 assign' # a=( + '3 3 reserved-word' # ( '5 7 default' # foo '9 9 unknown-token' # ; (not commandseparator; see highlighter source code) '11 13 default' # bar '15 15 assign' # ) + '15 15 reserved-word' # ) ) diff --git a/highlighters/main/test-data/array-cmdsep3.zsh b/highlighters/main/test-data/array-cmdsep3.zsh index def01b0..b4b3687 100644 --- a/highlighters/main/test-data/array-cmdsep3.zsh +++ b/highlighters/main/test-data/array-cmdsep3.zsh @@ -32,8 +32,10 @@ BUFFER=$'a=( foo \n bar )' expected_region_highlight=( '1 3 assign' # a=( + '3 3 reserved-word' # ( '5 7 default' # foo '9 9 commandseparator' # \n '11 13 default' # bar '15 15 assign' # ) + '15 15 reserved-word' # ) ) diff --git a/highlighters/main/test-data/assign-append.zsh b/highlighters/main/test-data/assign-append.zsh index eb9fbbd..feb68e5 100644 --- a/highlighters/main/test-data/assign-append.zsh +++ b/highlighters/main/test-data/assign-append.zsh @@ -31,7 +31,9 @@ BUFFER='a+=(lorem ipsum)' expected_region_highlight=( "1 4 assign" # a+=( + "4 4 reserved-word" # ( "5 9 default" # lorem "11 15 default" # ipsum "16 16 assign" # ) + "16 16 reserved-word" # ) ) diff --git a/highlighters/main/test-data/assign-array.zsh b/highlighters/main/test-data/assign-array.zsh index 0624f9b..ef0a666 100644 --- a/highlighters/main/test-data/assign-array.zsh +++ b/highlighters/main/test-data/assign-array.zsh @@ -32,8 +32,10 @@ BUFFER='(A=(hello world))' expected_region_highlight=( "1 1 reserved-word" # ( "2 4 assign" # A=( + "4 4 reserved-word" # ( "5 9 default" # hello "11 15 default" # world "16 16 assign" # ) + "16 16 reserved-word" # ) "17 17 reserved-word" # ) ) diff --git a/highlighters/main/test-data/assign-array2.zsh b/highlighters/main/test-data/assign-array2.zsh index cdc9e63..2d48721 100644 --- a/highlighters/main/test-data/assign-array2.zsh +++ b/highlighters/main/test-data/assign-array2.zsh @@ -31,8 +31,10 @@ BUFFER='A=(hello world) ls' expected_region_highlight=( "1 3 assign" # A=( + "3 3 reserved-word" # ( "4 8 default" # hello "10 14 default" # world "15 15 assign" # ) + "15 15 reserved-word" # ) "17 18 command" # ls ) diff --git a/highlighters/main/test-data/assign-array3.zsh b/highlighters/main/test-data/assign-array3.zsh index 986d71f..5eb645e 100644 --- a/highlighters/main/test-data/assign-array3.zsh +++ b/highlighters/main/test-data/assign-array3.zsh @@ -31,9 +31,11 @@ BUFFER='A=(hello world) b=42' expected_region_highlight=( "1 3 assign" # A=( + "3 3 reserved-word" # ( "4 8 default" # hello "10 14 default" # world "15 15 assign" # ) + "15 15 reserved-word" # ) "17 20 assign" # b=42 "19 20 default" # 42 ) diff --git a/highlighters/main/test-data/assign.zsh b/highlighters/main/test-data/assign.zsh index 6e797ac..c6e8532 100644 --- a/highlighters/main/test-data/assign.zsh +++ b/highlighters/main/test-data/assign.zsh @@ -33,8 +33,10 @@ expected_region_highlight=( "1 3 assign" # A=1 "3 3 default" # 1 "5 7 assign" # b=( + "7 7 reserved-word" # ( "8 12 default" # "foo" "8 12 double-quoted-argument" # "foo" "14 16 default" # bar "17 17 assign" # ) + "17 17 reserved-word" # ) ) diff --git a/highlighters/main/test-data/bang-assign-array.zsh b/highlighters/main/test-data/bang-assign-array.zsh index 77b57e6..a54cf2d 100644 --- a/highlighters/main/test-data/bang-assign-array.zsh +++ b/highlighters/main/test-data/bang-assign-array.zsh @@ -32,9 +32,11 @@ BUFFER=$'foo=(bar abaz) \! ls' expected_region_highlight=( '1 5 assign' # foo=( + '5 5 reserved-word' # ( '6 8 default' # bar '10 13 default' # abaz '14 14 assign' # ) + '14 14 reserved-word' # ) '16 16 unknown-token' # \! '18 19 command' # ls ) diff --git a/highlighters/main/test-data/multiline-array-assignment1.zsh b/highlighters/main/test-data/multiline-array-assignment1.zsh index 2926d93..8906cfd 100644 --- a/highlighters/main/test-data/multiline-array-assignment1.zsh +++ b/highlighters/main/test-data/multiline-array-assignment1.zsh @@ -32,8 +32,10 @@ BUFFER=$'foo=(\nbar) env' expected_region_highlight=( '1 5 assign' # foo=( + '5 5 reserved-word' # ( '6 6 commandseparator' # \n '7 9 default' # bar '10 10 assign' # ) + '10 10 reserved-word' # ) '12 14 precommand' # env ) diff --git a/highlighters/main/test-data/param-positional-in-array-append.zsh b/highlighters/main/test-data/param-positional-in-array-append.zsh index 2af7f38..bd39e02 100644 --- a/highlighters/main/test-data/param-positional-in-array-append.zsh +++ b/highlighters/main/test-data/param-positional-in-array-append.zsh @@ -34,5 +34,6 @@ BUFFER=$'l+=( $1' expected_region_highlight=( '1 4 assign' # l+=( + '4 4 reserved-word' # ( '6 7 default' # $1 )