From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Damien Cassou Newsgroups: gmane.emacs.bugs Subject: bug#71550: [PATCH] Add jsdoc support to js-ts-mode Date: Fri, 14 Jun 2024 14:33:25 +0200 Message-ID: <87le37emay.fsf@cassou.me> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="15068"; mail-complaints-to="usenet@ciao.gmane.io" To: 71550@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Fri Jun 14 14:34:28 2024 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1sI68R-0003fZ-AS for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 14 Jun 2024 14:34:27 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sI684-00070X-Io; Fri, 14 Jun 2024 08:34:04 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sI683-0006yX-1i for bug-gnu-emacs@gnu.org; Fri, 14 Jun 2024 08:34:03 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1sI682-0007qY-Pm for bug-gnu-emacs@gnu.org; Fri, 14 Jun 2024 08:34:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1sI682-0003vT-I4 for bug-gnu-emacs@gnu.org; Fri, 14 Jun 2024 08:34:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Damien Cassou Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 14 Jun 2024 12:34:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 71550 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.171836842615061 (code B ref -1); Fri, 14 Jun 2024 12:34:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 14 Jun 2024 12:33:46 +0000 Original-Received: from localhost ([127.0.0.1]:40103 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sI67m-0003ur-6O for submit@debbugs.gnu.org; Fri, 14 Jun 2024 08:33:46 -0400 Original-Received: from lists.gnu.org ([209.51.188.17]:41874) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sI67k-0003uj-8j for submit@debbugs.gnu.org; Fri, 14 Jun 2024 08:33:45 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sI67j-0006YN-Pv for bug-gnu-emacs@gnu.org; Fri, 14 Jun 2024 08:33:43 -0400 Original-Received: from mail.reprendre.net ([193.23.30.35]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sI67g-0007pV-Do for bug-gnu-emacs@gnu.org; Fri, 14 Jun 2024 08:33:43 -0400 Original-Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 0249A2C9C02 for ; Fri, 14 Jun 2024 14:33:25 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cassou.me; s=dkim; t=1718368406; h=from:subject:date:message-id:to:mime-version:content-type; bh=hlIFf9FhcXwIe273AdsW23WQeW0AHLsYrc4cKLjeGc8=; b=ZeIwx3W31Gmzi9GnyeO6TlTAVLHXc0SZiGyTxt5Pb/qR79Dh61hINUEZDbc2+lXhaTt7D3 P9IYyItJyHZZbicmhpN7ihbTFkhw4MVI50nPmOQp/f65iHR4pGHa5ZeN30roGOiZQIc/a9 ShurRiYWpPfuonOXnuhfdgJfgP6XqHt2neYyxCqvLAHozmvX7lIXYhskSqMo9vGl1ZmPnf sp87eysvqebWmTRxm2n9aiIJI9f9OYW7Pw6KRR0lbwEprn4aT4A6DKvmkVnM309IBSRKxs Y6W2uDaiIq3q8EwEW6IxPG87eqU8XPZ/cgxUbVXkq6h/LsQrhXS6b3VqE5uQIQ== X-Last-TLS-Session-Version: TLSv1.3 Received-SPF: pass client-ip=193.23.30.35; envelope-from=damien@cassou.me; helo=mail.reprendre.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:287222 Archived-At: --=-=-= Content-Type: text/plain Tags: patch Hi, jsdoc [1] is a special syntax to document JavaScript code. The attached patch adds a jsdoc parser and font-lock settings to files using the `js-ts-mode' major mode if the jsdoc grammar is available. Before/after screenshots are attached to this email. [1] jsdoc: https://jsdoc.app/ The new code does *not* make `js-ts-mode' dependent on the availability of the jsdoc grammar: instead, `js-ts-mode' will keep working as it works today if the jsdoc grammar is absent. The support for paragraph filling currently in master is broken because the prefix '*' isn't added at the beginning of lines when filling documentation blocks. I tried changing the value of `c-ts-common--comment-regexp' to include "description" (as this is what the jsdoc parser uses for text) but the result is worse. I also tried reusing `js-fill-paragraph' but that fails as well. The result of this patch is that `M-q' doesn't change anything anymore in these blocks. I will report a bug and seek assistance to fix it if this patch is merged. Best, -- Damien Cassou "Success is the ability to go from one failure to another without losing enthusiasm." --Winston Churchill --=-=-= Content-Type: text/patch Content-Disposition: attachment; filename=0001-Add-jsdoc-support-to-js-ts-mode.patch >From 4a0682577accc094aeccb3f51988cb5e0bcabe03 Mon Sep 17 00:00:00 2001 From: Damien Cassou Date: Fri, 14 Jun 2024 10:46:42 +0200 Subject: [PATCH] Add jsdoc support to js-ts-mode * lisp/progmodes/js.el (js--treesit-font-lock-settings): Add jsdoc font-lock settings. (js--treesit-jsdoc-beginning-regexp): New variable to match the beginning of a jsdoc block. (js-ts-mode): Add jsdoc support. Save the 'javascript parser to `treesit-primary-parser'. Configure `treesit-range-settings' to use a jsdoc parser within a JavaScript file. (js-ts-language-at-point): New function to return either 'jsdoc or 'javascript depending on where the point is. --- lisp/progmodes/js.el | 54 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index f5629ff8fbe..529b31669ed 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el @@ -3634,7 +3634,32 @@ js--treesit-font-lock-settings :language 'javascript :feature 'escape-sequence :override t - '((escape_sequence) @font-lock-escape-face)) + '((escape_sequence) @font-lock-escape-face) + + :language 'jsdoc + :override t + :feature 'keyword + '((tag_name) @font-lock-keyword-face) + + :language 'jsdoc + :override t + :feature 'bracket + '((["{" "}"]) @font-lock-bracket-face) + + :language 'jsdoc + :override t + :feature 'property + '((type) @font-lock-variable-use-face) + + :language 'jsdoc + :override t + :feature 'definition + '((identifier) @font-lock-variable-name-face) + + :language 'jsdoc + :override t + :feature 'comment + '((description) @font-lock-comment-face)) "Tree-sitter font-lock settings.") (defun js--fontify-template-string (node override start end &rest _) @@ -3857,6 +3882,9 @@ js--treesit-sexp-nodes "Nodes that designate sexps in JavaScript. See `treesit-thing-settings' for more information.") +(defvar js--treesit-jsdoc-beginning-regexp (rx bos "/**") + "Regular expression matching the beginning of a jsdoc block comment.") + ;;;###autoload (define-derived-mode js-ts-mode js-base-mode "JavaScript" "Major mode for editing JavaScript. @@ -3882,7 +3910,8 @@ js-ts-mode (setq-local syntax-propertize-function #'js-ts--syntax-propertize) ;; Tree-sitter setup. - (treesit-parser-create 'javascript) + (setq-local treesit-primary-parser (treesit-parser-create 'javascript)) + ;; Indent. (setq-local treesit-simple-indent-rules js--treesit-indent-rules) ;; Navigation. @@ -3909,6 +3938,16 @@ js-ts-mode ( assignment constant escape-sequence jsx number pattern string-interpolation) ( bracket delimiter function operator property))) + + (when (treesit-ready-p 'jsdoc t) + (setq-local treesit-range-settings + (treesit-range-rules + :embed 'jsdoc + :host 'javascript + `(((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) @@ -3950,6 +3989,17 @@ js-ts--syntax-propertize (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.44.1 --=-=-= Content-Type: image/png Content-Disposition: attachment; filename=after.png Content-Transfer-Encoding: base64 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 --=-=-= Content-Type: image/png Content-Disposition: attachment; filename=before.png Content-Transfer-Encoding: base64 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 --=-=-=--