]> code.delx.au - gnu-emacs/blob - test/indent/ruby.rb
Uncomment the next-error-function integration in xref
[gnu-emacs] / test / 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 # Example from http://www.ruby-doc.org/docs/ProgrammingRuby/html/language.html
172 d = 4 + 5 + # no '\' needed
173 6 + 7
174
175 # Example from http://www.ruby-doc.org/docs/ProgrammingRuby/html/language.html
176 e = 8 + 9 \
177 + 10 # '\' needed
178
179 foo = obj.bar { |m| tee(m) } +
180 obj.qux { |m| hum(m) }
181
182 begin
183 foo
184 ensure
185 bar
186 end
187
188 # Bug#15369
189 MSG = 'Separate every 3 digits in the integer portion of a number' \
190 'with underscores(_).'
191
192 class C
193 def foo
194 self.end
195 D.new.class
196 end
197 end
198
199 a = foo(j, k) -
200 bar_tee
201
202 while a < b do # "do" is optional
203 foo
204 end
205
206 desc "foo foo" \
207 "bar bar"
208
209 foo.
210 bar
211
212 # https://github.com/rails/rails/blob/17f5d8e062909f1fcae25351834d8e89967b645e/activesupport/lib/active_support/time_with_zone.rb#L206
213 foo
214 .bar
215
216 z = {
217 foo: {
218 a: "aaa",
219 b: "bbb"
220 }
221 }
222
223 foo if
224 bar
225
226 if foo?
227 bar
228 end
229
230 method arg1, # bug#15594
231 method2 arg2,
232 arg3
233
234 method? arg1,
235 arg2
236
237 method! arg1,
238 arg2
239
240 method !arg1,
241 arg2
242
243 method [],
244 arg2
245
246 method :foo,
247 :bar
248
249 method (a + b),
250 c, :d => :e,
251 f: g
252
253 desc "abc",
254 defg
255
256 it "is a method call with block" do |asd|
257 foo
258 end
259
260 it("is too!") {
261 bar
262 .qux
263 }
264
265 and_this_one(has) { |block, parameters|
266 tee
267 }
268
269 if foo &&
270 bar
271 end
272
273 foo +
274 bar
275
276 foo and
277 bar
278
279 foo > bar &&
280 tee < qux
281
282 zux do
283 foo == bar and
284 tee == qux
285 end
286
287 foo ^
288 bar
289
290 foo_bar_tee(1, 2, 3)
291 .qux.bar
292 .tee
293
294 foo do
295 bar
296 .tee
297 end
298
299 def bar
300 foo
301 .baz
302 end
303
304 # http://stackoverflow.com/questions/17786563/emacs-ruby-mode-if-expressions-indentation
305 tee = if foo
306 bar
307 else
308 tee
309 end
310
311 a = b {
312 c
313 }
314
315 aa = bb do
316 cc
317 end
318
319 foo :bar do
320 qux
321 end
322
323 foo do |*args|
324 tee
325 end
326
327 bar do |&block|
328 tee
329 end
330
331 foo = [1, 2, 3].map do |i|
332 i + 1
333 end
334
335 bar.foo do
336 bar
337 end
338
339 bar.foo(tee) do
340 bar
341 end
342
343 bar.foo(tee) {
344 bar
345 }
346
347 bar 1 do
348 foo 2 do
349 tee
350 end
351 end
352
353 foo |
354 bar
355
356 def qux
357 foo ||= begin
358 bar
359 tee
360 rescue
361 oomph
362 end
363 end
364
365 private def foo
366 bar
367 end
368
369 %^abc^
370 ddd
371
372 qux = foo.fee ?
373 bar :
374 tee
375
376 zoo.keep.bar!(
377 {x: y,
378 z: t})
379
380 zoo
381 .lose(
382 q, p)
383
384 a.records().map(&:b).zip(
385 foo)
386
387 # FIXME: This is not consistent with the example below it, but this
388 # offset only happens if the colon is at eol, which wouldn't be often.
389 # Tokenizing `bar:' as `:bar =>' would be better, but it's hard to
390 # distinguish from a variable reference inside a ternary operator.
391 foo(bar:
392 tee)
393
394 foo(:bar =>
395 tee)
396
397 {'a' => {
398 'b' => 'c',
399 'd' => %w(e f)
400 }
401 }
402
403 # Bug#17050
404
405 return render json: {
406 errors: { base: [message] },
407 copying: copying
408 },
409 status: 400
410
411 top test(
412 some,
413 top,
414 test)
415
416 foo bar, {
417 tee: qux
418 }