summaryrefslogtreecommitdiff
path: root/test/lisp
diff options
context:
space:
mode:
authorDmitry Gutov <dgutov@yandex.ru>2022-12-30 23:58:26 +0200
committerDmitry Gutov <dgutov@yandex.ru>2022-12-31 00:00:21 +0200
commit8675f4136c7da7356e5578cf1eabda2f37a597e5 (patch)
treef37bbb61f80912e30f2428c20b16c30c8e7ab2bc /test/lisp
parent4922de626f05f0c26bc732b082c30c5c18a88416 (diff)
downloademacs-8675f4136c7da7356e5578cf1eabda2f37a597e5.tar.gz
emacs-8675f4136c7da7356e5578cf1eabda2f37a597e5.tar.bz2
emacs-8675f4136c7da7356e5578cf1eabda2f37a597e5.zip
Add new options for Ruby code indentation
* lisp/progmodes/ruby-mode.el (ruby-block-indent) (ruby-after-operator-indent, ruby-method-call-indent) (ruby-parenless-call-arguments-indent): New options (bug#60186). (ruby-smie-grammar): Specify associativity for "?". (ruby-smie--indent-to-stmt): Add optional argument. * test/lisp/progmodes/ruby-mode-resources/ruby.rb: New cases. * test/lisp/progmodes/ruby-mode-resources/ruby-method-call-indent.rb: * test/lisp/progmodes/ruby-mode-resources/ruby-block-indent.rb: * test/lisp/progmodes/ruby-mode-resources/ruby-after-operator-indent.rb: * test/lisp/progmodes/ruby-mode-resources/ ruby-parenless-call-arguments-indent.rb: New files. * test/lisp/progmodes/ruby-mode-tests.el: Add indentation tests for new files.
Diffstat (limited to 'test/lisp')
-rw-r--r--test/lisp/progmodes/ruby-mode-resources/ruby-after-operator-indent.rb29
-rw-r--r--test/lisp/progmodes/ruby-mode-resources/ruby-block-indent.rb33
-rw-r--r--test/lisp/progmodes/ruby-mode-resources/ruby-method-call-indent.rb15
-rw-r--r--test/lisp/progmodes/ruby-mode-resources/ruby-parenless-call-arguments-indent.rb23
-rw-r--r--test/lisp/progmodes/ruby-mode-resources/ruby.rb23
-rw-r--r--test/lisp/progmodes/ruby-mode-tests.el4
6 files changed, 127 insertions, 0 deletions
diff --git a/test/lisp/progmodes/ruby-mode-resources/ruby-after-operator-indent.rb b/test/lisp/progmodes/ruby-mode-resources/ruby-after-operator-indent.rb
new file mode 100644
index 00000000000..25cd8736f97
--- /dev/null
+++ b/test/lisp/progmodes/ruby-mode-resources/ruby-after-operator-indent.rb
@@ -0,0 +1,29 @@
+4 +
+ 5 +
+ 6 +
+ 7
+
+qux = 4 + 5 *
+ 6 +
+ 7
+
+foo = obj.bar { |m| tee(m) } +
+ obj.qux { |m| hum(m) }
+
+foo.
+ bar
+ .baz
+
+qux = foo.fee ?
+ bar :
+ tee
+
+# Endless methods.
+class Bar
+ def foo(abc) = bar +
+ baz
+end
+
+# Local Variables:
+# ruby-after-operator-indent: nil
+# End:
diff --git a/test/lisp/progmodes/ruby-mode-resources/ruby-block-indent.rb b/test/lisp/progmodes/ruby-mode-resources/ruby-block-indent.rb
new file mode 100644
index 00000000000..32882814b7e
--- /dev/null
+++ b/test/lisp/progmodes/ruby-mode-resources/ruby-block-indent.rb
@@ -0,0 +1,33 @@
+foo
+ .asdasd
+ .proc do |**args|
+ p(**args)
+ end
+
+foo
+ .asdasd
+ .proc { |**args|
+ p(**args)
+ }
+
+bar.foo do
+ bar
+end
+
+bar.foo(tee) do
+ bar
+end
+
+bar.foo(tee) {
+ bar
+}
+
+x.foo do
+ foo
+end.bar do
+ bar
+end
+
+# Local Variables:
+# ruby-block-indent: nil
+# End:
diff --git a/test/lisp/progmodes/ruby-mode-resources/ruby-method-call-indent.rb b/test/lisp/progmodes/ruby-mode-resources/ruby-method-call-indent.rb
new file mode 100644
index 00000000000..1a8285ee919
--- /dev/null
+++ b/test/lisp/progmodes/ruby-mode-resources/ruby-method-call-indent.rb
@@ -0,0 +1,15 @@
+foo2 =
+ subject.
+ update(
+ 2
+ )
+
+foo3 =
+ subject
+ .update(
+ 2
+ )
+
+# Local Variables:
+# ruby-method-call-indent: nil
+# End:
diff --git a/test/lisp/progmodes/ruby-mode-resources/ruby-parenless-call-arguments-indent.rb b/test/lisp/progmodes/ruby-mode-resources/ruby-parenless-call-arguments-indent.rb
new file mode 100644
index 00000000000..58e08810c4c
--- /dev/null
+++ b/test/lisp/progmodes/ruby-mode-resources/ruby-parenless-call-arguments-indent.rb
@@ -0,0 +1,23 @@
+method arg1,
+ method2 arg2,
+ arg3, [
+ arg4,
+ arg5
+ ]
+
+zzz = method (a + b),
+ c, :d => :e,
+ f: g
+
+return render json: {
+ errors: { base: [message] },
+ copying: copying
+ },
+ status: 400
+
+foo(a,
+ b)
+
+# Local Variables:
+# ruby-parenless-call-arguments-indent: nil
+# End:
diff --git a/test/lisp/progmodes/ruby-mode-resources/ruby.rb b/test/lisp/progmodes/ruby-mode-resources/ruby.rb
index 6a69d9db78a..bfae948b259 100644
--- a/test/lisp/progmodes/ruby-mode-resources/ruby.rb
+++ b/test/lisp/progmodes/ruby-mode-resources/ruby.rb
@@ -226,6 +226,7 @@ desc "foo foo" \
foo.
bar
+ .baz
# https://github.com/rails/rails/blob/17f5d8e062909f1fcae25351834d8e89967b645e/activesupport/lib/active_support/time_with_zone.rb#L206
foo # comment intended to confuse the tokenizer
@@ -380,6 +381,18 @@ foo = [1, 2, 3].map do |i|
i + 1
end
+m1 = foo
+ .asdasd
+ .proc do |**args|
+ p(**args)
+end
+
+m2 = foo
+ .asdasd
+ .proc { |**args|
+ p(**args)
+}
+
bar.foo do
bar
end
@@ -398,6 +411,12 @@ bar 1 do
end
end
+x.foo do
+ foo
+end.bar do
+ bar
+end
+
foo |
bar
@@ -540,5 +559,9 @@ class Bar
end
# Local Variables:
+# ruby-after-operator-indent: t
+# ruby-block-indent: t
+# ruby-method-call-indent: t
# ruby-method-params-indent: t
+# ruby-parenless-call-arguments-indent: t
# End:
diff --git a/test/lisp/progmodes/ruby-mode-tests.el b/test/lisp/progmodes/ruby-mode-tests.el
index 560f780285a..5c81cc31cc1 100644
--- a/test/lisp/progmodes/ruby-mode-tests.el
+++ b/test/lisp/progmodes/ruby-mode-tests.el
@@ -956,7 +956,11 @@ VALUES-PLIST is a list with alternating index and value elements."
(kill-buffer buf)))))
(ruby-deftest-indent "ruby.rb")
+(ruby-deftest-indent "ruby-after-operator-indent.rb")
+(ruby-deftest-indent "ruby-block-indent.rb")
+(ruby-deftest-indent "ruby-method-call-indent.rb")
(ruby-deftest-indent "ruby-method-params-indent.rb")
+(ruby-deftest-indent "ruby-parenless-call-arguments-indent.rb")
(ert-deftest ruby--test-chained-indentation ()
(with-temp-buffer