diff options
author | Yuan Fu <casouri@gmail.com> | 2023-01-19 14:46:17 -0800 |
---|---|---|
committer | Yuan Fu <casouri@gmail.com> | 2023-01-19 14:47:25 -0800 |
commit | 7b7b2b95138e691f1b155060b91a8998e3905651 (patch) | |
tree | 0cca8b748fe53de4ae79470a4fea666fd0c34edb | |
parent | 7ca71d66dc7365a3dd8dd5f20638b4fa612fdc5e (diff) | |
download | emacs-7b7b2b95138e691f1b155060b91a8998e3905651.tar.gz |
Fix c-ts-mode indent (bug#60873)
* lisp/progmodes/c-ts-mode.el:
(c-ts-mode--statement-offset): Handle the edge case.
* test/lisp/progmodes/c-ts-mode-resources/indent.erts: Add a test.
-rw-r--r-- | lisp/progmodes/c-ts-mode.el | 13 | ||||
-rw-r--r-- | test/lisp/progmodes/c-ts-mode-resources/indent.erts | 13 |
2 files changed, 25 insertions, 1 deletions
diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el index 0cf77c21d83..3d887971f64 100644 --- a/lisp/progmodes/c-ts-mode.el +++ b/lisp/progmodes/c-ts-mode.el @@ -285,7 +285,18 @@ PARENT is NODE's parent." (cl-incf level) (save-excursion (goto-char (treesit-node-start node)) - (cond ((bolp) nil) + ;; Add an extra level if the opening bracket is on its own + ;; line, except (1) it's at top-level, or (2) it's immedate + ;; parent is another block. + (cond ((bolp) nil) ; Case (1). + ((let ((parent-type (treesit-node-type + (treesit-node-parent node)))) + ;; Case (2). + (and parent-type + (string-match-p c-ts-mode-indent-block-type-regexp + parent-type))) + nil) + ;; Add a level. ((looking-back (rx bol (* whitespace)) (line-beginning-position)) (cl-incf level)))))) diff --git a/test/lisp/progmodes/c-ts-mode-resources/indent.erts b/test/lisp/progmodes/c-ts-mode-resources/indent.erts index 70fce68b0ec..b8524432d02 100644 --- a/test/lisp/progmodes/c-ts-mode-resources/indent.erts +++ b/test/lisp/progmodes/c-ts-mode-resources/indent.erts @@ -92,6 +92,19 @@ int main() } =-=-= +Name: Concecutive blocks (GNU Style) (bug#60873) + +=-= +int +main (int argc, + char *argv[]) +{ + { + int i = 0; + } +} +=-=-= + Name: Multiline Parameter List (bug#60398) =-= |