1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-10 08:10:21 -08:00

Fix symbol list matching regexps.

Fix symbol list matching regexp performance

Allow empty face lists, improve the face list matching regexp (see
discussion in Bug#69714) based on relint's comments, add tests:
* test/lisp/emacs-lisp/ert-font-lock-tests.el: Add tests.
* lisp/emacs-lisp/ert-font-lock.el: Fix regexps.
This commit is contained in:
Vladimir Kazanov 2024-03-31 18:32:59 +01:00 committed by Mattias Engdegård
parent 3f4486dd76
commit 3f9263f791
2 changed files with 60 additions and 14 deletions

View file

@ -44,13 +44,56 @@
(goto-char (point-min))
,@body))
(defun ert-font-lock--wrap-begin-end (re)
(concat "^" re "$"))
;;; Regexp tests
;;;
(ert-deftest test-regexp--face-symbol-re ()
(let ((re (ert-font-lock--wrap-begin-end
ert-font-lock--face-symbol-re)))
(should (string-match-p re "font-lock-keyword-face"))
(should (string-match-p re "-face"))
(should (string-match-p re "weird-package/-face"))
(should (string-match-p re "-"))
(should (string-match-p re "font-lock.face"))
(should-not (string-match-p re "face suffix-with"))
(should-not (string-match-p re "("))))
(ert-deftest test-regexp--face-symbol-list-re ()
(let ((re (ert-font-lock--wrap-begin-end
ert-font-lock--face-symbol-list-re)))
(should (string-match-p re "(face1 face2)"))
(should (string-match-p re "(face1)"))
(should (string-match-p re "()"))
(should-not (string-match-p re ")"))
(should-not (string-match-p re "("))))
(ert-deftest test-regexp--assertion-line-re ()
(let ((re (ert-font-lock--wrap-begin-end
ert-font-lock--assertion-line-re)))
(should (string-match-p re "^ something-face"))
(should (string-match-p re "^ !something-face"))
(should (string-match-p re "^ (face1 face2)"))
(should (string-match-p re "^ !(face1 face2)"))
(should (string-match-p re "^ ()"))
(should (string-match-p re "^ !()"))
(should (string-match-p re "^ nil"))
(should (string-match-p re "^ !nil"))
(should (string-match-p re "<- something-face"))
(should (string-match-p re "<- ^ something-face"))
(should (string-match-p re "^^ ^ something-face"))
(should (string-match-p re "^ ^something-face"))
(should-not (string-match-p re "^ <- ^something-face"))))
;;; Comment parsing tests
;;
(ert-deftest test-line-comment-p--fundamental ()
(with-temp-buffer-str-mode fundamental-mode
"// comment\n"
(should-not (ert-font-lock--line-comment-p))))
"// comment\n"
(should-not (ert-font-lock--line-comment-p))))
(ert-deftest test-line-comment-p--emacs-lisp ()
(with-temp-buffer-str-mode emacs-lisp-mode