summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuan Fu <casouri@gmail.com>2023-02-26 18:24:49 -0800
committerYuan Fu <casouri@gmail.com>2023-02-26 21:38:22 -0800
commitedf5b97686908114f254b5077c71e8202149545f (patch)
treec77f8637ffb1e19159be449a6c782f6e5f4007ef
parent0f15286c5396e3415e0f40c21b6f6d7554f46a5e (diff)
downloademacs-edf5b97686908114f254b5077c71e8202149545f.tar.gz
Simplify c-ts-mode--top-level-label-matcher
* lisp/progmodes/c-ts-mode.el: (c-ts-mode--top-level-label-matcher): Make more assumptions and remove the loop, so it's faster in large files.
-rw-r--r--lisp/progmodes/c-ts-mode.el15
1 files changed, 6 insertions, 9 deletions
diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el
index 2c79cf46308..befc0cf5643 100644
--- a/lisp/progmodes/c-ts-mode.el
+++ b/lisp/progmodes/c-ts-mode.el
@@ -394,16 +394,13 @@ MODE is either `c' or `cpp'."
((parent-is "do_statement") parent-bol 0)
,@common))))
-(defun c-ts-mode--top-level-label-matcher (node &rest _)
+(defun c-ts-mode--top-level-label-matcher (node parent &rest _)
"A matcher that matches a top-level label.
-NODE should be a labeled_statement."
- (let ((func (treesit-parent-until
- node (lambda (n)
- (equal (treesit-node-type n)
- "compound_statement")))))
- (and (equal (treesit-node-type node)
- "labeled_statement")
- (not (treesit-node-top-level func "compound_statement")))))
+NODE should be a labeled_statement. PARENT is its parent."
+ (and (equal (treesit-node-type node)
+ "labeled_statement")
+ (equal "function_definition"
+ (treesit-node-type (treesit-node-parent parent)))))
;;; Font-lock