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:
parent
ac2ca82eb1
commit
f4ecb65f33
2 changed files with 44 additions and 6 deletions
|
|
@ -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 /.../.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue