From 853dce91ccb0e1e2ee2bbdf52713b572e9712b18 Mon Sep 17 00:00:00 2001 From: Vincenzo Pupillo Date: Thu, 27 Jun 2024 16:13:58 +0200 Subject: [PATCH] Fix treesit range rule for jsdoc The parser for jsdoc is local, so it is necessary for the range rule to take this into account. * lisp/progmodes/js.el (js-ts-mode): Add ':local' keyword. (js-ts-language-at-point): Remove 'js-ts-language-at-point'. (Bug#71776) (cherry picked from commit f910514721e2eac1535d51ccebf7f136be3ba57f) --- lisp/progmodes/js.el | 33 +++++++++++---------------------- 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index 529b31669ed..31e8f2924ac 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el @@ -3636,10 +3636,16 @@ Check if a node type is available, then return the right indent rules." :override t '((escape_sequence) @font-lock-escape-face) + ;; "document" should be first, to avoid overlap. + :language 'jsdoc + :override t + :feature 'document + '((document) @font-lock-doc-face) + :language 'jsdoc :override t :feature 'keyword - '((tag_name) @font-lock-keyword-face) + '((tag_name) @font-lock-constant-face) :language 'jsdoc :override t @@ -3649,17 +3655,12 @@ Check if a node type is available, then return the right indent rules." :language 'jsdoc :override t :feature 'property - '((type) @font-lock-variable-use-face) + '((type) @font-lock-type-face) :language 'jsdoc :override t :feature 'definition - '((identifier) @font-lock-variable-name-face) - - :language 'jsdoc - :override t - :feature 'comment - '((description) @font-lock-comment-face)) + '((identifier) @font-lock-variable-name-face)) "Tree-sitter font-lock settings.") (defun js--fontify-template-string (node override start end &rest _) @@ -3933,7 +3934,7 @@ See `treesit-thing-settings' for more information.") ;; Fontification. (setq-local treesit-font-lock-settings js--treesit-font-lock-settings) (setq-local treesit-font-lock-feature-list - '(( comment definition) + '(( comment document definition) ( keyword string) ( assignment constant escape-sequence jsx number pattern string-interpolation) @@ -3944,10 +3945,9 @@ See `treesit-thing-settings' for more information.") (treesit-range-rules :embed 'jsdoc :host 'javascript + :local t `(((comment) @capture (:match ,js--treesit-jsdoc-beginning-regexp @capture)))))) - (setq-local treesit-language-at-point-function #'js-ts-language-at-point) - ;; Imenu (setq-local treesit-simple-imenu-settings `(("Function" "\\`function_declaration\\'" nil nil) @@ -3989,17 +3989,6 @@ See `treesit-thing-settings' for more information.") (put-text-property ns (1+ ns) 'syntax-table syntax) (put-text-property (1- ne) ne 'syntax-table syntax))))) -(defun js-ts-language-at-point (point) - "Return the language at POINT." - (let ((node (treesit-node-at point 'javascript))) - (if (and (treesit-ready-p 'jsdoc) - (equal (treesit-node-type node) "comment") - (string-match-p - js--treesit-jsdoc-beginning-regexp - (treesit-node-text node))) - 'jsdoc - 'javascript))) - ;;;###autoload (define-derived-mode js-json-mode prog-mode "JSON" :syntax-table js-mode-syntax-table -- 2.39.2