diff options
| -rw-r--r-- | lisp/progmodes/csharp-mode.el | 22 | ||||
| -rw-r--r-- | lisp/progmodes/java-ts-mode.el | 22 | ||||
| -rw-r--r-- | lisp/progmodes/js.el | 42 | ||||
| -rw-r--r-- | lisp/progmodes/json-ts-mode.el | 17 | ||||
| -rw-r--r-- | lisp/progmodes/python.el | 17 | ||||
| -rw-r--r-- | lisp/progmodes/rust-ts-mode.el | 55 | ||||
| -rw-r--r-- | lisp/textmodes/css-mode.el | 25 | ||||
| -rw-r--r-- | lisp/textmodes/toml-ts-mode.el | 16 |
8 files changed, 133 insertions, 83 deletions
diff --git a/lisp/progmodes/csharp-mode.el b/lisp/progmodes/csharp-mode.el index 2d13ae6930c..985e2e7b0bf 100644 --- a/lisp/progmodes/csharp-mode.el +++ b/lisp/progmodes/csharp-mode.el | |||
| @@ -837,6 +837,22 @@ compilation and evaluation time conflicts." | |||
| 837 | ;;;###autoload | 837 | ;;;###autoload |
| 838 | (add-to-list 'auto-mode-alist '("\\.cs\\'" . csharp-mode)) | 838 | (add-to-list 'auto-mode-alist '("\\.cs\\'" . csharp-mode)) |
| 839 | 839 | ||
| 840 | (defun csharp-ts-mode--defun-name (node) | ||
| 841 | "Return the defun name of NODE. | ||
| 842 | Return nil if there is no name or if NODE is not a defun node." | ||
| 843 | (pcase (treesit-node-type node) | ||
| 844 | ((or "method_declaration" | ||
| 845 | "record_declaration" | ||
| 846 | "struct_declaration" | ||
| 847 | "enum_declaration" | ||
| 848 | "interface_declaration" | ||
| 849 | "class_declaration" | ||
| 850 | "class_declaration") | ||
| 851 | (treesit-node-text | ||
| 852 | (treesit-node-child-by-field-name | ||
| 853 | node "name") | ||
| 854 | t)))) | ||
| 855 | |||
| 840 | (defun csharp-ts-mode--imenu-1 (node) | 856 | (defun csharp-ts-mode--imenu-1 (node) |
| 841 | "Helper for `csharp-ts-mode--imenu'. | 857 | "Helper for `csharp-ts-mode--imenu'. |
| 842 | Find string representation for NODE and set marker, then recurse | 858 | Find string representation for NODE and set marker, then recurse |
| @@ -844,10 +860,7 @@ the subtrees." | |||
| 844 | (let* ((ts-node (car node)) | 860 | (let* ((ts-node (car node)) |
| 845 | (subtrees (mapcan #'csharp-ts-mode--imenu-1 (cdr node))) | 861 | (subtrees (mapcan #'csharp-ts-mode--imenu-1 (cdr node))) |
| 846 | (name (when ts-node | 862 | (name (when ts-node |
| 847 | (or (treesit-node-text | 863 | (or (treesit-defun-name ts-node) |
| 848 | (or (treesit-node-child-by-field-name | ||
| 849 | ts-node "name")) | ||
| 850 | t) | ||
| 851 | "Unnamed node"))) | 864 | "Unnamed node"))) |
| 852 | (marker (when ts-node | 865 | (marker (when ts-node |
| 853 | (set-marker (make-marker) | 866 | (set-marker (make-marker) |
| @@ -935,6 +948,7 @@ Key bindings: | |||
| 935 | 948 | ||
| 936 | ;; Navigation. | 949 | ;; Navigation. |
| 937 | (setq-local treesit-defun-type-regexp "declaration") | 950 | (setq-local treesit-defun-type-regexp "declaration") |
| 951 | (setq-local treesit-defun-name-function #'csharp-ts-mode--defun-name) | ||
| 938 | 952 | ||
| 939 | ;; Font-lock. | 953 | ;; Font-lock. |
| 940 | (setq-local treesit-font-lock-settings csharp-ts-mode--font-lock-settings) | 954 | (setq-local treesit-font-lock-settings csharp-ts-mode--font-lock-settings) |
diff --git a/lisp/progmodes/java-ts-mode.el b/lisp/progmodes/java-ts-mode.el index 9da2c254f87..3e0439ddf54 100644 --- a/lisp/progmodes/java-ts-mode.el +++ b/lisp/progmodes/java-ts-mode.el | |||
| @@ -248,6 +248,22 @@ | |||
| 248 | '((["," ":" ";"]) @font-lock-delimiter-face)) | 248 | '((["," ":" ";"]) @font-lock-delimiter-face)) |
| 249 | "Tree-sitter font-lock settings for `java-ts-mode'.") | 249 | "Tree-sitter font-lock settings for `java-ts-mode'.") |
| 250 | 250 | ||
| 251 | (defun java-ts-mode--defun-name (node) | ||
| 252 | "Return the defun name of NODE. | ||
| 253 | Return nil if there is no name or if NODE is not a defun node." | ||
| 254 | (pcase (treesit-node-type node) | ||
| 255 | ((or "method_declaration" | ||
| 256 | "class_declaration" | ||
| 257 | "record_declaration" | ||
| 258 | "interface_declaration" | ||
| 259 | "enum_declaration" | ||
| 260 | "import_declaration" | ||
| 261 | "package_declaration" | ||
| 262 | "module_declaration") | ||
| 263 | (treesit-node-text | ||
| 264 | (treesit-node-child-by-field-name node "name") | ||
| 265 | t)))) | ||
| 266 | |||
| 251 | (defun java-ts-mode--imenu-1 (node) | 267 | (defun java-ts-mode--imenu-1 (node) |
| 252 | "Helper for `java-ts-mode--imenu'. | 268 | "Helper for `java-ts-mode--imenu'. |
| 253 | Find string representation for NODE and set marker, then recurse | 269 | Find string representation for NODE and set marker, then recurse |
| @@ -255,10 +271,7 @@ the subtrees." | |||
| 255 | (let* ((ts-node (car node)) | 271 | (let* ((ts-node (car node)) |
| 256 | (subtrees (mapcan #'java-ts-mode--imenu-1 (cdr node))) | 272 | (subtrees (mapcan #'java-ts-mode--imenu-1 (cdr node))) |
| 257 | (name (when ts-node | 273 | (name (when ts-node |
| 258 | (or (treesit-node-text | 274 | (or (treesit-defun-name ts-node) |
| 259 | (or (treesit-node-child-by-field-name | ||
| 260 | ts-node "name")) | ||
| 261 | t) | ||
| 262 | "Unnamed node"))) | 275 | "Unnamed node"))) |
| 263 | (marker (when ts-node | 276 | (marker (when ts-node |
| 264 | (set-marker (make-marker) | 277 | (set-marker (make-marker) |
| @@ -334,6 +347,7 @@ the subtrees." | |||
| 334 | "import_declaration" | 347 | "import_declaration" |
| 335 | "package_declaration" | 348 | "package_declaration" |
| 336 | "module_declaration"))) | 349 | "module_declaration"))) |
| 350 | (setq-local treesit-defun-name-function #'java-ts-mode--defun-name) | ||
| 337 | 351 | ||
| 338 | ;; Font-lock. | 352 | ;; Font-lock. |
| 339 | (setq-local treesit-font-lock-settings java-ts-mode--font-lock-settings) | 353 | (setq-local treesit-font-lock-settings java-ts-mode--font-lock-settings) |
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index 1b34c0de418..14feed221fb 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el | |||
| @@ -3656,24 +3656,18 @@ OVERRIDE is the override flag described in | |||
| 3656 | (setq font-beg (treesit-node-end child) | 3656 | (setq font-beg (treesit-node-end child) |
| 3657 | child (treesit-node-next-sibling child))))) | 3657 | child (treesit-node-next-sibling child))))) |
| 3658 | 3658 | ||
| 3659 | (defun js-treesit-current-defun () | 3659 | (defun js--treesit-defun-name (node) |
| 3660 | "Return name of surrounding function. | 3660 | "Return the defun name of NODE. |
| 3661 | This function can be used as a value in `which-func-functions'" | 3661 | Return nil if there is no name or if NODE is not a defun node." |
| 3662 | (let ((node (treesit-node-at (point))) | 3662 | (treesit-node-text |
| 3663 | (name-list ())) | 3663 | (treesit-node-child-by-field-name |
| 3664 | (cl-loop while node | 3664 | (pcase (treesit-node-type node) |
| 3665 | if (pcase (treesit-node-type node) | 3665 | ("lexical_declaration" |
| 3666 | ("function_declaration" t) | 3666 | (treesit-search-subtree node "variable_declarator" nil nil 1)) |
| 3667 | ("method_definition" t) | 3667 | ((or "function_declaration" "method_definition" "class_declaration") |
| 3668 | ("class_declaration" t) | 3668 | node)) |
| 3669 | ("variable_declarator" t) | 3669 | "name") |
| 3670 | (_ nil)) | 3670 | t)) |
| 3671 | do (push (treesit-node-text | ||
| 3672 | (treesit-node-child-by-field-name node "name") | ||
| 3673 | t) | ||
| 3674 | name-list) | ||
| 3675 | do (setq node (treesit-node-parent node)) | ||
| 3676 | finally return (string-join name-list ".")))) | ||
| 3677 | 3671 | ||
| 3678 | (defun js--treesit-imenu-1 (node) | 3672 | (defun js--treesit-imenu-1 (node) |
| 3679 | "Given a sparse tree, create an imenu alist. | 3673 | "Given a sparse tree, create an imenu alist. |
| @@ -3702,15 +3696,8 @@ definition*\"." | |||
| 3702 | ("function_declaration" 'function))) | 3696 | ("function_declaration" 'function))) |
| 3703 | ;; The root of the tree could have a nil ts-node. | 3697 | ;; The root of the tree could have a nil ts-node. |
| 3704 | (name (when ts-node | 3698 | (name (when ts-node |
| 3705 | (let ((ts-node-1 | 3699 | (or (treesit-defun-name ts-node) |
| 3706 | (if (eq type 'variable) | 3700 | "Anonymous"))) |
| 3707 | (treesit-search-subtree | ||
| 3708 | ts-node "variable_declarator" nil nil 1) | ||
| 3709 | ts-node))) | ||
| 3710 | (treesit-node-text | ||
| 3711 | (treesit-node-child-by-field-name | ||
| 3712 | ts-node-1 "name") | ||
| 3713 | t)))) | ||
| 3714 | (marker (when ts-node | 3701 | (marker (when ts-node |
| 3715 | (set-marker (make-marker) | 3702 | (set-marker (make-marker) |
| 3716 | (treesit-node-start ts-node))))) | 3703 | (treesit-node-start ts-node))))) |
| @@ -3885,6 +3872,7 @@ Currently there are `js-mode' and `js-ts-mode'." | |||
| 3885 | "method_definition" | 3872 | "method_definition" |
| 3886 | "function_declaration" | 3873 | "function_declaration" |
| 3887 | "lexical_declaration"))) | 3874 | "lexical_declaration"))) |
| 3875 | (setq-local treesit-defun-name-function #'js--treesit-defun-name) | ||
| 3888 | ;; Fontification. | 3876 | ;; Fontification. |
| 3889 | (setq-local treesit-font-lock-settings js--treesit-font-lock-settings) | 3877 | (setq-local treesit-font-lock-settings js--treesit-font-lock-settings) |
| 3890 | (setq-local treesit-font-lock-feature-list | 3878 | (setq-local treesit-font-lock-feature-list |
diff --git a/lisp/progmodes/json-ts-mode.el b/lisp/progmodes/json-ts-mode.el index 6c2f3805872..6725c5f2270 100644 --- a/lisp/progmodes/json-ts-mode.el +++ b/lisp/progmodes/json-ts-mode.el | |||
| @@ -107,6 +107,16 @@ | |||
| 107 | '((ERROR) @font-lock-warning-face)) | 107 | '((ERROR) @font-lock-warning-face)) |
| 108 | "Font-lock settings for JSON.") | 108 | "Font-lock settings for JSON.") |
| 109 | 109 | ||
| 110 | (defun json-ts-mode--defun-name (node) | ||
| 111 | "Return the defun name of NODE. | ||
| 112 | Return nil if there is no name or if NODE is not a defun node." | ||
| 113 | (pcase (treesit-node-type node) | ||
| 114 | ((or "pair" "object") | ||
| 115 | (treesit-node-text | ||
| 116 | (treesit-node-child-by-field-name | ||
| 117 | node "key") | ||
| 118 | t)))) | ||
| 119 | |||
| 110 | (defun json-ts-mode--imenu-1 (node) | 120 | (defun json-ts-mode--imenu-1 (node) |
| 111 | "Helper for `json-ts-mode--imenu'. | 121 | "Helper for `json-ts-mode--imenu'. |
| 112 | Find string representation for NODE and set marker, then recurse | 122 | Find string representation for NODE and set marker, then recurse |
| @@ -114,10 +124,8 @@ the subtrees." | |||
| 114 | (let* ((ts-node (car node)) | 124 | (let* ((ts-node (car node)) |
| 115 | (subtrees (mapcan #'json-ts-mode--imenu-1 (cdr node))) | 125 | (subtrees (mapcan #'json-ts-mode--imenu-1 (cdr node))) |
| 116 | (name (when ts-node | 126 | (name (when ts-node |
| 117 | (treesit-node-text | 127 | (or (treesit-defun-name ts-node) |
| 118 | (treesit-node-child-by-field-name | 128 | "Anonymous"))) |
| 119 | ts-node "key") | ||
| 120 | t))) | ||
| 121 | (marker (when ts-node | 129 | (marker (when ts-node |
| 122 | (set-marker (make-marker) | 130 | (set-marker (make-marker) |
| 123 | (treesit-node-start ts-node))))) | 131 | (treesit-node-start ts-node))))) |
| @@ -161,6 +169,7 @@ the subtrees." | |||
| 161 | ;; Navigation. | 169 | ;; Navigation. |
| 162 | (setq-local treesit-defun-type-regexp | 170 | (setq-local treesit-defun-type-regexp |
| 163 | (rx (or "pair" "object"))) | 171 | (rx (or "pair" "object"))) |
| 172 | (setq-local treesit-defun-name-function #'json-ts-mode--defun-name) | ||
| 164 | 173 | ||
| 165 | ;; Font-lock. | 174 | ;; Font-lock. |
| 166 | (setq-local treesit-font-lock-settings json-ts-mode--font-lock-settings) | 175 | (setq-local treesit-font-lock-settings json-ts-mode--font-lock-settings) |
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index bdc9e6fa78c..d383fa57c04 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el | |||
| @@ -5448,6 +5448,16 @@ To this: | |||
| 5448 | 5448 | ||
| 5449 | ;;; Tree-sitter imenu | 5449 | ;;; Tree-sitter imenu |
| 5450 | 5450 | ||
| 5451 | (defun python--treesit-defun-name (node) | ||
| 5452 | "Return the defun name of NODE. | ||
| 5453 | Return nil if there is no name or if NODE is not a defun node." | ||
| 5454 | (pcase (treesit-node-type node) | ||
| 5455 | ((or "function_definition" "class_definition") | ||
| 5456 | (treesit-node-text | ||
| 5457 | (treesit-node-child-by-field-name | ||
| 5458 | node "name") | ||
| 5459 | t)))) | ||
| 5460 | |||
| 5451 | (defun python--imenu-treesit-create-index-1 (node) | 5461 | (defun python--imenu-treesit-create-index-1 (node) |
| 5452 | "Given a sparse tree, create an imenu alist. | 5462 | "Given a sparse tree, create an imenu alist. |
| 5453 | 5463 | ||
| @@ -5473,9 +5483,8 @@ definition*\"." | |||
| 5473 | ("class_definition" 'class))) | 5483 | ("class_definition" 'class))) |
| 5474 | ;; The root of the tree could have a nil ts-node. | 5484 | ;; The root of the tree could have a nil ts-node. |
| 5475 | (name (when ts-node | 5485 | (name (when ts-node |
| 5476 | (treesit-node-text | 5486 | (or (treesit-defun-name ts-node) |
| 5477 | (treesit-node-child-by-field-name | 5487 | "Anonymous"))) |
| 5478 | ts-node "name") t))) | ||
| 5479 | (marker (when ts-node | 5488 | (marker (when ts-node |
| 5480 | (set-marker (make-marker) | 5489 | (set-marker (make-marker) |
| 5481 | (treesit-node-start ts-node))))) | 5490 | (treesit-node-start ts-node))))) |
| @@ -6643,6 +6652,8 @@ implementations: `python-mode' and `python-ts-mode'." | |||
| 6643 | #'python-imenu-treesit-create-index) | 6652 | #'python-imenu-treesit-create-index) |
| 6644 | (setq-local treesit-defun-type-regexp (rx (or "function" "class") | 6653 | (setq-local treesit-defun-type-regexp (rx (or "function" "class") |
| 6645 | "_definition")) | 6654 | "_definition")) |
| 6655 | (setq-local treesit-defun-name-function | ||
| 6656 | #'python--treesit-defun-name) | ||
| 6646 | (treesit-major-mode-setup) | 6657 | (treesit-major-mode-setup) |
| 6647 | 6658 | ||
| 6648 | (when python-indent-guess-indent-offset | 6659 | (when python-indent-guess-indent-offset |
diff --git a/lisp/progmodes/rust-ts-mode.el b/lisp/progmodes/rust-ts-mode.el index 8b2ed191019..81f5b8765f1 100644 --- a/lisp/progmodes/rust-ts-mode.el +++ b/lisp/progmodes/rust-ts-mode.el | |||
| @@ -273,6 +273,33 @@ | |||
| 273 | (when struct-index `(("Struct" . ,struct-index))) | 273 | (when struct-index `(("Struct" . ,struct-index))) |
| 274 | (when func-index `(("Fn" . ,func-index)))))) | 274 | (when func-index `(("Fn" . ,func-index)))))) |
| 275 | 275 | ||
| 276 | (defun rust-ts-mode--defun-name (node) | ||
| 277 | "Return the defun name of NODE. | ||
| 278 | Return nil if there is no name or if NODE is not a defun node." | ||
| 279 | (pcase (treesit-node-type node) | ||
| 280 | ("enum_item" | ||
| 281 | (treesit-node-text | ||
| 282 | (treesit-node-child-by-field-name node "name") t)) | ||
| 283 | ("function_item" | ||
| 284 | (treesit-node-text | ||
| 285 | (treesit-node-child-by-field-name node "name") t)) | ||
| 286 | ("impl_item" | ||
| 287 | (let ((trait-node (treesit-node-child-by-field-name node "trait"))) | ||
| 288 | (concat | ||
| 289 | (treesit-node-text trait-node t) | ||
| 290 | (when trait-node " for ") | ||
| 291 | (treesit-node-text | ||
| 292 | (treesit-node-child-by-field-name node "type") t)))) | ||
| 293 | ("mod_item" | ||
| 294 | (treesit-node-text | ||
| 295 | (treesit-node-child-by-field-name node "name") t)) | ||
| 296 | ("struct_item" | ||
| 297 | (treesit-node-text | ||
| 298 | (treesit-node-child-by-field-name node "name") t)) | ||
| 299 | ("type_item" | ||
| 300 | (treesit-node-text | ||
| 301 | (treesit-node-child-by-field-name node "name") t)))) | ||
| 302 | |||
| 276 | (defun rust-ts-mode--imenu-1 (node) | 303 | (defun rust-ts-mode--imenu-1 (node) |
| 277 | "Helper for `rust-ts-mode--imenu'. | 304 | "Helper for `rust-ts-mode--imenu'. |
| 278 | Find string representation for NODE and set marker, then recurse | 305 | Find string representation for NODE and set marker, then recurse |
| @@ -282,31 +309,8 @@ the subtrees." | |||
| 282 | (subtrees (mapcan #'rust-ts-mode--imenu-1 | 309 | (subtrees (mapcan #'rust-ts-mode--imenu-1 |
| 283 | children)) | 310 | children)) |
| 284 | (name (when ts-node | 311 | (name (when ts-node |
| 285 | (pcase (treesit-node-type ts-node) | 312 | (or (treesit-defun-name ts-node) |
| 286 | ("enum_item" | 313 | "Anonymous"))) |
| 287 | (treesit-node-text | ||
| 288 | (treesit-node-child-by-field-name ts-node "name") t)) | ||
| 289 | ("function_item" | ||
| 290 | (treesit-node-text | ||
| 291 | (treesit-node-child-by-field-name ts-node "name") t)) | ||
| 292 | ("impl_item" | ||
| 293 | (let ((trait-node (treesit-node-child-by-field-name ts-node "trait"))) | ||
| 294 | (concat | ||
| 295 | (treesit-node-text | ||
| 296 | trait-node t) | ||
| 297 | (when trait-node | ||
| 298 | " for ") | ||
| 299 | (treesit-node-text | ||
| 300 | (treesit-node-child-by-field-name ts-node "type") t)))) | ||
| 301 | ("mod_item" | ||
| 302 | (treesit-node-text | ||
| 303 | (treesit-node-child-by-field-name ts-node "name") t)) | ||
| 304 | ("struct_item" | ||
| 305 | (treesit-node-text | ||
| 306 | (treesit-node-child-by-field-name ts-node "name") t)) | ||
| 307 | ("type_item" | ||
| 308 | (treesit-node-text | ||
| 309 | (treesit-node-child-by-field-name ts-node "name") t))))) | ||
| 310 | (marker (when ts-node | 314 | (marker (when ts-node |
| 311 | (set-marker (make-marker) | 315 | (set-marker (make-marker) |
| 312 | (treesit-node-start ts-node))))) | 316 | (treesit-node-start ts-node))))) |
| @@ -363,6 +367,7 @@ the subtrees." | |||
| 363 | "function_item" | 367 | "function_item" |
| 364 | "impl_item" | 368 | "impl_item" |
| 365 | "struct_item"))) | 369 | "struct_item"))) |
| 370 | (setq-local treesit-defun-name-function #'rust-ts-mode--defun-name) | ||
| 366 | 371 | ||
| 367 | (treesit-major-mode-setup))) | 372 | (treesit-major-mode-setup))) |
| 368 | 373 | ||
diff --git a/lisp/textmodes/css-mode.el b/lisp/textmodes/css-mode.el index 822097a86d8..99ef4f10a06 100644 --- a/lisp/textmodes/css-mode.el +++ b/lisp/textmodes/css-mode.el | |||
| @@ -1412,6 +1412,19 @@ for determining whether point is within a selector." | |||
| 1412 | '((ERROR) @error)) | 1412 | '((ERROR) @error)) |
| 1413 | "Tree-sitter font-lock settings for `css-ts-mode'.") | 1413 | "Tree-sitter font-lock settings for `css-ts-mode'.") |
| 1414 | 1414 | ||
| 1415 | (defun css--treesit-defun-name (node) | ||
| 1416 | "Return the defun name of NODE. | ||
| 1417 | Return nil if there is no name or if NODE is not a defun node." | ||
| 1418 | (pcase (treesit-node-type node) | ||
| 1419 | ("rule_set" (treesit-node-text | ||
| 1420 | (treesit-node-child node 0) t)) | ||
| 1421 | ("media_statement" | ||
| 1422 | (let ((block (treesit-node-child node -1))) | ||
| 1423 | (string-trim | ||
| 1424 | (buffer-substring-no-properties | ||
| 1425 | (treesit-node-start node) | ||
| 1426 | (treesit-node-start block))))))) | ||
| 1427 | |||
| 1415 | (defun css--treesit-imenu-1 (node) | 1428 | (defun css--treesit-imenu-1 (node) |
| 1416 | "Helper for `css--treesit-imenu'. | 1429 | "Helper for `css--treesit-imenu'. |
| 1417 | Find string representation for NODE and set marker, then recurse | 1430 | Find string representation for NODE and set marker, then recurse |
| @@ -1419,15 +1432,8 @@ the subtrees." | |||
| 1419 | (let* ((ts-node (car node)) | 1432 | (let* ((ts-node (car node)) |
| 1420 | (subtrees (mapcan #'css--treesit-imenu-1 (cdr node))) | 1433 | (subtrees (mapcan #'css--treesit-imenu-1 (cdr node))) |
| 1421 | (name (when ts-node | 1434 | (name (when ts-node |
| 1422 | (pcase (treesit-node-type ts-node) | 1435 | (or (treesit-defun-name ts-node) |
| 1423 | ("rule_set" (treesit-node-text | 1436 | "Anonymous"))) |
| 1424 | (treesit-node-child ts-node 0) t)) | ||
| 1425 | ("media_statement" | ||
| 1426 | (let ((block (treesit-node-child ts-node -1))) | ||
| 1427 | (string-trim | ||
| 1428 | (buffer-substring-no-properties | ||
| 1429 | (treesit-node-start ts-node) | ||
| 1430 | (treesit-node-start block)))))))) | ||
| 1431 | (marker (when ts-node | 1437 | (marker (when ts-node |
| 1432 | (set-marker (make-marker) | 1438 | (set-marker (make-marker) |
| 1433 | (treesit-node-start ts-node))))) | 1439 | (treesit-node-start ts-node))))) |
| @@ -1835,6 +1841,7 @@ can also be used to fill comments. | |||
| 1835 | (treesit-parser-create 'css) | 1841 | (treesit-parser-create 'css) |
| 1836 | (setq-local treesit-simple-indent-rules css--treesit-indent-rules) | 1842 | (setq-local treesit-simple-indent-rules css--treesit-indent-rules) |
| 1837 | (setq-local treesit-defun-type-regexp "rule_set") | 1843 | (setq-local treesit-defun-type-regexp "rule_set") |
| 1844 | (setq-local treesit-defun-name-function #'css--treesit-defun-name) | ||
| 1838 | (setq-local treesit-font-lock-settings css--treesit-settings) | 1845 | (setq-local treesit-font-lock-settings css--treesit-settings) |
| 1839 | (setq-local treesit-font-lock-feature-list | 1846 | (setq-local treesit-font-lock-feature-list |
| 1840 | '((selector comment query keyword) | 1847 | '((selector comment query keyword) |
diff --git a/lisp/textmodes/toml-ts-mode.el b/lisp/textmodes/toml-ts-mode.el index bca6a5e81ad..790de2133e8 100644 --- a/lisp/textmodes/toml-ts-mode.el +++ b/lisp/textmodes/toml-ts-mode.el | |||
| @@ -107,12 +107,12 @@ | |||
| 107 | '((ERROR) @font-lock-warning-face)) | 107 | '((ERROR) @font-lock-warning-face)) |
| 108 | "Font-lock settings for TOML.") | 108 | "Font-lock settings for TOML.") |
| 109 | 109 | ||
| 110 | (defun toml-ts-mode--get-table-name (node) | 110 | (defun toml-ts-mode--defun-name (node) |
| 111 | "Obtains the header-name for the associated tree-sitter `NODE'." | 111 | "Return the defun name of NODE. |
| 112 | (if node | 112 | Return nil if there is no name or if NODE is not a defun node." |
| 113 | (treesit-node-text | 113 | (pcase (treesit-node-type node) |
| 114 | (car (cdr (treesit-node-children node)))) | 114 | ((or "table" "table_array_element") |
| 115 | "Root table")) | 115 | (car (cdr (treesit-node-children node)))))) |
| 116 | 116 | ||
| 117 | (defun toml-ts-mode--imenu-1 (node) | 117 | (defun toml-ts-mode--imenu-1 (node) |
| 118 | "Helper for `toml-ts-mode--imenu'. | 118 | "Helper for `toml-ts-mode--imenu'. |
| @@ -120,7 +120,8 @@ Find string representation for NODE and set marker, then recurse | |||
| 120 | the subtrees." | 120 | the subtrees." |
| 121 | (let* ((ts-node (car node)) | 121 | (let* ((ts-node (car node)) |
| 122 | (subtrees (mapcan #'toml-ts-mode--imenu-1 (cdr node))) | 122 | (subtrees (mapcan #'toml-ts-mode--imenu-1 (cdr node))) |
| 123 | (name (toml-ts-mode--get-table-name ts-node)) | 123 | (name (or (treesit-defun-name ts-node) |
| 124 | "Root table")) | ||
| 124 | (marker (when ts-node | 125 | (marker (when ts-node |
| 125 | (set-marker (make-marker) | 126 | (set-marker (make-marker) |
| 126 | (treesit-node-start ts-node))))) | 127 | (treesit-node-start ts-node))))) |
| @@ -167,6 +168,7 @@ the subtrees." | |||
| 167 | ;; Navigation. | 168 | ;; Navigation. |
| 168 | (setq-local treesit-defun-type-regexp | 169 | (setq-local treesit-defun-type-regexp |
| 169 | (rx (or "table" "table_array_element"))) | 170 | (rx (or "table" "table_array_element"))) |
| 171 | (setq-local treesit-defun-name-function #'toml-ts-mode--defun-name) | ||
| 170 | 172 | ||
| 171 | ;; Font-lock. | 173 | ;; Font-lock. |
| 172 | (setq-local treesit-font-lock-settings toml-ts-mode--font-lock-settings) | 174 | (setq-local treesit-font-lock-settings toml-ts-mode--font-lock-settings) |