From 8db75f0ef9ad821bab0a2613bb8e549edbf14eb6 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Sat, 25 Feb 2017 10:27:48 -0700 Subject: [PATCH] Use font-lock-doc-face in js-mode Bug#25858: * lisp/progmodes/js.el (js-font-lock-syntactic-face-function): New defun. (js-mode): Use it. * test/lisp/progmodes/js-tests.el (js-mode-doc-comment-face): New test. --- lisp/progmodes/js.el | 15 ++++++++++++++- test/lisp/progmodes/js-tests.el | 12 ++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index 65325a8ffad..aed42a85076 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el @@ -1687,6 +1687,16 @@ This performs fontification according to `js--class-styles'." js--font-lock-keywords-3) "Font lock keywords for `js-mode'. See `font-lock-keywords'.") +(defun js-font-lock-syntactic-face-function (state) + "Return syntactic face given STATE." + (if (nth 3 state) + font-lock-string-face + (if (save-excursion + (goto-char (nth 8 state)) + (looking-at "/\\*\\*")) + font-lock-doc-face + font-lock-comment-face))) + (defconst js--syntax-propertize-regexp-regexp (rx ;; Start of regexp. @@ -3828,7 +3838,10 @@ If one hasn't been set, or if it's stale, prompt for a new one." (setq-local beginning-of-defun-function #'js-beginning-of-defun) (setq-local end-of-defun-function #'js-end-of-defun) (setq-local open-paren-in-column-0-is-defun-start nil) - (setq-local font-lock-defaults (list js--font-lock-keywords)) + (setq-local font-lock-defaults + (list js--font-lock-keywords nil nil nil nil + '(font-lock-syntactic-face-function + . js-font-lock-syntactic-face-function))) (setq-local syntax-propertize-function #'js-syntax-propertize) (setq-local prettify-symbols-alist js--prettify-symbols-alist) diff --git a/test/lisp/progmodes/js-tests.el b/test/lisp/progmodes/js-tests.el index 07e659af605..e030675e07c 100644 --- a/test/lisp/progmodes/js-tests.el +++ b/test/lisp/progmodes/js-tests.el @@ -128,6 +128,18 @@ if (!/[ (:,='\"]/.test(value)) { ;; Any success is ok here. (should t))) +(ert-deftest js-mode-doc-comment-face () + (dolist (test '(("/*" "*/" font-lock-comment-face) + ("//" "\n" font-lock-comment-face) + ("/**" "*/" font-lock-doc-face) + ("\"" "\"" font-lock-string-face))) + (with-temp-buffer + (js-mode) + (insert (car test) " he") + (save-excursion (insert "llo " (cadr test))) + (font-lock-ensure) + (should (eq (get-text-property (point) 'face) (caddr test)))))) + (provide 'js-tests) ;;; js-tests.el ends here