synvert-core 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -4
  3. data/CHANGELOG.md +6 -0
  4. data/Gemfile +0 -3
  5. data/Guardfile +0 -9
  6. data/README.md +30 -12
  7. data/Rakefile +1 -15
  8. data/lib/synvert/core/engine/erb.rb +1 -1
  9. data/lib/synvert/core/engine.rb +1 -1
  10. data/lib/synvert/core/node_ext.rb +0 -466
  11. data/lib/synvert/core/rewriter/action/replace_erb_stmt_with_expr_action.rb +20 -17
  12. data/lib/synvert/core/rewriter/condition/if_exist_condition.rb +1 -1
  13. data/lib/synvert/core/rewriter/condition/unless_exist_condition.rb +1 -1
  14. data/lib/synvert/core/rewriter/instance.rb +83 -133
  15. data/lib/synvert/core/rewriter/scope/query_scope.rb +2 -2
  16. data/lib/synvert/core/rewriter/scope/within_scope.rb +4 -4
  17. data/lib/synvert/core/rewriter.rb +0 -10
  18. data/lib/synvert/core/version.rb +1 -1
  19. data/lib/synvert/core.rb +4 -6
  20. data/spec/synvert/core/engine/erb_spec.rb +3 -3
  21. data/spec/synvert/core/node_ext_spec.rb +0 -795
  22. data/spec/synvert/core/rewriter/action/replace_erb_stmt_with_expr_action_spec.rb +21 -1
  23. data/spec/synvert/core/rewriter/instance_spec.rb +47 -115
  24. data/spec/synvert/core/rewriter/scope/goto_scope_spec.rb +1 -4
  25. data/spec/synvert/core/rewriter/scope/query_scope_spec.rb +1 -4
  26. data/spec/synvert/core/rewriter/scope/within_scope_spec.rb +1 -4
  27. data/synvert-core-ruby.gemspec +4 -2
  28. metadata +44 -61
  29. data/lib/synvert/core/array_ext.rb +0 -48
  30. data/lib/synvert/core/node_query/compiler/array.rb +0 -34
  31. data/lib/synvert/core/node_query/compiler/attribute.rb +0 -39
  32. data/lib/synvert/core/node_query/compiler/attribute_list.rb +0 -24
  33. data/lib/synvert/core/node_query/compiler/basic_selector.rb +0 -28
  34. data/lib/synvert/core/node_query/compiler/boolean.rb +0 -23
  35. data/lib/synvert/core/node_query/compiler/comparable.rb +0 -86
  36. data/lib/synvert/core/node_query/compiler/dynamic_attribute.rb +0 -51
  37. data/lib/synvert/core/node_query/compiler/expression.rb +0 -41
  38. data/lib/synvert/core/node_query/compiler/float.rb +0 -23
  39. data/lib/synvert/core/node_query/compiler/identifier.rb +0 -41
  40. data/lib/synvert/core/node_query/compiler/integer.rb +0 -23
  41. data/lib/synvert/core/node_query/compiler/invalid_operator_error.rb +0 -7
  42. data/lib/synvert/core/node_query/compiler/nil.rb +0 -23
  43. data/lib/synvert/core/node_query/compiler/parse_error.rb +0 -7
  44. data/lib/synvert/core/node_query/compiler/regexp.rb +0 -37
  45. data/lib/synvert/core/node_query/compiler/selector.rb +0 -113
  46. data/lib/synvert/core/node_query/compiler/string.rb +0 -23
  47. data/lib/synvert/core/node_query/compiler/symbol.rb +0 -23
  48. data/lib/synvert/core/node_query/compiler.rb +0 -25
  49. data/lib/synvert/core/node_query/lexer.rex +0 -99
  50. data/lib/synvert/core/node_query/lexer.rex.rb +0 -299
  51. data/lib/synvert/core/node_query/parser.racc.rb +0 -306
  52. data/lib/synvert/core/node_query/parser.y +0 -60
  53. data/lib/synvert/core/node_query.rb +0 -36
  54. data/lib/synvert/core/rewriter/action/append_action.rb +0 -28
  55. data/lib/synvert/core/rewriter/action/delete_action.rb +0 -34
  56. data/lib/synvert/core/rewriter/action/insert_action.rb +0 -34
  57. data/lib/synvert/core/rewriter/action/insert_after_action.rb +0 -22
  58. data/lib/synvert/core/rewriter/action/prepend_action.rb +0 -44
  59. data/lib/synvert/core/rewriter/action/remove_action.rb +0 -56
  60. data/lib/synvert/core/rewriter/action/replace_action.rb +0 -33
  61. data/lib/synvert/core/rewriter/action/replace_with_action.rb +0 -36
  62. data/lib/synvert/core/rewriter/action/wrap_action.rb +0 -37
  63. data/lib/synvert/core/rewriter/action.rb +0 -102
  64. data/spec/synvert/core/node_query/lexer_spec.rb +0 -580
  65. data/spec/synvert/core/node_query/parser_spec.rb +0 -337
  66. data/spec/synvert/core/rewriter/action/append_action_spec.rb +0 -70
  67. data/spec/synvert/core/rewriter/action/delete_action_spec.rb +0 -26
  68. data/spec/synvert/core/rewriter/action/insert_action_spec.rb +0 -70
  69. data/spec/synvert/core/rewriter/action/insert_after_action_spec.rb +0 -26
  70. data/spec/synvert/core/rewriter/action/prepend_action_spec.rb +0 -175
  71. data/spec/synvert/core/rewriter/action/remove_action_spec.rb +0 -26
  72. data/spec/synvert/core/rewriter/action/replace_action_spec.rb +0 -28
  73. data/spec/synvert/core/rewriter/action/replace_with_action_spec.rb +0 -59
  74. data/spec/synvert/core/rewriter/action/wrap_action_spec.rb +0 -31
  75. data/spec/synvert/core/rewriter/action_spec.rb +0 -14
