]> code.delx.au - gnu-emacs/blob - test/manual/indent/ruby.rb
Merge from origin/emacs-25
[gnu-emacs] / test / manual / indent / ruby.rb
1 if something_wrong? # ruby-move-to-block-skips-heredoc
2 ActiveSupport::Deprecation.warn(<<-eowarn)
3 boo hoo
4 end
5 eowarn
6 foo
7
8 foo(<<~squiggly)
9 end
10 squiggly
11 end
12
13 def foo
14 %^bar^
15 end
16
17 # Percent literals.
18 b = %Q{This is a "string"}
19 c = %w!foo
20 bar
21 baz!
22 d = %(hello (nested) world)
23
24 # Don't propertize percent literals inside strings.
25 "(%s, %s)" % [123, 456]
26
27 "abc/#{def}ghi"
28 "abc\#{def}ghi"
29
30 # Or inside comments.
31 x = # "tot %q/to"; =
32 y = 2 / 3
33
34 # Regexp after whitelisted method.
35 "abc".sub /b/, 'd'
36
37 # Don't mis-match "sub" at the end of words.
38 a = asub / aslb + bsub / bslb;
39
40 # Highlight the regexp after "if".
41 x = toto / foo if /do bar/ =~ "dobar"
42
43 # Regexp options are highlighted.
44
45 /foo/xi != %r{bar}mo.tee
46
47 foo { /"tee/
48 bar { |qux| /'fee"/ } # bug#20026
49 }
50
51 bar(class: XXX) do # ruby-indent-keyword-label
52 foo
53 end
54 bar
55
56 foo = [1, # ruby-deep-indent
57 2]
58
59 foo = { # ruby-deep-indent-disabled
60 a: b
61 }
62
63 foo = { a: b,
64 a1: b1
65 }
66
67 foo({ # bug#16118
68 a: b,
69 c: d
70 })
71
72 bar = foo(
73 a, [
74 1,
75 ],
76 :qux => [
77 3
78 ])
79
80 foo(
81 [
82 {
83 a: b
84 },
85 ],
86 {
87 c: d
88 }
89 )
90
91 foo([{
92 a: 2
93 },
94 {
95 b: 3
96 },
97 4
98 ])
99
100 foo = [ # ruby-deep-indent-disabled
101 1
102 ]
103
104 foo( # ruby-deep-indent-disabled
105 a
106 )
107
108 # Multiline regexp.
109 /bars
110 tees # toots
111 nfoos/
112
113 def test1(arg)
114 puts "hello"
115 end
116
117 def test2 (arg)
118 a = "apple"
119
120 if a == 2
121 puts "hello"
122 else
123 puts "there"
124 end
125
126 if a == 2 then
127 puts "hello"
128 elsif a == 3
129 puts "hello3"
130 elsif a == 3 then
131 puts "hello3"
132 else
133 puts "there"
134 end
135
136 b = case a
137 when "a"
138 6
139 # Support for this syntax was removed in Ruby 1.9, so we
140 # probably don't need to handle it either.
141 # when "b" :
142 # 7
143 # when "c" : 2
144 when "d" then 4
145 else 5
146 end
147 end
148
149 # Some Cucumber code:
150 Given /toto/ do
151 print "hello"
152 end
153
154 # Bug#15208
155 if something == :==
156 do_something
157
158 return false unless method == :+
159 x = y + z # Bug#16609
160
161 a = 1 ? 2 :(
162 2 + 3
163 )
164 end
165
166 # Bug#17097
167 if x == :!=
168 something
169 end
170
171 qux :+,
172 bar,
173 :[]=,
174 bar,
175 :a
176
177 b = $:
178 c = ??
179
180 # Example from http://www.ruby-doc.org/docs/ProgrammingRuby/html/language.html
181 d = 4 + 5 + # no '\' needed
182 6 + 7
183
184 # Example from http://www.ruby-doc.org/docs/ProgrammingRuby/html/language.html
185 e = 8 + 9 \
186 + 10 # '\' needed
187
188 foo = obj.bar { |m| tee(m) } +
189 obj.qux { |m| hum(m) }
190
191 begin
192 foo
193 ensure
194 bar
195 end
196
197 # Bug#15369
198 MSG = 'Separate every 3 digits in the integer portion of a number' \
199 'with underscores(_).'
200
201 class C
202 def foo
203 self.end
204 D.new.class
205 end
206
207 def begin
208 end
209 end
210
211 a = foo(j, k) -
212 bar_tee
213
214 while a < b do # "do" is optional
215 foo
216 end
217
218 desc "foo foo" \
219 "bar bar"
220
221 foo.
222 bar
223
224 # https://github.com/rails/rails/blob/17f5d8e062909f1fcae25351834d8e89967b645e/activesupport/lib/active_support/time_with_zone.rb#L206
225 foo
226 .bar
227
228 z = {
229 foo: {
230 a: "aaa",
231 b: "bbb"
232 }
233 }
234
235 foo if
236 bar
237
238 fail "stuff" \
239 unless all_fine?
240
241 if foo?
242 bar
243 end
244
245 method arg1, # bug#15594
246 method2 arg2,
247 arg3
248
249 method? arg1,
250 arg2
251
252 method! arg1,
253 arg2
254
255 method !arg1,
256 arg2
257
258 method [],
259 arg2
260
261 method :foo,
262 :bar
263
264 method (a + b),
265 c, :d => :e,
266 f: g
267
268 desc "abc",
269 defg
270
271 it "is a method call with block" do |asd|
272 foo
273 end
274
275 it("is too!") {
276 bar
277 .qux
278 }
279
280 and_this_one(has) { |block, parameters|
281 tee
282 }
283
284 if foo &&
285 bar
286 end
287
288 foo +
289 bar
290
291 foo and
292 bar
293
294 foo > bar &&
295 tee < qux
296
297 zux do
298 foo == bar and
299 tee == qux
300 end
301
302 foo ^
303 bar
304
305 foo_bar_tee(1, 2, 3)
306 .qux.bar
307 .tee
308
309 foo do
310 bar
311 .tee
312 end
313
314 def bar
315 foo
316 .baz
317 end
318
319 # http://stackoverflow.com/questions/17786563/emacs-ruby-mode-if-expressions-indentation
320 tee = if foo
321 bar
322 else
323 tee
324 end
325
326 a = b {
327 c
328 }
329
330 aa = bb do
331 cc
332 end
333
334 foo :bar do
335 qux
336 end
337
338 foo do |*args|
339 tee
340 end
341
342 bar do |&block|
343 tee
344 end
345
346 foo = [1, 2, 3].map do |i|
347 i + 1
348 end
349
350 bar.foo do
351 bar
352 end
353
354 bar.foo(tee) do
355 bar
356 end
357
358 bar.foo(tee) {
359 bar
360 }
361
362 bar 1 do
363 foo 2 do
364 tee
365 end
366 end
367
368 foo |
369 bar
370
371 def qux
372 foo ||= begin
373 bar
374 tee
375 rescue
376 oomph
377 end
378 end
379
380 private def foo
381 bar
382 end
383
384 %^abc^
385 ddd
386
387 qux = foo.fee ?
388 bar :
389 tee
390
391 zoo.keep.bar!(
392 {x: y,
393 z: t})
394
395 zoo
396 .lose(
397 q, p)
398
399 a.records().map(&:b).zip(
400 foo)
401
402 # FIXME: This is not consistent with the example below it, but this
403 # offset only happens if the colon is at eol, which wouldn't be often.
404 # Tokenizing `bar:' as `:bar =>' would be better, but it's hard to
405 # distinguish from a variable reference inside a ternary operator.
406 foo(bar:
407 tee)
408
409 foo(:bar =>
410 tee)
411
412 {'a' => {
413 'b' => 'c',
414 'd' => %w(e f)
415 }
416 }
417
418 # Bug#17050
419
420 return render json: {
421 errors: { base: [message] },
422 copying: copying
423 },
424 status: 400
425
426 top test(
427 some,
428 top,
429 test)
430
431 foo bar, {
432 tee: qux
433 }