emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 101a3b7: Suppress a misleading message when closing a paren in a


From: Lars Ingebrigtsen
Subject: master 101a3b7: Suppress a misleading message when closing a paren in a regex
Date: Fri, 30 Oct 2020 08:24:09 -0400 (EDT)

branch: master
commit 101a3b78309dff5a7466094a893c5582093a6533
Author: Harald Jörg <haj@posteo.de>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    Suppress a misleading message when closing a paren in a regex
    
    * lisp/progmodes/cperl-mode.el (cperl-forward-re): Suppress an
    error message about "End of string/RE not found" when we are
    at the end of a narrowed buffer where the end of a RE is
    temporarily unavailable (Bug#37127).
    
    * test/lisp/progmodes/cperl-mode-tests.el (cperl-bug37127):
    Add a test to verify that the message is suppressed when
    inappropriate, but appears when the RE *is* incomplete.
---
 lisp/progmodes/cperl-mode.el            |  7 +++++++
 test/lisp/progmodes/cperl-mode-tests.el | 29 +++++++++++++++++++++++++++++
 2 files changed, 36 insertions(+)

diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el
index ebbea6b..94f42cb 100644
--- a/lisp/progmodes/cperl-mode.el
+++ b/lisp/progmodes/cperl-mode.el
@@ -3225,6 +3225,13 @@ modify syntax-type text property if the situation is too 
hard."
                 (and cperl-brace-recursing
                      (or (eq ostart  ?\{)
                          (eq starter ?\{)))
+                ;; If we are at the end of a narrowed buffer, then a
+                ;; scan error should not be reported to the user.
+                ;; This situation actually happens when a closing
+                ;; paren is entered in a regular expression.
+                ;; Reported in Bug#37127.
+                (and (eobp) (buffer-narrowed-p)
+                     (equal (car bb) 'scan-error))
                 (message
                  "End of `%s%s%c ... %c' string/RE not found: %s"
                  argument
diff --git a/test/lisp/progmodes/cperl-mode-tests.el 
b/test/lisp/progmodes/cperl-mode-tests.el
index 9b486ae..75010f7 100644
--- a/test/lisp/progmodes/cperl-mode-tests.el
+++ b/test/lisp/progmodes/cperl-mode-tests.el
@@ -220,4 +220,33 @@ point in the distant past, and is still broken in 
perl-mode. "
         (should (equal (nth 3 (syntax-ppss)) nil))
         (should (equal (nth 4 (syntax-ppss)) t))))))
 
+(ert-deftest cperl-bug37127 ()
+  "Verify that closing a paren in a regex goes without a message.
+Also check that the message is issued if the regex terminator is
+missing."
+  (let (collected-messages)
+    ;; Part one: Regex is ok, no messages
+    (ert-with-message-capture collected-messages
+      (with-temp-buffer
+        (insert "$_ =~ /(./;")
+        (cperl-mode)
+        (goto-char (point-min))
+        (search-forward ".")
+        (let ((last-command-event ?\)))
+          (cperl-electric-rparen 1)
+          (cperl-find-pods-heres (point-min) (point-max) t)))
+      (should (string-equal collected-messages "")))
+    ;; part two: Regex terminator missing -> message
+    (ert-with-message-capture collected-messages
+      (with-temp-buffer
+        (insert "$_ =~ /(..;")
+        (goto-char (point-min))
+        (cperl-mode)
+        (search-forward ".")
+        (let ((last-command-event ?\)))
+          (cperl-electric-rparen 1)
+          (cperl-find-pods-heres (point-min) (point-max) t)))
+      (should (string-match "^End of .* string/RE"
+                            collected-messages)))))
+
 ;;; cperl-mode-tests.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]