]> git.eshelyaron.com Git - emacs.git/commitdiff
; cperl-mode.el: Fix indentation issues after a format declaration.
authorHarald Jörg <haj@posteo.de>
Wed, 18 Oct 2023 14:25:56 +0000 (16:25 +0200)
committerHarald Jörg <haj@posteo.de>
Wed, 18 Oct 2023 14:29:46 +0000 (16:29 +0200)
* lisp/progmodes/cperl-mode.el (cperl-sniff-for-indent): Recognize
the end of a format declaration as a statement boundary.  This fixes
indentation if several format declarations immediately follow each
other.
(cperl-find-pods-heres): use the correct capture group for the
name of an unterminated format declaration.  Fix an out of
boundary error when a format declaration is typed at the end of a
buffer (Bug#66139).

lisp/progmodes/cperl-mode.el

index 6ef552137a791fc5c453b9ad1a0ebc0b262071de..d525b069407162491b34bbb92be7d7561afd1c63 100644 (file)
@@ -2853,6 +2853,7 @@ Will not look before LIM."
                   ;; in which case this line is the first argument decl.
                   (skip-chars-forward " \t")
                   (cperl-backward-to-noncomment (or old-indent (point-min)))
+                   ;; Determine whether point is between statements
                   (setq state
                         (or (bobp)
                             (eq (point) old-indent) ; old-indent was at comment
@@ -2871,7 +2872,8 @@ Will not look before LIM."
                                    (looking-at
                                      (rx (sequence (0+ blank)
                                                    (eval cperl--label-rx))))))
-                            (get-text-property (point) 'first-format-line)))
+                            (get-text-property (1- (point)) 'first-format-line)
+                             (equal (get-text-property (point) 'syntax-type) 'format)))
 
                   ;; Look at previous line that's at column 0
                   ;; to determine whether we are in top-level decls
@@ -4201,9 +4203,8 @@ recursive calls in starting lines of here-documents."
                ;; 1+6=7 extra () before this:
                ;;"^[ \t]*\\(format\\)[ \t]*\\([a-zA-Z0-9_]+\\)?[ \t]*=[ \t]*$"
                (setq b (point)
-                     name (if (match-beginning 8) ; 7 + 1
-                              (buffer-substring (match-beginning 8) ; 7 + 1
-                                                (match-end 8)) ; 7 + 1
+                     name (if (match-beginning 9) ; 7 + 2
+                               (match-string-no-properties 9)        ; 7 + 2
                             "")
                      tb (match-beginning 0))
                (setq argument nil)
@@ -4236,10 +4237,10 @@ recursive calls in starting lines of here-documents."
                (if (looking-at "^\\.$") ; ";" is not supported yet
                    (progn
                      ;; Highlight the ending delimiter
-                     (cperl-postpone-fontification (point) (+ (point) 2)
+                     (cperl-postpone-fontification (point) (+ (point) 1)
                                                    'face font-lock-string-face)
-                     (cperl-commentify (point) (+ (point) 2) nil)
-                     (cperl-put-do-not-fontify (point) (+ (point) 2) t))
+                     (cperl-commentify (point) (+ (point) 1) nil)
+                     (cperl-put-do-not-fontify (point) (+ (point) 1) t))
                  (setq warning-message
                         (format "End of format `%s' not found." name))
                  (or (car err-l) (setcar err-l b)))