@@ -3,482 +3,6 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Parser::AST::Node do
6
- describe '#parent' do
7
- it 'gets parent node' do
8
- node = parse('FactoryBot.create(:user)')
9
- child_node = node.children.first
10
- expect(child_node.parent).to eq node
11
- end
12
- end
13
-
14
- describe '#siblings' do
15
- it 'gets sibling nodes' do
16
- node = parse(<<~EOS)
17
- def foobar; end
18
- def foo; end
19
- def bar; end
20
- EOS
21
- expect(node.children.first.siblings).to eq [node.children.second, node.children.last]
22
- end
23
- end
24
-
25
- describe '#name' do
26
- it 'gets for class node' do
27
- node = parse('class Synvert; end')
28
- expect(node.name).to eq parse('Synvert')
29
-
30
- node = parse('class Synvert::Rewriter::Instance; end')
31
- expect(node.name).to eq parse('Synvert::Rewriter::Instance')
32
- end
33
-
34
- it 'gets for module node' do
35
- node = parse('module Synvert; end')
36
- expect(node.name).to eq parse('Synvert')
37
- end
38
-
39
- it 'gets for def node' do
40
- node = parse('def current_node; end')
41
- expect(node.name).to eq :current_node
42
- end
43
-
44
- it 'gets for defs node' do
45
- node = parse('def self.current_node; end')
46
- expect(node.name).to eq :current_node
47
- end
48
-
49
- it 'gets for arg node' do
50
- node = parse('def test(foo); end')
51
- expect(node.arguments.first.name).to eq :foo
52
- end
53
-
54
- it 'gets for blockarg node' do
55
- node = parse('def test(&block); end')
56
- expect(node.arguments.first.name).to eq :block
57
- end
58
-
59
- it 'gets for const node' do
60
- node = parse('Synvert')
61
- expect(node.name).to eq :Synvert
62
- end
63
-
64
- it 'gets for lvar node' do
65
- node = parse("foo = 'bar'\nfoo").children[1]
66
- expect(node.name).to eq :foo
67
- end
68
-
69
- it 'gets for ivar node' do
70
- node = parse("@foo = 'bar'\n@foo").children[1]
71
- expect(node.name).to eq :@foo
72
- end
73
-
74
- it 'gets for cvar node' do
75
- node = parse("@@foo = 'bar'\n@@foo").children[1]
76
- expect(node.name).to eq :@@foo
77
- end
78
-
79
- it 'gets for restarg node' do
80
- node = parse('object.each { |*entry| }')
81
- expect(node.arguments.first.name).to eq :entry
82
- end
83
- end
84
-
85
- describe '#parent_class' do
86
- it 'gets for class node' do
87
- node = parse('class Post < ActiveRecord::Base; end')
88
- expect(node.parent_class).to eq parse('ActiveRecord::Base')
89
- end
90
- end
91
-
92
- describe '#receiver' do
93
- it 'gets for send node' do
94
- node = parse('FactoryGirl.create :post')
95
- expect(node.receiver).to eq parse('FactoryGirl')
96
- end
97
-
98
- it 'gets for csend node' do
99
- node = parse('user&.update(name: name)')
100
- expect(node.receiver).to eq parse('user')
101
- end
102
- end
103
-
104
- describe '#message' do
105
- it 'gets for send node' do
106
- node = parse('FactoryGirl.create :post')
107
- expect(node.message).to eq :create
108
- end
109
-
110
- it 'gets for csend node' do
111
- node = parse('user&.update(name: name)')
112
- expect(node.message).to eq :update
113
- end
114
- end
115
-
116
- describe '#parent_const' do
117
- it 'gets for const node' do
118
- node = parse('Synvert::Node')
119
- expect(node.parent_const).to eq parse('Synvert')
120
- end
121
-
122
- it 'gets for const node at the root' do
123
- node = parse('::Node')
124
- expect(node.parent_const.type).to eq :cbase
125
- end
126
-
127
- it 'gets for const node with no parent' do
128
- node = parse('Node')
129
- expect(node.parent_const).to eq nil
130
- end
131
- end
132
-
133
- describe '#arguments' do
134
- it 'gets for def node' do
135
- node = parse('def test(foo, bar); foo + bar; end')
136
- expect(node.arguments.map(&:type)).to eq [:arg, :arg]
137
- end
138
-
139
- it 'gets for defs node' do
140
- node = parse('def self.test(foo, bar); foo + bar; end')
141
- expect(node.arguments.map(&:type)).to eq [:arg, :arg]
142
- end
143
-
144
- it 'gets for block node' do
145
- node = parse('RSpec.configure do |config|; end')
146
- expect(node.arguments.map(&:type)).to eq [:arg]
147
- end
148
-
149
- it 'gets for send node' do
150
- node = parse("FactoryGirl.create :post, title: 'post'")
151
- expect(node.arguments).to eq parse("[:post, title: 'post']").children
152
- end
153
-
154
- it 'gets for csend node' do
155
- node = parse('user&.update(name: name)')
156
- expect(node.arguments).to eq parse('[name: name]').children
157
- end
158
-
159
- it 'gets for defined? node' do
160
- node = parse('defined?(Bundler)')
161
- expect(node.arguments).to eq [parse('Bundler')]
162
- end
163
- end
164
-
165
- describe '#caller' do
166
- it 'gets for block node' do
167
- node = parse('RSpec.configure do |config|; end')
168
- expect(node.caller).to eq parse('RSpec.configure')
169
- end
170
- end
171
-
172
- describe '#body' do
173
- it 'gets one line for block node' do
174
- node = parse('RSpec.configure do |config|; include EmailSpec::Helpers; end')
175
- expect(node.body).to eq [parse('include EmailSpec::Helpers')]
176
- end
177
-
178
- it 'gets multiple lines for block node' do
179
- node = parse('RSpec.configure do |config|; include EmailSpec::Helpers; include EmailSpec::Matchers; end')
180
- expect(node.body).to eq [parse('include EmailSpec::Helpers'), parse('include EmailSpec::Matchers')]
181
- end
182
-
183
- it 'gets empty for class node' do
184
- node = parse('class User; end')
185
- expect(node.body).to be_empty
186
- end
187
-
188
- it 'gets empty for module node' do
189
- node = parse('module Admin; end')
190
- expect(node.body).to be_empty
191
- end
192
-
193
- it 'gets one line for class node' do
194
- node = parse('class User; attr_accessor :email; end')
195
- expect(node.body).to eq [parse('attr_accessor :email')]
196
- end
197
-
198
- it 'gets one line for class node' do
199
- node = parse('class User; attr_accessor :email; attr_accessor :username; end')
200
- expect(node.body).to eq [parse('attr_accessor :email'), parse('attr_accessor :username')]
201
- end
202
-
203
- it 'gets for begin node' do
204
- node = parse('foo; bar')
205
- expect(node.body).to eq [parse('foo'), parse('bar')]
206
- end
207
-
208
- it 'gets for def node' do
209
- node = parse('def test; foo; bar; end')
210
- expect(node.body).to eq [parse('foo'), parse('bar')]
211
- end
212
-
213
- it 'gets for def node with empty body' do
214
- node = parse('def test; end')
215
- expect(node.body).to eq []
216
- end
217
-
218
- it 'gets for defs node' do
219
- node = parse('def self.test; foo; bar; end')
220
- expect(node.body).to eq [parse('foo'), parse('bar')]
221
- end
222
-
223
- it 'gets for def node with empty body' do
224
- node = parse('def self.test; end')
225
- expect(node.body).to eq []
226
- end
227
- end
228
-
229
- describe '#keys' do
230
- it 'gets for hash node' do
231
- node = parse("{:foo => :bar, 'foo' => 'bar'}")
232
- expect(node.keys).to eq [parse(':foo'), parse("'foo'")]
233
- end
234
- end
235
-
236
- describe '#values' do
237
- it 'gets for hash node' do
238
- node = parse("{:foo => :bar, 'foo' => 'bar'}")
239
- expect(node.values).to eq [parse(':bar'), parse("'bar'")]
240
- end
241
- end
242
-
243
- describe '#key?' do
244
- it 'gets true if key exists' do
245
- node = parse('{:foo => :bar}')
246
- expect(node.key?(:foo)).to be_truthy
247
- end
248
-
249
- it 'gets false if key does not exist' do
250
- node = parse('{:foo => :bar}')
251
- expect(node.key?('foo')).to be_falsey
252
- end
253
- end
254
-
255
- describe '#hash_value' do
256
- it 'gets value of specified key' do
257
- node = parse('{:foo => :bar}')
258
- expect(node.hash_value(:foo)).to eq parse(':bar')
259
- end
260
-
261
- it 'gets nil if key does not exist' do
262
- node = parse('{:foo => :bar}')
263
- expect(node.hash_value(:bar)).to be_nil
264
- end
265
- end
266
-
267
- describe '#key' do
268
- it 'gets for pair node' do
269
- node = parse("{:foo => 'bar'}").children[0]
270
- expect(node.key).to eq parse(':foo')
271
- end
272
- end
273
-
274
- describe '#value' do
275
- it 'gets for hash node' do
276
- node = parse("{:foo => 'bar'}").children[0]
277
- expect(node.value).to eq parse("'bar'")
278
- end
279
- end
280
-
281
- describe '#condition' do
282
- it 'gets for if node' do
283
- node = parse('if defined?(Bundler); end')
284
- expect(node.condition).to eq parse('defined?(Bundler)')
285
- end
286
- end
287
-
288
- describe '#left_value' do
289
- it 'gets for masgn' do
290
- node = parse('a, b = 1, 2')
291
- expect(node.left_value.to_source).to eq 'a, b'
292
- end
293
-
294
- it 'gets for lvasgn' do
295
- node = parse('a = 1')
296
- expect(node.left_value).to eq :a
297
- end
298
-
299
- it 'gets for ivasgn' do
300
- node = parse('@a = 1')
301
- expect(node.left_value).to eq :@a
302
- end
303
-
304
- it 'gets for cvasgn' do
305
- node = parse('@@a = 1')
306
- expect(node.left_value).to eq :@@a
307
- end
308
-
309
- it 'gets for or_asgn' do
310
- node = parse('a ||= 1')
311
- expect(node.left_value).to eq :a
312
- end
313
-
314
- it 'gets for and' do
315
- node = parse('foo && bar')
316
- expect(node.left_value).to eq parse('foo')
317
- end
318
-
319
- it 'gets for or' do
320
- node = parse('foo || bar')
321
- expect(node.left_value).to eq parse('foo')
322
- end
323
- end
324
-
325
- describe '#right_value' do
326
- it 'gets for masgn' do
327
- node = parse('a, b = 1, 2')
328
- expect(node.right_value).to eq parse('[1, 2]')
329
- end
330
-
331
- it 'gets for masgn' do
332
- node = parse('a, b = params')
333
- expect(node.right_value).to eq parse('params')
334
- end
335
-
336
- it 'gets for lvasgn' do
337
- node = parse('a = 1')
338
- expect(node.right_value).to eq parse('1')
339
- end
340
-
341
- it 'gets for ivasgn' do
342
- node = parse('@a = 1')
343
- expect(node.right_value).to eq parse('1')
344
- end
345
-
346
- it 'gets for cvasgn' do
347
- node = parse('@@a = 1')
348
- expect(node.right_value).to eq parse('1')
349
- end
350
-
351
- it 'gets for or_asgn' do
352
- node = parse('a ||= 1')
353
- expect(node.right_value).to eq parse('1')
354
- end
355
-
356
- it 'gets for and' do
357
- node = parse('foo && bar')
358
- expect(node.right_value).to eq parse('bar')
359
- end
360
-
361
- it 'gets for or' do
362
- node = parse('foo || bar')
363
- expect(node.right_value).to eq parse('bar')
364
- end
365
- end
366
-
367
- describe '#to_value' do
368
- it 'gets for int' do
369
- node = parse('1')
370
- expect(node.to_value).to eq 1
371
- end
372
-
373
- it 'gets for float' do
374
- node = parse('1.5')
375
- expect(node.to_value).to eq 1.5
376
- end
377
-
378
- it 'gets for string' do
379
- node = parse("'str'")
380
- expect(node.to_value).to eq 'str'
381
- end
382
-
383
- it 'gets for symbol' do
384
- node = parse(':str')
385
- expect(node.to_value).to eq :str
386
- end
387
-
388
- it 'gets for boolean' do
389
- node = parse('true')
390
- expect(node.to_value).to be_truthy
391
- node = parse('false')
392
- expect(node.to_value).to be_falsey
393
- end
394
-
395
- it 'gets for nil' do
396
- node = parse('nil')
397
- expect(node.to_value).to be_nil
398
- end
399
-
400
- it 'gets for irange' do
401
- node = parse('(1..10)')
402
- expect(node.to_value).to eq(1..10)
403
- end
404
-
405
- it 'gets for erange' do
406
- node = parse('(1...10)')
407
- expect(node.to_value).to eq(1...10)
408
- end
409
-
410
- it 'gets for array' do
411
- node = parse("['str', :str]")
412
- expect(node.to_value).to eq ['str', :str]
413
- end
414
- end
415
-
416
- describe '#filename' do
417
- it 'gets file name' do
418
- source = 'foobar'
419
- node = parse(source)
420
- expect(node.filename).to eq '(string)'
421
- end
422
- end
423
-
424
- describe '#to_source' do
425
- it 'gets for node' do
426
- source = 'params[:user][:email]'
427
- node = parse(source)
428
- expect(node.to_source).to eq 'params[:user][:email]'
429
- end
430
- end
431
-
432
- describe '#column' do
433
- it 'gets column number' do
434
- node = parse(' FactoryGirl.create :post')
435
- expect(node.column).to eq 2
436
- end
437
- end
438
-
439
- describe '#line' do
440
- it 'gets line number' do
441
- node = parse('foobar')
442
- expect(node.line).to eq 1
443
- end
444
- end
445
-
446
- describe 'key value by method_missing' do
447
- it 'gets for key value' do
448
- node = parse('{:foo => :bar}')
449
- expect(node.foo_value).to eq :bar
450
-
451
- node = parse("{'foo' => 'bar'}")
452
- expect(node.foo_value).to eq 'bar'
453
-
454
- expect(node.bar_value).to be_nil
455
- end
456
- end
457
-
458
- describe 'key value source by method_missing' do
459
- it 'gets for key value source' do
460
- node = parse('{:foo => :bar}')
461
- expect(node.foo_source).to eq ':bar'
462
-
463
- node = parse("{'foo' => 'bar'}")
464
- expect(node.foo_source).to eq "'bar'"
465
-
466
- expect(node.bar_source).to be_nil
467
- end
468
- end
469
-
470
- describe '#recursive_children' do
471
- it 'iterates all children recursively' do
472
- node = parse('class Synvert; def current_node; @node; end; end')
473
- children = []
474
- node.recursive_children { |child| children << child.type }
475
- expect(children).to be_include :const
476
- expect(children).to be_include :def
477
- expect(children).to be_include :args
478
- expect(children).to be_include :ivar
479
- end
480
- end
481
-
482
6
  describe '#match?' do
