Use c-ts-common-statement-offset for closing brackets too

Merge c-ts-mode--close-bracket-offset into
c-ts-common-statement-offset.

* lisp/progmodes/c-ts-common.el:
(c-ts-common-statement-offset): Handle closing brackets too.
(c-ts-mode--close-bracket-offset): Remove function.
* lisp/progmodes/c-ts-mode.el (c-ts-mode--indent-styles): Use
c-ts-common-statement-offset for closing brackets.
This commit is contained in:
Yuan Fu 2023-02-02 14:57:41 -08:00
parent 74e715cb72
commit a2b77c79dc
No known key found for this signature in database
GPG key ID: 56E19BC57664A442
2 changed files with 15 additions and 16 deletions

View file

@ -281,7 +281,7 @@ special handling from our bracket-counting indent algorithm.
This can be nil, meaning such special handling is not needed.") This can be nil, meaning such special handling is not needed.")
(defun c-ts-common-statement-offset (node parent &rest _) (defun c-ts-common-statement-offset (node parent bol &rest _)
"This anchor is used for children of a statement inside a block. "This anchor is used for children of a statement inside a block.
This function basically counts the number of block nodes (i.e., This function basically counts the number of block nodes (i.e.,
@ -293,14 +293,16 @@ To support GNU style, on each block level, this function also
checks whether the opening bracket { is on its own line, if so, checks whether the opening bracket { is on its own line, if so,
it adds an extra level, except for the top-level. it adds an extra level, except for the top-level.
PARENT is NODE's parent." PARENT is NODE's parent, BOL is the beginning of non-whitespace
characters on the current line."
(let ((level 0)) (let ((level 0))
;; If NODE is a opening/closing bracket on its own line, take off ;; If NODE is a opening/closing bracket on its own line, take off
;; one level because the code below assumes NODE is a statement ;; one level because the code below assumes NODE is a statement
;; _inside_ a {} block. ;; _inside_ a {} block.
(when (and node (when (and node
(string-match-p c-ts-common-indent-block-type-regexp (or (string-match-p c-ts-common-indent-block-type-regexp
(treesit-node-type node))) (treesit-node-type node))
(save-excursion (goto-char bol) (looking-at-p "}"))))
(cl-decf level)) (cl-decf level))
;; If point is on an empty line, NODE would be nil, but we pretend ;; If point is on an empty line, NODE would be nil, but we pretend
;; there is a statement node. ;; there is a statement node.
@ -323,9 +325,9 @@ PARENT is NODE's parent."
(treesit-node-parent node)))) (treesit-node-parent node))))
;; Case (2). ;; Case (2).
(and parent-type (and parent-type
(or (string-match-p (string-match-p
c-ts-common-indent-block-type-regexp c-ts-common-indent-block-type-regexp
parent-type)))) parent-type)))
nil) nil)
;; Add a level. ;; Add a level.
((looking-back (rx bol (* whitespace)) ((looking-back (rx bol (* whitespace))
@ -352,13 +354,6 @@ the bracket in the body."
(1+ level) (1+ level)
level))) level)))
(defun c-ts-mode--close-bracket-offset (node parent &rest _)
"Offset for the closing bracket, NODE.
It's basically one level less that the statements in the block.
PARENT is NODE's parent."
(- (c-ts-common-statement-offset node parent)
(symbol-value c-ts-common-indent-offset)))
(provide 'c-ts-common) (provide 'c-ts-common)
;;; c-ts-common.el ends here ;;; c-ts-common.el ends here

View file

@ -254,12 +254,16 @@ MODE is either `c' or `cpp'."
;; int[5] a = { 0, 0, 0, 0 }; ;; int[5] a = { 0, 0, 0, 0 };
((parent-is "initializer_list") parent-bol c-ts-mode-indent-offset) ((parent-is "initializer_list") parent-bol c-ts-mode-indent-offset)
;; Statement in enum.
((parent-is "enumerator_list") point-min c-ts-common-statement-offset) ((parent-is "enumerator_list") point-min c-ts-common-statement-offset)
;; Statement in struct and union.
((parent-is "field_declaration_list") point-min c-ts-common-statement-offset) ((parent-is "field_declaration_list") point-min c-ts-common-statement-offset)
;; {} blocks. ;; Statement in {} blocks.
((node-is "}") point-min c-ts-mode--close-bracket-offset)
((parent-is "compound_statement") point-min c-ts-common-statement-offset) ((parent-is "compound_statement") point-min c-ts-common-statement-offset)
;; Closing bracket.
((node-is "}") point-min c-ts-common-statement-offset)
;; Opening bracket.
((node-is "compound_statement") point-min c-ts-common-statement-offset) ((node-is "compound_statement") point-min c-ts-common-statement-offset)
,@(when (eq mode 'cpp) ,@(when (eq mode 'cpp)