Spelling fix.
[bpt/emacs.git] / test / indent / ruby.rb
index 2b2b95b..daec1c3 100644 (file)
@@ -3,6 +3,7 @@ if something_wrong?             # ruby-move-to-block-skips-heredoc
   boo hoo
   end
   eowarn
+  foo
 end
 
 # Percent literals.
@@ -40,6 +41,43 @@ foo = {                         # ruby-deep-indent-disabled
   a: b
 }
 
+foo = { a: b,
+        a1: b1
+      }
+
+foo({                           # bug#16118
+      a: b,
+      c: d
+    })
+
+bar = foo(
+  a, [
+    1,
+  ],
+  :qux => [
+    3
+  ])
+
+foo(
+  [
+    {
+      a: b
+    },
+  ],
+  {
+    c: d
+  }
+)
+
+foo([{
+       a: 2
+     },
+     {
+       b: 3
+     },
+     4
+    ])
+
 foo = [                         # ruby-deep-indent-disabled
   1
 ]
@@ -76,17 +114,17 @@ def test2 (arg)
     puts "there"
   end
 
-  case a
-  when "a"
-    6
-  # Support for this syntax was removed in Ruby 1.9, so we
-  # probably don't need to handle it either.
-  # when "b" :
-  #   7
-  # when "c" : 2
-  when "d"  then 4
-  else 5
-  end
+  b = case a
+      when "a"
+        6
+      # Support for this syntax was removed in Ruby 1.9, so we
+      # probably don't need to handle it either.
+      # when "b" :
+      #   7
+      # when "c" : 2
+      when "d"  then 4
+      else 5
+      end
 end
 
 # Some Cucumber code:
@@ -97,6 +135,13 @@ end
 # Bug#15208
 if something == :==
   do_something
+
+  return false unless method == :+
+  x = y + z # Bug#16609
+
+  a = 1 ? 2 :(
+    2 + 3
+  )
 end
 
 # Example from http://www.ruby-doc.org/docs/ProgrammingRuby/html/language.html
@@ -107,6 +152,9 @@ d = 4 + 5 +      # no '\' needed
 e = 8 + 9   \
     + 10         # '\' needed
 
+foo = obj.bar { |m| tee(m) } +
+      obj.qux { |m| hum(m) }
+
 begin
   foo
 ensure
@@ -148,10 +196,182 @@ z = {
   }
 }
 
-# Examples below still fail with `ruby-use-smie' on:
+foo if
+  bar
+
+if foo?
+  bar
+end
+
+method arg1,                   # bug#15594
+       method2 arg2,
+               arg3
+
+method? arg1,
+        arg2
+
+method! arg1,
+        arg2
+
+method !arg1,
+       arg2
+
+method [],
+       arg2
+
+method :foo,
+       :bar
+
+method (a + b),
+       c, :d => :e,
+       f: g
+
+desc "abc",
+     defg
+
+it "is a method call with block" do |asd|
+  foo
+end
+
+it("is too!") {
+  bar
+    .qux
+}
+
+and_this_one(has) { |block, parameters|
+  tee
+}
+
+if foo &&
+   bar
+end
 
 foo +
   bar
 
-foo if
+foo and
+  bar
+
+foo > bar &&
+  tee < qux
+
+zux do
+  foo == bar and
+    tee == qux
+end
+
+foo ^
+  bar
+
+foo_bar_tee(1, 2, 3)
+  .qux.bar
+  .tee
+
+foo do
+  bar
+    .tee
+end
+
+def bar
+  foo
+    .baz
+end
+
+# http://stackoverflow.com/questions/17786563/emacs-ruby-mode-if-expressions-indentation
+tee = if foo
+        bar
+      else
+        tee
+      end
+
+a = b {
+  c
+}
+
+aa = bb do
+  cc
+end
+
+foo :bar do
+  qux
+end
+
+foo do |*args|
+  tee
+end
+
+bar do |&block|
+  tee
+end
+
+foo = [1, 2, 3].map do |i|
+  i + 1
+end
+
+bar.foo do
   bar
+end
+
+bar.foo(tee) do
+  bar
+end
+
+bar.foo(tee) {
+  bar
+}
+
+bar 1 do
+  foo 2 do
+    tee
+  end
+end
+
+foo |
+  bar
+
+def qux
+  foo ||= begin
+            bar
+            tee
+          rescue
+            oomph
+          end
+end
+
+private def foo
+  bar
+end
+
+%^abc^
+ddd
+
+qux = foo.fee ?
+        bar :
+        tee
+
+zoo.keep.bar!(
+  {x: y,
+   z: t})
+
+zoo
+  .lose(
+    q, p)
+
+a.records().map(&:b).zip(
+  foo)
+
+# FIXME: This is not consistent with the example below it, but this
+# offset only happens if the colon is at eol, which wouldn't be often.
+# Tokenizing `bar:' as `:bar =>' would be better, but it's hard to
+# distinguish from a variable reference inside a ternary operator.
+foo(bar:
+      tee)
+
+foo(:bar =>
+    tee)
+
+{'a' => {
+   'b' => 'c',
+   'd' => %w(e f)
+ }
+}