483
7
  it 'matches class name' do
484
8
  source = 'class Synvert; end'
@@ -606,325 +130,6 @@ describe Parser::AST::Node do
606
130
  end
607
131
  end
608
132
 
609
- describe '#child_node_by_name' do
610
- context 'block node' do
611
- it 'checks caller' do
612
- node = parse('Factory.define :user do |user|; end')
613
- child_node = node.child_node_by_name(:caller)
614
- expect(child_node).to eq node.caller
615
- end
616
-
617
- it 'checks arguments' do
618
- node = parse('Factory.define :user do |user|; end')
619
- child_node = node.child_node_by_name(:arguments)
620
- expect(child_node).to eq node.arguments
621
- end
622
-
623
- it 'checks caller.receiver' do
624
- node = parse('Factory.define :user do |user|; end')
625
- child_node = node.child_node_by_name('caller.receiver')
626
- expect(child_node).to eq node.caller.receiver
627
- end
628
-
629
- it 'checks caller.message' do
630
- node = parse('Factory.define :user do |user|; end')
631
- child_node = node.child_node_by_name('caller.message')
632
- expect(child_node).to eq node.caller.message
633
- end
634
- end
635
-
636
- context 'array' do
637
- it 'checks array by index' do
638
- node = parse('factory :admin, class: User do; end')
639
- child_node = node.child_node_by_name('caller.arguments.2')
640
- expect(child_node).to eq node.caller.arguments[1]
641
- end
642
-
643
- it 'checks array by method' do
644
- node = parse('factory :admin, class: User do; end')
645
- child_node = node.child_node_by_name('caller.arguments.second')
646
- expect(child_node).to eq node.caller.arguments[1]
647
- end
648
-
649
- it "checks array' value" do
650
- node = parse('factory :admin, class: User do; end')
651
- child_node = node.child_node_by_name('caller.arguments.second.class_value')
652
- expect(child_node).to eq node.caller.arguments[1].class_value
653
- end
654
- end
655
- end
656
-
657
- describe '#child_node_range' do
658
- context 'block node' do
659
- it 'checks caller' do
660
- node = parse('Factory.define :user do |user|; end')
661
- range = node.child_node_range(:caller)
662
- expect(range.to_range).to eq(0...20)
663
- end
664
-
665
- it 'checks arguments' do
666
- node = parse('Factory.define :user do |user|; end')
667
- range = node.child_node_range(:arguments)
668
- expect(range.to_range).to eq(25...29)
669
- end
670
-
671
- it 'checks pipes' do
672
- node = parse('Factory.define :user do |user|; end')
673
- range = node.child_node_range(:pipes)
674
- expect(range.to_range).to eq(24...30)
675
- end
676
-
677
- it 'checks caller.receiver' do
678
- node = parse('Factory.define :user do |user|; end')
679
- range = node.child_node_range('caller.receiver')
680
- expect(range.to_range).to eq(0...7)
681
- end
682
-
683
- it 'checks caller.message' do
684
- node = parse('Factory.define :user do |user|; end')
685
- range = node.child_node_range('caller.message')
686
- expect(range.to_range).to eq(8...14)
687
- end
688
- end
689
-
690
- context 'class node' do
691
- it 'checks name' do
692
- node = parse('class Post < ActiveRecord::Base; end')
693
- range = node.child_node_range(:name)
694
- expect(range.to_range).to eq(6...10)
695
- end
696
-
697
- it 'checks parent_class' do
698
- node = parse('class Post < ActiveRecord::Base; end')
699
- range = node.child_node_range(:parent_class)
700
- expect(range.to_range).to eq(13...31)
701
-
702
- node = parse('class Post; end')
703
- range = node.child_node_range(:parent_class)
704
- expect(range).to be_nil
705
- end
706
- end
707
-
708
- context 'csend node' do
709
- it 'checks receiver' do
710
- node = parse('foo&.bar(test)')
711
- range = node.child_node_range(:receiver)
712
- expect(range.to_range).to eq(0...3)
713
- end
714
-
715
- it 'checks dot' do
716
- node = parse('foo&.bar(test)')
717
- range = node.child_node_range(:dot)
718
- expect(range.to_range).to eq(3...5)
719
- end
720
-
721
- it 'checks message' do
722
- node = parse('foo&.bar(test)')
723
- range = node.child_node_range(:message)
724
- expect(range.to_range).to eq(5...8)
725
-
726
- node = parse('foo&.bar = test')
727
- range = node.child_node_range(:message)
728
- expect(range.to_range).to eq(5...10)
729
- end
730
-
731
- it 'checks arguments' do
732
- node = parse('foo&.bar(test)')
733
- range = node.child_node_range(:arguments)
734
- expect(range.to_range).to eq(9...13)
735
-
736
- node = parse('foo&.bar')
737
- range = node.child_node_range(:arguments)
738
- expect(range).to be_nil
739
- end
740
-
741
- it 'checks parentheses' do
742
- node = parse('foo&.bar(test)')
743
- range = node.child_node_range(:parentheses)
744
- expect(range.to_range).to eq(8...14)
745
-
746
- node = parse('foo&.bar')
747
- range = node.child_node_range(:parentheses)
748
- expect(range).to be_nil
749
- end
750
- end
751
-
752
- context 'def node' do
753
- it 'checks name' do
754
- node = parse('def foo(bar); end')
755
- range = node.child_node_range(:name)
756
- expect(range.to_range).to eq(4...7)
757
- end
758
-
759
- it 'checks arguments' do
760
- node = parse('def foo(bar); end')
761
- range = node.child_node_range(:arguments)
762
- expect(range.to_range).to eq(8...11)
763
- end
764
-
765
- it 'checks parentheses' do
766
- node = parse('def foo(bar); end')
767
- range = node.child_node_range(:parentheses)
768
- expect(range.to_range).to eq(7...12)
769
- end
770
- end
771
-
772
- context 'defs node' do
773
- it 'checks self' do
774
- node = parse('def self.foo(bar); end')
775
- range = node.child_node_range(:self)
776
- expect(range.to_range).to eq(4...8)
777
- end
778
-
779
- it 'checks dot' do
780
- node = parse('def self.foo(bar); end')
781
- range = node.child_node_range(:dot)
782
- expect(range.to_range).to eq(8...9)
783
- end
784
-
785
- it 'checks name' do
786
- node = parse('def self.foo(bar); end')
787
- range = node.child_node_range(:name)
788
- expect(range.to_range).to eq(9...12)
789
- end
790
-
791
- it 'checks arguments' do
792
- node = parse('def self.foo(bar); end')
793
- range = node.child_node_range(:arguments)
794
- expect(range.to_range).to eq(13...16)
795
- end
796
-
797
- it 'checks parentheses' do
798
- node = parse('def self.foo(bar); end')
799
- range = node.child_node_range(:parentheses)
800
- expect(range.to_range).to eq(12...17)
801
- end
802
- end
803
-
804
- context 'send node' do
805
- it 'checks receiver' do
806
- node = parse('foo.bar(test)')
807
- range = node.child_node_range(:receiver)
808
- expect(range.to_range).to eq(0...3)
809
-
810
- node = parse('foobar(test)')
811
- range = node.child_node_range(:receiver)
812
- expect(range).to be_nil
813
- end
814
-
815
- it 'checks dot' do
816
- node = parse('foo.bar(test)')
817
- range = node.child_node_range(:dot)
818
- expect(range.to_range).to eq(3...4)
819
-
820
- node = parse('foobar(test)')
821
- range = node.child_node_range(:dot)
822
- expect(range).to be_nil
823
- end
824
-
825
- it 'checks message' do
826
- node = parse('foo.bar(test)')
827
- range = node.child_node_range(:message)
828
- expect(range.to_range).to eq(4...7)
829
-
830
- node = parse('foo.bar = test')
831
- range = node.child_node_range(:message)
832
- expect(range.to_range).to eq(4...9)
833
-
834
- node = parse('foobar(test)')
835
- range = node.child_node_range(:message)
836
- expect(range.to_range).to eq(0...6)
837
- end
838
-
839
- it 'checks arguments' do
840
- node = parse('foo.bar(test)')
841
- range = node.child_node_range(:arguments)
842
- expect(range.to_range).to eq(8...12)
843
-
844
- node = parse('foobar(test)')
845
- range = node.child_node_range(:arguments)
846
- expect(range.to_range).to eq(7...11)
847
-
848
- node = parse('foo.bar')
849
- range = node.child_node_range(:arguments)
850
- expect(range).to be_nil
851
- end
852
-
853
- it 'checks parentheses' do
854
- node = parse('foo.bar(test)')
855
- range = node.child_node_range(:parentheses)
856
- expect(range.to_range).to eq(7...13)
857
-
858
- node = parse('foobar(test)')
859
- range = node.child_node_range(:parentheses)
860
- expect(range.to_range).to eq(6...12)
861
-
862
- node = parse('foo.bar')
863
- range = node.child_node_range(:parentheses)
864
- expect(range).to be_nil
865
- end
866
- end
867
-
868
- context 'array' do
869
- it 'checks array by index' do
870
- node = parse('factory :admin, class: User do; end')
871
- range = node.child_node_range('caller.arguments.2')
872
- expect(range.to_range).to eq(16...27)
873
- end
874
-
875
- it 'checks array by method' do
876
- node = parse('factory :admin, class: User do; end')
877
- range = node.child_node_range('caller.arguments.second')
878
- expect(range.to_range).to eq(16...27)
879
- end
880
-
881
- it "checks array's value" do
882
- node = parse('factory :admin, class: User do; end')
883
- range = node.child_node_range('caller.arguments.second.class_value')
884
- expect(range.to_range).to eq(23...27)
885
- end
886
- end
887
- end
888
-
889
- describe '#rewritten_source' do
890
- it 'does not rewrite with unknown method' do
891
- source = 'class Synvert; end'
892
- node = parse(source)
893
- expect(node.rewritten_source('{{foobar}}')).to eq '{{foobar}}'
894
- end
895
-
896
- it 'rewrites with node known method' do
897
- source = 'class Synvert; end'
898
- node = parse(source)
899
- expect(node.rewritten_source('{{name}}')).to eq 'Synvert'
900
- end
901
-
902
- it 'rewrites for arguments' do
903
- source = 'test { |a, b| }'
904
- node = parse(source)
905
- expect(node.rewritten_source('{{arguments}}')).to eq 'a, b'
906
- end
907
-
908
- it 'rewrites array with multi line given as argument for method' do
909
- source = <<~EOS.strip
910
- long_name_method([
911
- 1,
912
- 2,
913
- 3
914
- ])
915
- EOS
916
-
917
- node = parse(source)
918
- expect(node.rewritten_source('{{arguments}}')).to eq <<~EOS.strip
919
- [
920
- 1,
921
- 2,
922
- 3
923
- ]
924
- EOS
925
- end
926
- end
927
-
928
133
  describe '#strip_curly_braces' do
929
134
  context 'hash node' do
930
135
  it 'removes curly braces' do