ruby-ts-mode: Fix indentation inside empty if/unless/case/def
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--indent-rules): Add new rule. * test/lisp/progmodes/ruby-ts-mode-tests.el (ruby-ts-indent-empty-if-else): New test.
This commit is contained in:
parent
0ec0a610ed
commit
a5651c0c40
2 changed files with 23 additions and 0 deletions
|
@ -661,6 +661,13 @@ a statement container is a node that matches
|
||||||
((n-p-gp nil "body_statement" ,ruby-ts--method-regex) ;other statements
|
((n-p-gp nil "body_statement" ,ruby-ts--method-regex) ;other statements
|
||||||
(ruby-ts--align-keywords ruby-ts--grand-parent-node) ruby-indent-level)
|
(ruby-ts--align-keywords ruby-ts--grand-parent-node) ruby-indent-level)
|
||||||
|
|
||||||
|
;; Quirk of the ruby parser: these "alignable" nodes don't
|
||||||
|
;; have the "container" child node when there are no
|
||||||
|
;; statements inside. Thus we have to have a separate rule
|
||||||
|
;; for the "empty if/unless/case/def" situation.
|
||||||
|
((match "\\`\\'" "\\`\\(?:if\\|unless\\|case\\|method\\)\\'")
|
||||||
|
(ruby-ts--align-keywords ruby-ts--parent-node) ruby-indent-level)
|
||||||
|
|
||||||
;; Chained calls:
|
;; Chained calls:
|
||||||
;; if `ruby-align-chained-calls' is true, the first query
|
;; if `ruby-align-chained-calls' is true, the first query
|
||||||
;; matches and the node is aligned under the first dot (.);
|
;; matches and the node is aligned under the first dot (.);
|
||||||
|
|
|
@ -122,6 +122,22 @@ The whitespace before and including \"|\" on each line is removed."
|
||||||
(funcall indent-line-function)
|
(funcall indent-line-function)
|
||||||
(should (= (current-indentation) ruby-indent-level))))
|
(should (= (current-indentation) ruby-indent-level))))
|
||||||
|
|
||||||
|
(ert-deftest ruby-ts-indent-empty-if-else ()
|
||||||
|
(skip-unless (treesit-ready-p 'ruby t))
|
||||||
|
(let* ((str "c = if foo
|
||||||
|
zz
|
||||||
|
else
|
||||||
|
zz
|
||||||
|
end
|
||||||
|
"))
|
||||||
|
(ruby-ts-with-temp-buffer str
|
||||||
|
(goto-char (point-min))
|
||||||
|
(dotimes (_ 2)
|
||||||
|
(re-search-forward "^ *zz")
|
||||||
|
(replace-match "")
|
||||||
|
(funcall indent-line-function)
|
||||||
|
(should (= (current-indentation) 6))))))
|
||||||
|
|
||||||
(ert-deftest ruby-ts-add-log-current-method-examples ()
|
(ert-deftest ruby-ts-add-log-current-method-examples ()
|
||||||
(skip-unless (treesit-ready-p 'ruby t))
|
(skip-unless (treesit-ready-p 'ruby t))
|
||||||
(let ((pairs '(("foo" . "#foo")
|
(let ((pairs '(("foo" . "#foo")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue