1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-27 07:37:33 +00:00

(ruby-ts--parent-call-or-bol): Handle more cases with nested literals

* lisp/progmodes/ruby-ts-mode.el (ruby-ts--parent-call-or-bol):
Handle more cases with nested literals.

* test/lisp/progmodes/ruby-mode-resources/ruby-ts.rb: Add examples.
This commit is contained in:
Dmitry Gutov 2023-01-19 05:10:05 +02:00
parent ba33b83ce4
commit 94b9cbf96f
2 changed files with 36 additions and 10 deletions

View File

@ -796,18 +796,21 @@ a statement container is a node that matches
(treesit-parent-until
parent
(lambda (node)
(or (<= (treesit-node-start node) parent-bol)
(and
;; Parenless call.
(equal (treesit-node-type node) "argument_list")
(not (equal (treesit-node-type
(treesit-node-child node 0))
"(")))))
t)))
(or (< (treesit-node-start node) parent-bol)
(string-match-p "\\`array\\|hash\\'" (treesit-node-type node))
;; Method call on same line.
(equal (treesit-node-type node) "argument_list"))))))
(cond
;; No parenless call found on the current line.
((<= (treesit-node-start found) parent-bol)
((null found)
parent-bol)
;; No paren/curly/brace found on the same line.
((< (treesit-node-start found) parent-bol)
parent-bol)
;; Hash or array opener on the same line.
((string-match-p "\\`array\\|hash\\'" (treesit-node-type found))
(save-excursion
(goto-char (treesit-node-start (treesit-node-child found 1)))
(point)))
;; Parenless call found: indent to stmt with offset.
((not ruby-parenless-call-arguments-indent)
(save-excursion
@ -815,6 +818,12 @@ a statement container is a node that matches
(ruby-ts--statement-ancestor found)))
;; (**) Same.
(+ (point) ruby-indent-level)))
;; Call with parens -- ident to first arg.
((equal (treesit-node-type (treesit-node-child found 0))
"(")
(save-excursion
(goto-char (treesit-node-start (treesit-node-child found 1)))
(point)))
;; Indent to the parenless call args beginning.
(t
(save-excursion

View File

@ -62,6 +62,23 @@
c * d +
12
{'a' => {
'b' => 'c',
'd' => %w(e f)
}
}
[1, 2, {
'b' => 'c',
'd' => %w(e f)
}
]
foo(a, {
a: b,
c: d
})
# Local Variables:
# mode: ruby-ts
# ruby-after-operator-indent: t