diff options
author | Daniel Colascione <dancol@dancol.org> | 2014-01-21 15:42:59 -0800 |
---|---|---|
committer | Daniel Colascione <dancol@dancol.org> | 2014-01-21 15:42:59 -0800 |
commit | 00d2a6bb2663106a6584ea229958d5bba32703d2 (patch) | |
tree | fa274994b05763327efef2c713f0dc61dff7e3f9 /lisp | |
parent | 79b61bccf841e33df9f457df1d0dc5c45667efbc (diff) | |
download | emacs-00d2a6bb2663106a6584ea229958d5bba32703d2.tar.gz |
Fix here-doc highlighting
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/ChangeLog | 9 | ||||
-rw-r--r-- | lisp/progmodes/sh-script.el | 16 |
2 files changed, 19 insertions, 6 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 94966f657c1..6bdf4463a6f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2014-01-21 Daniel Colascione <dancol@dancol.org> + + * progmodes/sh-script.el (sh--inside-noncommand-expression): + Correctly detect when we're inside an arithmetic expansion form + containing nested parenthesis. + (sh--maybe-here-document): Use `sh--inside-noncommand-expression` + to detect cases where we shouldn't expand "<<" to a heredoc + skeleton. + 2014-01-21 Stefan Monnier <monnier@iro.umontreal.ca> * emacs-lisp/eldoc.el: Properly remove message in minibuffer case. diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el index daf8d299663..f41378f2f53 100644 --- a/lisp/progmodes/sh-script.el +++ b/lisp/progmodes/sh-script.el @@ -975,11 +975,14 @@ See `sh-feature'.") (let ((ppss (syntax-ppss pos))) (when (nth 1 ppss) (goto-char (nth 1 ppss)) - (pcase (char-after) - ;; $((...)) or $[...] or ${...}. - (`?\( (and (eq ?\( (char-before)) - (eq ?\$ (char-before (1- (point)))))) - ((or `?\{ `?\[) (eq ?\$ (char-before)))))))) + (or + (pcase (char-after) + ;; ((...)) or $((...)) or $[...] or ${...}. Nested + ;; parenthesis can occur inside the first of these forms, so + ;; parse backward recursively. + (`?\( (eq ?\( (char-before))) + ((or `?\{ `?\[) (eq ?\$ (char-before)))) + (sh--inside-noncommand-expression (1- (point)))))))) (defun sh-font-lock-open-heredoc (start string eol) "Determine the syntax of the \\n after a <<EOF. @@ -4265,7 +4268,8 @@ The document is bounded by `sh-here-document-word'." (or (not (looking-back "[^<]<<")) (save-excursion (backward-char 2) - (sh-quoted-p)) + (or (sh-quoted-p) + (sh--inside-noncommand-expression (point)))) (nth 8 (syntax-ppss)) (let ((tabs (if (string-match "\\`-" sh-here-document-word) (make-string (/ (current-indentation) tab-width) ?\t) |