[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#26070: 26.0.50; js-mode slash insertion bug
From: |
Tom Tromey |
Subject: |
bug#26070: 26.0.50; js-mode slash insertion bug |
Date: |
Thu, 23 Mar 2017 21:53:11 -0600 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) |
Richard> Seems good, thanks very much.
Thanks for giving it a try.
Here's the latest version of these two patches, with test cases.
Dmitry, please let me know what you think.
Tom
commit ff870ef0324a3e5c43cf2d183df5db72e824efca
Author: Tom Tromey <tom@tromey.com>
Date: Mon Mar 13 21:53:59 2017 +0100
fix two js-mode syntax propertization bugs
Bug#26070:
* lisp/progmodes/js.el (js--syntax-propertize-regexp-regexp): Add
zero-or-one to regular expression.
(js-syntax-propertize-regexp): Update. Propertize body of regexp
literal up to END.
* test/lisp/progmodes/js-tests.el (js-mode-propertize-bug-1)
(js-mode-propertize-bug-2): New tests.
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index aed42a8..3c720c0 100644
--- a/lisp/progmodes/js.el
+++ b/lisp/progmodes/js.el
@@ -1713,7 +1713,7 @@ js--syntax-propertize-regexp-regexp
(not (any ?\] ?\\))
(and "\\" not-newline)))
"]")))
- (group "/"))
+ (group (zero-or-one "/")))
"Regular expression matching a JavaScript regexp literal.")
(defun js-syntax-propertize-regexp (end)
@@ -1721,12 +1721,13 @@ js-syntax-propertize-regexp
(when (eq (nth 3 ppss) ?/)
;; A /.../ regexp.
(goto-char (nth 8 ppss))
- (when (and (looking-at js--syntax-propertize-regexp-regexp)
- ;; Don't touch text after END.
- (<= (match-end 1) end))
- (put-text-property (match-beginning 1) (match-end 1)
+ (when (looking-at js--syntax-propertize-regexp-regexp)
+ ;; Don't touch text after END.
+ (when (> end (match-end 1))
+ (setq end (match-end 1)))
+ (put-text-property (match-beginning 1) end
'syntax-table (string-to-syntax "\"/"))
- (goto-char (match-end 0))))))
+ (goto-char end)))))
(defun js-syntax-propertize (start end)
;; JavaScript allows immediate regular expression objects, written /.../.
diff --git a/test/lisp/progmodes/js-tests.el b/test/lisp/progmodes/js-tests.el
index e030675..8e1bac1 100644
--- a/test/lisp/progmodes/js-tests.el
+++ b/test/lisp/progmodes/js-tests.el
@@ -140,6 +140,43 @@
(font-lock-ensure)
(should (eq (get-text-property (point) 'face) (caddr test))))))
+(ert-deftest js-mode-propertize-bug-1 ()
+ (with-temp-buffer
+ (js-mode)
+ (save-excursion (insert "x"))
+ (insert "/")
+ ;; The bug was a hang.
+ (should t)))
+
+(ert-deftest js-mode-propertize-bug-2 ()
+ (with-temp-buffer
+ (js-mode)
+ (insert "function f() {
+ function g()
+ {
+ 1 / 2;
+ }
+
+ function h() {
+")
+ (save-excursion
+ (insert "
+ 00000000000000000000000000000000000000000000000000;
+ 00000000000000000000000000000000000000000000000000;
+ 00000000000000000000000000000000000000000000000000;
+ 00000000000000000000000000000000000000000000000000;
+ 00000000000000000000000000000000000000000000000000;
+ 00000000000000000000000000000000000000000000000000;
+ 00000000000000000000000000000000000000000000000000;
+ 00000000000000000000000000000000000000000000000000;
+ 00;
+ }
+}
+"))
+ (insert "/")
+ ;; The bug was a hang.
+ (should t)))
+
(provide 'js-tests)
;;; js-tests.el ends here
- bug#26070: 26.0.50; js-mode slash insertion bug, Richard Copley, 2017/03/12
- bug#26070: 26.0.50; js-mode slash insertion bug, Tom Tromey, 2017/03/13
- bug#26070: 26.0.50; js-mode slash insertion bug, Richard Copley, 2017/03/13
- bug#26070: 26.0.50; js-mode slash insertion bug, Dmitry Gutov, 2017/03/14
- bug#26070: 26.0.50; js-mode slash insertion bug, Tom Tromey, 2017/03/14
- bug#26070: 26.0.50; js-mode slash insertion bug, Richard Copley, 2017/03/19
- bug#26070: 26.0.50; js-mode slash insertion bug, Tom Tromey, 2017/03/22
- bug#26070: 26.0.50; js-mode slash insertion bug, Richard Copley, 2017/03/23
- bug#26070: 26.0.50; js-mode slash insertion bug,
Tom Tromey <=
- bug#26070: 26.0.50; js-mode slash insertion bug, Dmitry Gutov, 2017/03/31