1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-15 10:30:25 -08:00

Fix treesit-thing-settings for c++-ts-mode (bug#65810)

* lisp/progmodes/c-ts-mode.el:
(c-ts-mode--thing-settings): New varaible.
(c-ts-base-mode): Use c-ts-mode--thing-settings.
This commit is contained in:
Yuan Fu 2023-09-07 16:08:42 -07:00
parent 30de869a3e
commit be13e8fc01
No known key found for this signature in database
GPG key ID: 56E19BC57664A442

View file

@ -1014,6 +1014,36 @@ if `c-ts-mode-emacs-sources-support' is non-nil."
(or (treesit-add-log-current-defun)
(c-ts-mode--defun-name (c-ts-mode--emacs-defun-at-point))))
;;; Things
(defvar c-ts-mode--thing-settings
`(;; It's more useful to include semicolons as sexp so
;; that users can move to the end of a statement.
(sexp (not ,(rx (or "{" "}" "[" "]" "(" ")" ","))))
;; compound_statement makes us jump over too big units
;; of code, so skip that one, and include the other
;; statements.
(sentence
,(regexp-opt '("preproc"
"declaration"
"specifier"
"attributed_statement"
"labeled_statement"
"expression_statement"
"if_statement"
"switch_statement"
"do_statement"
"while_statement"
"for_statement"
"return_statement"
"break_statement"
"continue_statement"
"goto_statement"
"case_statement")))
(text ,(regexp-opt '("comment"
"raw_string_literal"))))
"`treesit-thing-settings' for both C and C++.")
;;; Support for FOR_EACH_* macros
;;
;; FOR_EACH_TAIL, FOR_EACH_TAIL_SAFE, FOR_EACH_FRAME etc., followed by
@ -1133,32 +1163,8 @@ BEG and END are described in `treesit-range-rules'."
;; spirit, especially when used for movement, is like "expression"
;; or "syntax unit". --yuan
(setq-local treesit-thing-settings
`((c
;; It's more useful to include semicolons as sexp so
;; that users can move to the end of a statement.
(sexp (not ,(rx (or "{" "}" "[" "]" "(" ")" ","))))
;; compound_statement makes us jump over too big units
;; of code, so skip that one, and include the other
;; statements.
(sentence
,(regexp-opt '("preproc"
"declaration"
"specifier"
"attributed_statement"
"labeled_statement"
"expression_statement"
"if_statement"
"switch_statement"
"do_statement"
"while_statement"
"for_statement"
"return_statement"
"break_statement"
"continue_statement"
"goto_statement"
"case_statement")))
(text ,(regexp-opt '("comment"
"raw_string_literal"))))))
`((c ,@c-ts-mode--thing-settings)
(cpp ,@c-ts-mode--thing-settings)))
;; Nodes like struct/enum/union_specifier can appear in
;; function_definitions, so we need to find the top-level node.