[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 9b9dcc146ba: ; cperl-mode.el: Fix two indentation bugs (Bug#11733
From: |
Harald Jörg |
Subject: |
master 9b9dcc146ba: ; cperl-mode.el: Fix two indentation bugs (Bug#11733) |
Date: |
Sat, 1 Jul 2023 18:37:41 -0400 (EDT) |
branch: master
commit 9b9dcc146ba8132ef02afd12f20b302a78c7bbe2
Author: Harald Jörg <haj@posteo.de>
Commit: Harald Jörg <haj@posteo.de>
; cperl-mode.el: Fix two indentation bugs (Bug#11733)
* lisp/progmodes/cperl-mode.el (cperl-sniff-for-indent): Detect
whether we have a label or a regex/string.
(cperl-calculate-indent): Check for things which look like labels
but aren't.
* test/lisp/progmodes/cperl-mode-tests.el (cperl-test-bug-11733):
Test the examples provided in the bug report.
* test/lisp/progmodes/cperl-mode-resources/cperl-bug-11733.pl:
Examples from the bug report.
---
lisp/progmodes/cperl-mode.el | 10 +++--
.../cperl-mode-resources/cperl-bug-11733.pl | 50 ++++++++++++++++++++++
test/lisp/progmodes/cperl-mode-tests.el | 11 +++++
3 files changed, 68 insertions(+), 3 deletions(-)
diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el
index c1e55944b7e..1abe57c15ea 100644
--- a/lisp/progmodes/cperl-mode.el
+++ b/lisp/progmodes/cperl-mode.el
@@ -2866,10 +2866,13 @@ Will not look before LIM."
;; Back up over label lines, since they don't
;; affect whether our line is a continuation.
;; (Had \, too)
- (while (and (eq (preceding-char) ?:)
+ (while (save-excursion
+ (and (eq (preceding-char) ?:)
(re-search-backward
(rx (sequence (eval cperl--label-rx) point))
- nil t))
+ nil t)
+ ;; Ignore if in comment or RE
+ (not (nth 3 (syntax-ppss)))))
;; This is always FALSE?
(if (eq (preceding-char) ?\,)
;; Will go to beginning of line, essentially.
@@ -3129,7 +3132,8 @@ and closing parentheses and brackets."
;; Now it is a hash reference
(+ cperl-indent-level cperl-close-paren-offset))
;; Labels do not take :: ...
- (if (looking-at "\\(\\w\\|_\\)+[ \t]*:[^:]")
+ (if (and (looking-at "\\(\\w\\|_\\)+[ \t]*:[^:]")
+ (not (looking-at (rx (eval cperl--false-label-rx)))))
(if (> (current-indentation) cperl-min-label-indent)
(- (current-indentation) cperl-label-offset)
;; Do not move `parse-data', this should
diff --git a/test/lisp/progmodes/cperl-mode-resources/cperl-bug-11733.pl
b/test/lisp/progmodes/cperl-mode-resources/cperl-bug-11733.pl
new file mode 100644
index 00000000000..a474e431222
--- /dev/null
+++ b/test/lisp/progmodes/cperl-mode-resources/cperl-bug-11733.pl
@@ -0,0 +1,50 @@
+# This resource file can be run with cperl--run-testcases from
+# cperl-tests.el and works with both perl-mode and cperl-mode.
+
+# -------- Multiline declaration: input -------
+#!/usr/bin/env perl
+# -*- mode: cperl -*-
+
+sub foo
+ {
+ }
+
+sub bar
+ {
+ }
+# -------- Multiline declaration: expected output -------
+#!/usr/bin/env perl
+# -*- mode: cperl -*-
+
+sub foo
+{
+}
+
+sub bar
+{
+}
+# -------- Multiline declaration: end -------
+
+# -------- Fred Colon at work: input --------
+#!/usr/bin/env perl
+# -*- mode: cperl -*-
+
+while (<>)
+{
+m:^ \d+ p:
+or die;
+m:^ \d+ :
+or die;
+}
+# -------- Fred Colon at work: expected output --------
+#!/usr/bin/env perl
+# -*- mode: cperl -*-
+
+while (<>)
+ {
+ m:^ \d+ p:
+ or die;
+ m:^ \d+ :
+ or die;
+ }
+# -------- Fred Colon at work: end --------
diff --git a/test/lisp/progmodes/cperl-mode-tests.el
b/test/lisp/progmodes/cperl-mode-tests.el
index fced2171767..8162953cefb 100644
--- a/test/lisp/progmodes/cperl-mode-tests.el
+++ b/test/lisp/progmodes/cperl-mode-tests.el
@@ -855,6 +855,17 @@ under timeout control."
(should (string-match
"poop ('foo', \n 'bar')" (buffer-string))))))
+(ert-deftest cperl-test-bug-11733 ()
+ "Verify indentation of braces after newline and non-labels."
+ (skip-unless (eq cperl-test-mode #'cperl-mode))
+ (cperl--run-test-cases
+ (ert-resource-file "cperl-bug-11733.pl")
+ (goto-char (point-min))
+ (while (null (eobp))
+ (cperl-indent-command)
+ (forward-line 1))))
+
+
(ert-deftest cperl-test-bug-11996 ()
"Verify that we give the right syntax property to a backslash operator."
(with-temp-buffer
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 9b9dcc146ba: ; cperl-mode.el: Fix two indentation bugs (Bug#11733),
Harald Jörg <=