* lisp/progmodes/sh-script.el (sh--inside-arithmetic-expression): New func.

(sh-font-lock-open-heredoc): Use it.

Fixes: debbugs:12770
This commit is contained in:
Stefan Monnier 2012-10-30 22:45:34 -04:00
parent 86a7968c86
commit b08b6da7fe
4 changed files with 25 additions and 1 deletions

View file

@ -1,3 +1,8 @@
2012-10-31 Stefan Monnier <monnier@iro.umontreal.ca>
* progmodes/sh-script.el (sh--inside-arithmetic-expression): New func.
(sh-font-lock-open-heredoc): Use it (bug#12770).
2012-10-30 Glenn Morris <rgm@gnu.org>
* emacs-lisp/cl-extra.el (cl-mapc): Add autoload cookie. Doc fix.

View file

@ -940,6 +940,15 @@ See `sh-feature'.")
(concat "<<-?\\s-*\\\\?\\(\\(?:['\"][^'\"]+['\"]\\|\\sw\\|[-/~._]\\)+\\)"
sh-escaped-line-re "\\(\n\\)")))
(defun sh--inside-arithmetic-expression (pos)
(save-excursion
(let ((ppss (syntax-ppss pos)))
(when (nth 1 ppss)
(goto-char (nth 1 ppss))
(and (eq ?\( (char-after))
(eq ?\( (char-before))
(eq ?\$ (char-before (1- (point)))))))))
(defun sh-font-lock-open-heredoc (start string eol)
"Determine the syntax of the \\n after a <<EOF.
START is the position of <<.
@ -948,7 +957,8 @@ INDENTED is non-nil if the here document's content (and the EOF mark) can
be indented (i.e. a <<- was used rather than just <<).
Point is at the beginning of the next line."
(unless (or (memq (char-before start) '(?< ?>))
(sh-in-comment-or-string start))
(sh-in-comment-or-string start)
(sh--inside-arithmetic-expression start))
;; We're looking at <<STRING, so we add "^STRING$" to the syntactic
;; font-lock keywords to detect the end of this here document.
(let ((str (replace-regexp-in-string "['\"]" "" string))

5
test/indent/perl.perl Executable file
View file

@ -0,0 +1,5 @@
#!/usr/bin/perl
# -*- eval: (bug-reference-mode 1) -*-
$fileType_filesButNot # bug#12373?
= join( '|', map { quotemeta($_).'$' } @{$fileType->{filesButNot}} );

View file

@ -5,6 +5,10 @@ setlock -n /tmp/getmail.lock && echo getmail isn\'t running
# adsgsdg
echo -n $(( 5 << 2 ))
# This should not be treated as a heredoc (bug#12770).
2
declare -a VERSION
for i in $(ls "$PREFIX/sbin") ; do
echo -e $N')' $i