From c8f5d10dfe1b105f80c76f8aac66e102e93cc4b5 Mon Sep 17 00:00:00 2001 From: Daniel Shahaf Date: Mon, 8 Jun 2020 14:53:28 +0000 Subject: [PATCH] 'main': Highlight backslash escape sequences outside quotes. Fixes #631. WIP: test expectations should be updated (12 failures including cthulhu) --- docs/highlighters/main.md | 1 + highlighters/main/main-highlighter.zsh | 9 ++++++++- highlighters/main/test-data/backslash-continuation2.zsh | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/highlighters/main.md b/docs/highlighters/main.md index cc6186b..a99fabc 100644 --- a/docs/highlighters/main.md +++ b/docs/highlighters/main.md @@ -56,6 +56,7 @@ This highlighter defines the following styles: * `dollar-quoted-argument-unclosed` - unclosed dollar-quoted arguments (`` $'foo ``) * `rc-quote` - two single quotes inside single quotes when the `RC_QUOTES` option is set (`` 'foo''bar' ``) * `dollar-double-quoted-argument` - parameter expansion inside double quotes (`$foo` inside `""`) +* `back-un-quoted-argument` - backslash escape sequences outside quotes (`\"` in `print -r \"bar\"`) * `back-double-quoted-argument` - backslash escape sequences inside double-quoted arguments (`\"` in `"foo\"bar"`) * `back-dollar-quoted-argument` - backslash escape sequences inside dollar-quoted arguments (`\x` in `$'\x48'`) * `assign` - parameter assignments (`x=foo` and `x=( )`) diff --git a/highlighters/main/main-highlighter.zsh b/highlighters/main/main-highlighter.zsh index e59c61c..2712abe 100644 --- a/highlighters/main/main-highlighter.zsh +++ b/highlighters/main/main-highlighter.zsh @@ -55,6 +55,7 @@ : ${ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]:=fg=yellow} : ${ZSH_HIGHLIGHT_STYLES[rc-quote]:=fg=cyan} : ${ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]:=fg=cyan} +: ${ZSH_HIGHLIGHT_STYLES[back-un-quoted-argument]:=fg=cyan} : ${ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]:=fg=cyan} : ${ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]:=fg=cyan} : ${ZSH_HIGHLIGHT_STYLES[assign]:=none} @@ -1328,7 +1329,13 @@ _zsh_highlight_main_highlighter_highlight_argument() i=${arg[(ib.i.)[\\\'\"\`\$\<\>\*\?]]} case "$arg[$i]" in "") break;; - "\\") (( i += 1 )); continue;; + "\\") + highlights+=( + $(( start_pos + i - 1 )) $((start_pos + i + 1)) back-un-quoted-argument + ) + (( i += 1 )) + continue + ;; "'") _zsh_highlight_main_highlighter_highlight_single_quote $i (( i = REPLY )) diff --git a/highlighters/main/test-data/backslash-continuation2.zsh b/highlighters/main/test-data/backslash-continuation2.zsh index 9e2ca62..87e58d6 100644 --- a/highlighters/main/test-data/backslash-continuation2.zsh +++ b/highlighters/main/test-data/backslash-continuation2.zsh @@ -34,4 +34,5 @@ expected_region_highlight=( '1 4 builtin' # echo '6 18 default "issue #705"' # foo\\\nbar"baz" '14 18 double-quoted-argument "issue #705"' # "baz" + # TODO: when fixing this, see if we can highlight the backslash-newline sequence as a comment. )