From 9ed9ff4690a8b26ac9729a66aa22f2e14856cd0c Mon Sep 17 00:00:00 2001 From: Dmitry Gutov Date: Tue, 17 Jan 2023 23:46:41 +0200 Subject: [PATCH] ruby-ts-mode: Fix the rules for hanging arrays and hashes * lisp/progmodes/ruby-ts-mode.el (ruby-ts--indent-rules): Fix the rules for hanging arrays and hashes (to line up to parent-bol instead of the opening brace). * test/lisp/progmodes/ruby-mode-resources/ruby-ts.rb: New file with examples. * test/lisp/progmodes/ruby-ts-mode-tests.el: Use it here. --- lisp/progmodes/ruby-ts-mode.el | 18 ++++----------- .../progmodes/ruby-mode-resources/ruby-ts.rb | 23 +++++++++++++++++++ test/lisp/progmodes/ruby-ts-mode-tests.el | 1 + 3 files changed, 28 insertions(+), 14 deletions(-) create mode 100644 test/lisp/progmodes/ruby-mode-resources/ruby-ts.rb diff --git a/lisp/progmodes/ruby-ts-mode.el b/lisp/progmodes/ruby-ts-mode.el index 939c054b041..19b766ceadb 100644 --- a/lisp/progmodes/ruby-ts-mode.el +++ b/lisp/progmodes/ruby-ts-mode.el @@ -749,20 +749,10 @@ i.e. expr of def foo(args) = expr is returned." (not ruby-ts--same-line-hash-array-p)) grand-parent ruby-indent-level) - ((n-p-gp "}" "hash" "assignment") (ruby-ts--bol ruby-ts--grand-parent-node) 0) - ((n-p-gp nil "hash" "assignment") (ruby-ts--bol ruby-ts--grand-parent-node) ruby-indent-level) - ((n-p-gp "]" "array" "assignment") (ruby-ts--bol ruby-ts--grand-parent-node) 0) - ((n-p-gp nil "array" "assignment") (ruby-ts--bol ruby-ts--grand-parent-node) ruby-indent-level) - - ((n-p-gp "}" "hash" "argument_list") first-sibling 0) - ((n-p-gp nil "hash" "argument_list") first-sibling ruby-indent-level) - ((n-p-gp "]" "array" "argument_list") first-sibling 0) - ((n-p-gp nil "array" "argument_list") first-sibling ruby-indent-level) - - ((match "}" "hash") first-sibling 0) - ((parent-is "hash") first-sibling ruby-indent-level) - ((match "]" "array") first-sibling 0) - ((parent-is "array") first-sibling ruby-indent-level) + ((match "}" "hash") parent-bol 0) + ((parent-is "hash") parent-bol ruby-indent-level) + ((match "]" "array") parent-bol 0) + ((parent-is "array") parent-bol ruby-indent-level) ;; If the previous method isn't finished yet, this will get ;; the next method indented properly. diff --git a/test/lisp/progmodes/ruby-mode-resources/ruby-ts.rb b/test/lisp/progmodes/ruby-mode-resources/ruby-ts.rb new file mode 100644 index 00000000000..6b4107ef97b --- /dev/null +++ b/test/lisp/progmodes/ruby-mode-resources/ruby-ts.rb @@ -0,0 +1,23 @@ +variable = foo( + [ + qwe + ], [ + rty + ], { + a: 3 + } +) + +tee = [ + qwe +] + +qux = [1, + 2] + +att = {a: 1, + b: 2} + +# Local Variables: +# mode: ruby-ts +# End: diff --git a/test/lisp/progmodes/ruby-ts-mode-tests.el b/test/lisp/progmodes/ruby-ts-mode-tests.el index eaf6367a306..d7b6258385b 100644 --- a/test/lisp/progmodes/ruby-ts-mode-tests.el +++ b/test/lisp/progmodes/ruby-ts-mode-tests.el @@ -250,6 +250,7 @@ The whitespace before and including \"|\" on each line is removed." (should (equal (buffer-string) orig)))) (kill-buffer buf))))) +(ruby-ts-deftest-indent "ruby-ts.rb") (ruby-ts-deftest-indent "ruby-method-params-indent.rb") (ruby-ts-deftest-indent "ruby-block-indent.rb") -- 2.39.2