summaryrefslogtreecommitdiff
path: root/lisp/textmodes/toml-ts-mode.el
diff options
context:
space:
mode:
authorYuan Fu <casouri@gmail.com>2022-12-27 20:57:12 -0800
committerYuan Fu <casouri@gmail.com>2022-12-27 20:58:53 -0800
commit248c13dcfe1b9618811a6fe67e967b25b1a8f139 (patch)
tree249e33260f2094f58fd7df9d709a5fdfd9fb7eb5 /lisp/textmodes/toml-ts-mode.el
parentb39dc7ab27a696a8607ab859aeff3c71509231f5 (diff)
downloademacs-248c13dcfe1b9618811a6fe67e967b25b1a8f139.tar.gz
Update tree-sitter major modes to use the new Imenu facility
See previous commit for more explanation. * lisp/progmodes/c-ts-mode.el (c-ts-mode--defun-name): Handle more types. (c-ts-mode--imenu-1) (c-ts-mode--imenu): Remove functions. (c-ts-base-mode): Setup Imenu. * lisp/progmodes/csharp-mode.el (csharp-ts-mode--imenu-1) (csharp-ts-mode--imenu): Remove functions. (csharp-ts-mode): Setup Imenu. * lisp/progmodes/java-ts-mode.el (java-ts-mode--imenu-1) (java-ts-mode--imenu): Remove functions. (java-ts-mode): Setup Imenu. * lisp/progmodes/js.el (js--treesit-imenu-1) (js--treesit-imenu): Remove functions. (js--treesit-valid-imenu-entry): New function. (js-ts-mode): Setup Imenu. * lisp/progmodes/json-ts-mode.el (json-ts-mode--defun-name): Trim the quotes. (json-ts-mode--imenu-1) (json-ts-mode--imenu): Remove functions. (json-ts-mode): Setup Imenu. * lisp/progmodes/rust-ts-mode.el (rust-ts-mode--imenu) (rust-ts-mode--imenu-1): Remove functions. (rust-ts-mode): Setup Imenu. * lisp/progmodes/typescript-ts-mode.el: (typescript-ts-base-mode): Remove treesit-defun-prefer-top-level, it's not used anymore. Setup Imenu. Setup treesit-defun-name-function. * lisp/textmodes/css-mode.el (css--treesit-imenu-1) (css--treesit-imenu): Remove functions. (css-ts-mode): Setup Imenu. * lisp/textmodes/toml-ts-mode.el (toml-ts-mode--defun-name): Fix it and add a fallback. (toml-ts-mode--imenu-1) (toml-ts-mode--imenu): Remove functions. (toml-ts-mode): Setup Imenu.
Diffstat (limited to 'lisp/textmodes/toml-ts-mode.el')
-rw-r--r--lisp/textmodes/toml-ts-mode.el40
1 files changed, 5 insertions, 35 deletions
diff --git a/lisp/textmodes/toml-ts-mode.el b/lisp/textmodes/toml-ts-mode.el
index 790de2133e8..7771cfa6e2a 100644
--- a/lisp/textmodes/toml-ts-mode.el
+++ b/lisp/textmodes/toml-ts-mode.el
@@ -112,39 +112,8 @@
Return nil if there is no name or if NODE is not a defun node."
(pcase (treesit-node-type node)
((or "table" "table_array_element")
- (car (cdr (treesit-node-children node))))))
-
-(defun toml-ts-mode--imenu-1 (node)
- "Helper for `toml-ts-mode--imenu'.
-Find string representation for NODE and set marker, then recurse
-the subtrees."
- (let* ((ts-node (car node))
- (subtrees (mapcan #'toml-ts-mode--imenu-1 (cdr node)))
- (name (or (treesit-defun-name ts-node)
- "Root table"))
- (marker (when ts-node
- (set-marker (make-marker)
- (treesit-node-start ts-node)))))
- (cond
- ((null ts-node) subtrees)
- (subtrees
- `((,name ,(cons name marker) ,@subtrees)))
- (t
- `((,name . ,marker))))))
-
-(defun toml-ts-mode--imenu ()
- "Return Imenu alist for the current buffer."
- (let* ((node (treesit-buffer-root-node))
- (table-tree (treesit-induce-sparse-tree
- node "^table$" nil 1000))
- (table-array-tree (treesit-induce-sparse-tree
- node "^table_array_element$" nil 1000))
- (table-index (toml-ts-mode--imenu-1 table-tree))
- (table-array-index (toml-ts-mode--imenu-1 table-array-tree)))
- (append
- (when table-index `(("Headers" . ,table-index)))
- (when table-array-index `(("Arrays" . ,table-array-index))))))
-
+ (or (treesit-node-text (treesit-node-child node 1) t)
+ "Root table"))))
;;;###autoload
(add-to-list 'auto-mode-alist '("\\.toml\\'" . toml-ts-mode))
@@ -179,8 +148,9 @@ the subtrees."
(delimiter error)))
;; Imenu.
- (setq-local imenu-create-index-function #'toml-ts-mode--imenu)
- (setq-local which-func-functions nil) ;; Piggyback on imenu
+ (setq-local treesit-simple-imenu-settings
+ '(("Header" "\\`table\\'" nil nil)
+ ("Array" "\\`table_array_element\\'" nil nil)))
(treesit-major-mode-setup)))