((match "/" "jsx_self_closing_element") parent 0)
((parent-is "jsx_self_closing_element") parent js-indent-level)
;; FIXME(Theo): This no-node catch-all should be removed. When is it needed?
- (no-node parent-bol 0)))))
+ (no-node parent-bol 0))
+ (jsdoc
+ ((and (parent-is "document") c-ts-common-looking-at-star)
+ c-ts-common-comment-start-after-first-star -1)))))
(defvar js--treesit-keywords
'("as" "async" "await" "break" "case" "catch" "class" "const" "continue"
("lexical_declaration" (treesit-node-top-level node))
(_ t)))
+(defun js--treesit-language-at-point (point)
+ "Return the language at POINT."
+ (let* ((node (treesit-node-at point 'javascript))
+ (node-type (treesit-node-type node))
+ (node-start (treesit-node-start node))
+ (node-end (treesit-node-end node)))
+ (if (not (treesit-ready-p 'jsdoc t))
+ 'javascript
+ (if (equal node-type "comment")
+ (save-excursion
+ (goto-char node-start)
+ (if (search-forward "/**" node-end t)
+ 'jsdoc
+ 'javascript))
+ 'javascript))))
+
;;; Main Function
;;;###autoload
;; Tree-sitter setup.
(setq-local treesit-primary-parser (treesit-parser-create 'javascript))
+ (setq-local treesit-language-at-point-function #'js--treesit-language-at-point)
;; Indent.
(setq-local treesit-simple-indent-rules js--treesit-indent-rules)