summaryrefslogtreecommitdiff
path: root/lisp/progmodes/ruby-ts-mode.el
diff options
context:
space:
mode:
authorDmitry Gutov <dgutov@yandex.ru>2023-01-19 05:10:05 +0200
committerDmitry Gutov <dgutov@yandex.ru>2023-01-19 05:27:43 +0200
commit94b9cbf96fbb61b53242d205ff559deee36279c6 (patch)
treeaa2ac07b43540f344fda3ce268bcbf7a5909fada /lisp/progmodes/ruby-ts-mode.el
parentba33b83ce4b27b353441a174faaba024d59e4614 (diff)
downloademacs-94b9cbf96fbb61b53242d205ff559deee36279c6.tar.gz
emacs-94b9cbf96fbb61b53242d205ff559deee36279c6.tar.bz2
emacs-94b9cbf96fbb61b53242d205ff559deee36279c6.zip
(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.
Diffstat (limited to 'lisp/progmodes/ruby-ts-mode.el')
-rw-r--r--lisp/progmodes/ruby-ts-mode.el29
1 files changed, 19 insertions, 10 deletions
diff --git a/lisp/progmodes/ruby-ts-mode.el b/lisp/progmodes/ruby-ts-mode.el
index 5df7e397f03..a2b2721dc1b 100644
--- a/lisp/progmodes/ruby-ts-mode.el
+++ b/lisp/progmodes/ruby-ts-mode.el
@@ -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