[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
emacs-29 8575043f56 05/10: Remove duplicate entries in c-ts-mode's Imenu
From: |
Yuan Fu |
Subject: |
emacs-29 8575043f56 05/10: Remove duplicate entries in c-ts-mode's Imenu |
Date: |
Sat, 7 Jan 2023 21:44:43 -0500 (EST) |
branch: emacs-29
commit 8575043f56b6b09001d53657f91eb2bb706e802a
Author: Yuan Fu <casouri@gmail.com>
Commit: Yuan Fu <casouri@gmail.com>
Remove duplicate entries in c-ts-mode's Imenu
Right now the Class subindex includes top-level functions, which is
wrong. This change ensures the Class subindex only contain classes and
functions nested in those classes.
* lisp/progmodes/c-ts-mode.el:
(c-ts-mode--defun-for-class-in-imenu-p): New function.
* lisp/progmodes/c-ts-mode.el (c-ts-base-mode): Use the new function.
---
lisp/progmodes/c-ts-mode.el | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el
index d2280f1d38..3463600bda 100644
--- a/lisp/progmodes/c-ts-mode.el
+++ b/lisp/progmodes/c-ts-mode.el
@@ -583,6 +583,23 @@ Ie, NODE is not nested."
node "declarator"))
"function_declarator")))))
+(defun c-ts-mode--defun-for-class-in-imenu-p (node)
+ "Check if NODE is a valid entry for the Class subindex.
+
+Basically, if NODE is a class, return non-nil; if NODE is a
+function but is under a class, return non-nil; if NODE is a
+top-level function, return nil.
+
+This is for the Class subindex in
+`treesit-simple-imenu-settings'."
+ (pcase (treesit-node-type node)
+ ;; The Class subindex only has class_specifier and
+ ;; function_definition.
+ ("class_specifier" t)
+ ("function_definition"
+ ;; Return t if this function is nested in a class.
+ (treesit-node-top-level node "class_specifier"))))
+
(defun c-ts-mode--defun-skipper ()
"Custom defun skipper for `c-ts-mode' and friends.
Structs in C ends with a semicolon, but the semicolon is not
@@ -788,7 +805,7 @@ Set up:
("Class" ,(rx bos (or "class_specifier"
"function_definition")
eos)
- ,pred nil))))
+ c-ts-mode--defun-for-class-in-imenu-p nil))))
(setq-local treesit-font-lock-feature-list
'(( comment definition)
- emacs-29 updated (ee3e8d3f92 -> e3d806b417), Yuan Fu, 2023/01/07
- emacs-29 16f1e47ca8 02/10: ; * lisp/align.el (align-c++-modes): Add c/c++-ts-mode., Yuan Fu, 2023/01/07
- emacs-29 8575043f56 05/10: Remove duplicate entries in c-ts-mode's Imenu,
Yuan Fu <=
- emacs-29 73168793c0 06/10: Fix label indentation for Linux style in c-ts-mode (bug#60543), Yuan Fu, 2023/01/07
- emacs-29 800e15e3be 09/10: Fix string-interpolation feature of python-ts-mode (bug#60599), Yuan Fu, 2023/01/07
- emacs-29 508389ad2b 01/10: Add documentation for c/c++-ts-mode (bug#60443), Yuan Fu, 2023/01/07
- emacs-29 cc1de953d4 03/10: ; * lisp/progmodes/gud.el (gud-tooltip-modes): Add ts- modes., Yuan Fu, 2023/01/07
- emacs-29 38b63f4c3c 08/10: Add indentation rule for concatenated_string (bug#60572), Yuan Fu, 2023/01/07
- emacs-29 ef7f3c6388 04/10: Fix use of treesit-ready-p in c/c++-ts-mode, Yuan Fu, 2023/01/07
- emacs-29 2cdd75a18f 07/10: Fix highlighting of variable-declarations in typescript-ts-mode, Yuan Fu, 2023/01/07
- emacs-29 e3d806b417 10/10: Fix string fontification on python-ts-mode (bug#60599), Yuan Fu, 2023/01/07