diff options
author | Yuan Fu <casouri@gmail.com> | 2023-02-26 18:24:49 -0800 |
---|---|---|
committer | Yuan Fu <casouri@gmail.com> | 2023-02-26 21:38:22 -0800 |
commit | edf5b97686908114f254b5077c71e8202149545f (patch) | |
tree | c77f8637ffb1e19159be449a6c782f6e5f4007ef | |
parent | 0f15286c5396e3415e0f40c21b6f6d7554f46a5e (diff) | |
download | emacs-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.el | 15 |
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 |