1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-30 04:10:54 -08:00

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.
This commit is contained in:
Tom Tromey 2017-03-13 21:53:59 +01:00
parent ac2ca82eb1
commit f4ecb65f33
2 changed files with 44 additions and 6 deletions

View file

@ -1713,7 +1713,7 @@ This performs fontification according to `js--class-styles'."
(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 @@ This performs fontification according to `js--class-styles'."
(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 /.../.

View file

@ -140,6 +140,43 @@ if (!/[ (:,='\"]/.test(value)) {
(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