Add c-ts-mode-indent-defun (bug#59662)

Add in this function to mimic 'c-indent-defun'.

* lisp/progmodes/c-ts-mode.el (c-ts-mode-indent-defun): New function.
(c-ts-mode-map): New mode map that uses said function.
This commit is contained in:
Theodor Thornhill 2022-12-02 16:05:35 +01:00 committed by Yuan Fu
parent 6479691cf0
commit c83c95634e
No known key found for this signature in database
GPG key ID: 56E19BC57664A442

View file

@ -520,9 +520,30 @@ the subtrees."
(if (looking-at "\\s<\\|\n")
(forward-line 1)))))
(defun c-ts-mode-indent-defun ()
"Indent the current top-level declaration syntactically.
`treesit-defun-type-regexp' defines what constructs to indent."
(interactive "*")
(let ((orig-point (point-marker)))
;; If `treesit-beginning-of-defun' returns nil, we are not in a
;; defun, so don't indent anything.
(when (treesit-beginning-of-defun)
(let ((start (point)))
(treesit-end-of-defun)
(indent-region start (point))))
(goto-char orig-point)))
(defvar-keymap c-ts-mode-map
:doc "Keymap for the C language with tree-sitter"
:parent prog-mode-map
"C-c C-q" #'c-ts-mode-indent-defun)
;;;###autoload
(define-derived-mode c-ts-base-mode prog-mode "C"
"Major mode for editing C, powered by tree-sitter."
"Major mode for editing C, powered by tree-sitter.
\\{c-ts-mode-map}"
:syntax-table c-ts-mode--syntax-table
;; Navigation.