]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/simple.el (blink-matching-open): Fix bug#37127
authorStefan Monnier <monnier@iro.umontreal.ca>
Fri, 30 Oct 2020 22:10:06 +0000 (18:10 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Fri, 30 Oct 2020 22:10:06 +0000 (18:10 -0400)
Don't call `syntax-propertize` from within narrowing

* lisp/progmodes/cperl-mode.el (cperl-forward-re): Revert last patch,
since it is now redundant.

* test/lisp/progmodes/cperl-mode-tests.el (cperl-bug37127):
Remove unused var; fix test so it really catches the previous bug;
tweak the code to use mode-agnostic commands so it also works in `perl-mode`.

lisp/progmodes/cperl-mode.el
lisp/simple.el
test/lisp/progmodes/cperl-mode-tests.el

index 94f42cb2bc4b8e2ef7c81135fecaa2e511848470..ebbea6bed926b4edaacc9e9559c95bae1e40b584 100644 (file)
@@ -3225,13 +3225,6 @@ 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
index 2e40e3261c967a1ef4c5b09231fcd593a572b3b2..a9d79d031e86a9b45141e1aa863eb7caa330ad56 100644 (file)
@@ -8014,6 +8014,7 @@ The function should return non-nil if the two tokens do not match.")
           (blinkpos
             (save-excursion
               (save-restriction
+               (syntax-propertize (point))
                 (if blink-matching-paren-distance
                     (narrow-to-region
                      (max (minibuffer-prompt-end) ;(point-min) unless minibuf.
@@ -8024,7 +8025,6 @@ The function should return non-nil if the two tokens do not match.")
                             (not blink-matching-paren-dont-ignore-comments))))
                   (condition-case ()
                       (progn
-                       (syntax-propertize (point))
                         (forward-sexp -1)
                         ;; backward-sexp skips backward over prefix chars,
                         ;; so move back to the matching paren.
index 75010f7d0f31761a9a537f6138cbae32be5a3cdd..9a7b5e4d6dd8c6dea1fd2c4fbb4a09a2640145e9 100644 (file)
@@ -224,28 +224,35 @@ point in the distant past, and is still broken in perl-mode. "
   "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
+  ;; Part one: Regex is ok, no messages
+  (ert-with-message-capture collected-messages
+    (with-temp-buffer
+      (insert "$_ =~ /(./;")
+      (funcall cperl-test-mode)
+      (goto-char (point-min))
+      (search-forward ".")
+      (let ((last-command-event ?\))
+            ;; Don't emit "Matches ..." even if not visible (e.g. in batch).
+            (blink-matching-paren 'jump-offscreen))
+        (self-insert-command 1)
+        ;; `self-insert-command' doesn't call `blink-matching-open' in
+        ;; batch mode, so we need to call it explicitly.
+        (blink-matching-open))
+      (syntax-propertize (point-max)))
+    (should (string-equal collected-messages "")))
+  ;; part two: Regex terminator missing -> message
+  (when (eq cperl-test-mode #'cperl-mode)
+    ;; This test is only run in `cperl-mode' because only cperl-mode
+    ;; emits a message to warn about such unclosed REs.
     (ert-with-message-capture collected-messages
       (with-temp-buffer
         (insert "$_ =~ /(..;")
         (goto-char (point-min))
-        (cperl-mode)
+        (funcall cperl-test-mode)
         (search-forward ".")
         (let ((last-command-event ?\)))
-          (cperl-electric-rparen 1)
-          (cperl-find-pods-heres (point-min) (point-max) t)))
+          (self-insert-command 1))
+        (syntax-propertize (point-max)))
       (should (string-match "^End of .* string/RE"
                             collected-messages)))))