diff --git a/highlighters/main/main-highlighter.zsh b/highlighters/main/main-highlighter.zsh index 7b9fbd3..04b6ece 100644 --- a/highlighters/main/main-highlighter.zsh +++ b/highlighters/main/main-highlighter.zsh @@ -737,9 +737,17 @@ _zsh_highlight_main_highlighter_highlight_list() else style=unknown-token fi - if [[ $arg == (';'|$'\n') ]] && $in_array_assignment; then + if [[ $arg == $'\n' ]] && $in_array_assignment; then # literal newline inside an array assignment next_word=':regular:' + elif [[ $arg == ';' ]] && $in_array_assignment; then + # literal semicolon inside an array assignment + # + # This is parsed the same way as a literal newline. Nevertheless, + # highlight it as an error since it's probably unintended. Compare + # issue #691. + next_word=':regular:' + style=unknown-token else next_word=':start:' highlight_glob=true diff --git a/highlighters/main/test-data/array-cmdsep2.zsh b/highlighters/main/test-data/array-cmdsep2.zsh index 8b4a2eb..2d2c865 100644 --- a/highlighters/main/test-data/array-cmdsep2.zsh +++ b/highlighters/main/test-data/array-cmdsep2.zsh @@ -33,7 +33,7 @@ BUFFER=$'a=( foo ; bar )' expected_region_highlight=( '1 3 assign' # a=( '5 7 default' # foo - '9 9 unknown-token "fixed in the after-next (grandchild) commit"' # ; + '9 9 unknown-token' # ; (not commandseparator; see highlighter source code) '11 13 default' # bar '15 15 assign' # ) )