From ade4b28d2df365387f86a2f5824822e4a430d382 Mon Sep 17 00:00:00 2001 From: Daniel Shahaf Date: Sun, 15 Mar 2020 17:42:25 +0000 Subject: [PATCH] 'main': Fix issue #677, concerning multiline aliases. The fix is to exempt such aliases from the empty commands sanity check. --- changelog.md | 5 +++++ highlighters/main/main-highlighter.zsh | 12 ++++++++++-- highlighters/main/test-data/alias-comment1.zsh | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/changelog.md b/changelog.md index 947cdb5..72de00d 100644 --- a/changelog.md +++ b/changelog.md @@ -85,6 +85,10 @@ `_zsh_highlight_main__precmd_hook:1: array parameter _zsh_highlight_main__command_type_cache set in enclosing scope in function _zsh_highlight_main__precmd_hook` [#727, #731, #732, #733] +- Fix highlighting of alias whose definitions use a simple command terminator + (such as `;`, `|`, `&&`) before a newline + [#677; had regressed in 0.7.0] + # Changes in version 0.7.1 - Remove out-of-date information from the 0.7.0 changelog. @@ -159,6 +163,7 @@ Known issues include: before a newline will incorrectly be highlighted as an error. See issue #677 for examples and workarounds. [#677] + [UPDATE: Fixed in 0.8.0] # Changes in version 0.6.0 diff --git a/highlighters/main/main-highlighter.zsh b/highlighters/main/main-highlighter.zsh index 5d108ac..9bf0e3a 100644 --- a/highlighters/main/main-highlighter.zsh +++ b/highlighters/main/main-highlighter.zsh @@ -854,9 +854,17 @@ _zsh_highlight_main_highlighter_highlight_list() style=commandseparator elif [[ $this_word == *':start:'* ]] && [[ $arg == $'\n' ]]; then style=commandseparator + elif [[ $this_word == *':start:'* ]] && [[ $arg == ';' ]] && (( in_alias )); then + style=commandseparator else - # This highlights empty commands (semicolon follows nothing) as an error. - # Zsh accepts them, though. + # Empty commands (semicolon follows nothing) are valid syntax. + # However, in interactive use they are likely to be erroneous; + # therefore, we highlight them as errors. + # + # Alias definitions are exempted from this check to allow multiline aliases + # with explicit (redundant) semicolons: «alias foo=$'bar;\nbaz'» (issue #677). + # + # See also #691 about possibly changing the style used here. style=unknown-token fi diff --git a/highlighters/main/test-data/alias-comment1.zsh b/highlighters/main/test-data/alias-comment1.zsh index 8618575..bae7ef6 100644 --- a/highlighters/main/test-data/alias-comment1.zsh +++ b/highlighters/main/test-data/alias-comment1.zsh @@ -33,5 +33,5 @@ alias x=$'# foo\npwd' BUFFER='x' expected_region_highlight=( - '1 1 alias "issue #677"' # x + '1 1 alias' # x )