[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
feature/tree-sitter 7f57d80846 4/6: Fix c-ts-mode-imenu
From: |
Yuan Fu |
Subject: |
feature/tree-sitter 7f57d80846 4/6: Fix c-ts-mode-imenu |
Date: |
Wed, 16 Nov 2022 18:50:49 -0500 (EST) |
branch: feature/tree-sitter
commit 7f57d80846b5f674c49a717d6fc086c14f506415
Author: Yuan Fu <casouri@gmail.com>
Commit: Yuan Fu <casouri@gmail.com>
Fix c-ts-mode-imenu
* lisp/progmodes/c-ts-mode.el (c-ts-mode--imenu-1): If cannot find
its name, ignore the node.
(c-ts-mode--imenu): Don't include a category if it's empty.
---
lisp/progmodes/c-ts-mode.el | 55 ++++++++++++++++++++++++---------------------
1 file changed, 29 insertions(+), 26 deletions(-)
diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el
index 950ef1f65e..d4f25f7845 100644
--- a/lisp/progmodes/c-ts-mode.el
+++ b/lisp/progmodes/c-ts-mode.el
@@ -388,42 +388,41 @@ the subtrees."
(let* ((ts-node (car node))
(subtrees (mapcan #'c-ts-mode--imenu-1 (cdr node)))
(name (when ts-node
- (or (treesit-node-text
- (pcase (treesit-node-type ts-node)
- ("function_definition"
- (treesit-node-child-by-field-name
- (treesit-node-child-by-field-name
- ts-node "declarator")
- "declarator"))
- ("declaration"
- (let ((child (treesit-node-child ts-node -1 t)))
- (pcase (treesit-node-type child)
- ("identifier" child)
- (_ (treesit-node-child-by-field-name
- child "declarator")))))
- ("struct_specifier"
- (treesit-node-child-by-field-name
- ts-node "name")))
- t)
- "Unnamed node")))
+ (treesit-node-text
+ (pcase (treesit-node-type ts-node)
+ ("function_definition"
+ (treesit-node-child-by-field-name
+ (treesit-node-child-by-field-name
+ ts-node "declarator")
+ "declarator"))
+ ("declaration"
+ (let ((child (treesit-node-child ts-node -1 t)))
+ (pcase (treesit-node-type child)
+ ("identifier" child)
+ (_ (treesit-node-child-by-field-name
+ child "declarator")))))
+ ("struct_specifier"
+ (treesit-node-child-by-field-name
+ ts-node "name"))))))
(marker (when ts-node
(set-marker (make-marker)
(treesit-node-start ts-node)))))
- ;; A struct_specifier could be inside a parameter list, another
- ;; struct definition, a variable declaration, a function
- ;; declaration. In those cases we don't include it.
(cond
+ ;; A struct_specifier could be inside a parameter list, another
+ ;; struct definition, a variable declaration, a function
+ ;; declaration. In those cases we don't include it.
((string-match-p
(rx (or "parameter_declaration" "field_declaration"
"declaration" "function_definition"))
(or (treesit-node-type (treesit-node-parent ts-node))
""))
nil)
+ ;; Ignore function local variable declarations.
((and (equal (treesit-node-type ts-node) "declaration")
(not (equal (treesit-node-type (treesit-node-parent ts-node))
"translation_unit")))
nil)
- ((null ts-node) subtrees)
+ ((or (null ts-node) (null name)) subtrees)
(subtrees
`((,name ,(cons name marker) ,@subtrees)))
(t
@@ -437,10 +436,14 @@ the subtrees."
(var-tree (treesit-induce-sparse-tree
node "^declaration$"))
(struct-tree (treesit-induce-sparse-tree
- node "^struct_specifier$")))
- `(("Struct" . ,(c-ts-mode--imenu-1 struct-tree))
- ("Variable" . ,(c-ts-mode--imenu-1 var-tree))
- ("Function" . ,(c-ts-mode--imenu-1 func-tree)))))
+ node "^struct_specifier$"))
+ (func-index (c-ts-mode--imenu-1 func-tree))
+ (var-index (c-ts-mode--imenu-1 var-tree))
+ (struct-index (c-ts-mode--imenu-1 struct-tree)))
+ (append
+ (when struct-index `(("Struct" . ,struct-index)))
+ (when var-index `(("Variable" . ,var-index)))
+ (when func-index `(("Function" . ,func-index))))))
;;;###autoload
(define-derived-mode c-ts-mode--base-mode prog-mode "C"
- feature/tree-sitter updated (d1ef0243eb -> 902649a170), Yuan Fu, 2022/11/16
- feature/tree-sitter 639821d49a 3/6: Allow checking for outdated nodes in tree-sitter, Yuan Fu, 2022/11/16
- feature/tree-sitter 75b65b3f67 2/6: ; Add documentation for tree-sitter parser after-change notifiers, Yuan Fu, 2022/11/16
- feature/tree-sitter 902649a170 6/6: Fix treesit-search-forward not matching leaf nodes, Yuan Fu, 2022/11/16
- feature/tree-sitter 306e49285a 1/6: Add treesit-explore-mode, Yuan Fu, 2022/11/16
- feature/tree-sitter 7f57d80846 4/6: Fix c-ts-mode-imenu,
Yuan Fu <=
- feature/tree-sitter 7bc615fd23 5/6: Tweaks on c-ts-mode fontification rules, Yuan Fu, 2022/11/16