synvert-core 0.41.0 → 0.42.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/lib/synvert/core/node_ext.rb +16 -9
- data/lib/synvert/core/rewriter.rb +3 -1
- data/lib/synvert/core/version.rb +1 -1
- data/spec/synvert/core/node_ext_spec.rb +29 -10
- data/spec/synvert/core/rewriter/instance_spec.rb +48 -56
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c29440498ff5186fde3ea7828482bfc0e93551350682f68b2fd26f3054894460
|
4
|
+
data.tar.gz: 055d1a185ed10f154f3b6a5ee99d8f142ead2a62935e461f3b73d15a32822496
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 757170374b87d2941befeaa9e1d17681bfff6bd8486880dec9fa9549e4a71ec660983e7f8bf3d9e71046ae4d24c4fc4ec0282aba71d62cd5de240d3f36962f5e
|
7
|
+
data.tar.gz: ad55dd58dc35f53804d11a99f2dc926881b84a05eb0e13ab3f0a3c07e374fddb1dd8ddae91ec1d8a36a3564d3c61ab3bf1c0282ac45193cb4cc93e90500ef17d
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
# 0.42.1 (2021-07-14)
|
4
|
+
|
5
|
+
* Return rewrtier after executing snippet
|
6
|
+
|
7
|
+
# 0.42.0 (2021-07-11)
|
8
|
+
|
9
|
+
* Match string with quote
|
10
|
+
* `match_value?` returns true if actual and expected are the same
|
11
|
+
|
3
12
|
## 0.41.0 (2021-06-24)
|
4
13
|
|
5
14
|
* Remove unused autoindent option
|
@@ -240,7 +240,7 @@ module Parser::AST
|
|
240
240
|
# @raise [Synvert::Core::MethodNotSupported] if calls on other node.
|
241
241
|
def to_value
|
242
242
|
case type
|
243
|
-
when :int, :str, :sym
|
243
|
+
when :int, :float, :str, :sym
|
244
244
|
children.last
|
245
245
|
when :true
|
246
246
|
true
|
@@ -253,7 +253,7 @@ module Parser::AST
|
|
253
253
|
when :begin
|
254
254
|
children.first.to_value
|
255
255
|
else
|
256
|
-
|
256
|
+
self
|
257
257
|
end
|
258
258
|
end
|
259
259
|
|
@@ -388,7 +388,7 @@ module Parser::AST
|
|
388
388
|
end
|
389
389
|
|
390
390
|
raise Synvert::Core::MethodNotSupported,
|
391
|
-
"child_node_range is not handled for #{
|
391
|
+
"child_node_range is not handled for #{debug_info}, child_name: #{child_name}"
|
392
392
|
end
|
393
393
|
end
|
394
394
|
|
@@ -493,6 +493,8 @@ module Parser::AST
|
|
493
493
|
# @return [Integer] -1, 0 or 1.
|
494
494
|
# @raise [Synvert::Core::MethodNotSupported] if expected class is not supported.
|
495
495
|
def match_value?(actual, expected)
|
496
|
+
return true if actual == expected
|
497
|
+
|
496
498
|
case expected
|
497
499
|
when Symbol
|
498
500
|
if actual.is_a?(Parser::AST::Node)
|
@@ -502,10 +504,11 @@ module Parser::AST
|
|
502
504
|
end
|
503
505
|
when String
|
504
506
|
if actual.is_a?(Parser::AST::Node)
|
507
|
+
return true if (Parser::CurrentRuby.parse(expected) == actual rescue nil)
|
505
508
|
actual.to_source == expected || (actual.to_source[0] == ':' && actual.to_source[1..-1] == expected) ||
|
506
509
|
actual.to_source[1...-1] == expected
|
507
510
|
else
|
508
|
-
actual.to_s == expected
|
511
|
+
actual.to_s == expected || wrap_quote(actual.to_s) == expected
|
509
512
|
end
|
510
513
|
when Regexp
|
511
514
|
if actual.is_a?(Parser::AST::Node)
|
@@ -563,11 +566,7 @@ module Parser::AST
|
|
563
566
|
# @param multi_keys [Array<Symbol>]
|
564
567
|
# @return [Object] actual value.
|
565
568
|
def actual_value(node, multi_keys)
|
566
|
-
multi_keys.inject(node) { |n, key|
|
567
|
-
if n
|
568
|
-
key == :source ? n.send(key) : n.send(key)
|
569
|
-
end
|
570
|
-
}
|
569
|
+
multi_keys.inject(node) { |n, key| n.send(key) if n }
|
571
570
|
end
|
572
571
|
|
573
572
|
# Get expected value from rules.
|
@@ -578,5 +577,13 @@ module Parser::AST
|
|
578
577
|
def expected_value(rules, multi_keys)
|
579
578
|
multi_keys.inject(rules) { |o, key| o[key] }
|
580
579
|
end
|
580
|
+
|
581
|
+
def wrap_quote(string)
|
582
|
+
if string.include?("'")
|
583
|
+
"\"#{string}\""
|
584
|
+
else
|
585
|
+
"'#{string}'"
|
586
|
+
end
|
587
|
+
end
|
581
588
|
end
|
582
589
|
end
|
@@ -52,7 +52,9 @@ module Synvert::Core
|
|
52
52
|
#
|
53
53
|
# @param block [Block] a block defines the behaviors of the rewriter.
|
54
54
|
def execute(&block)
|
55
|
-
Rewriter.new('', '', &block)
|
55
|
+
rewriter = Rewriter.new('', '', &block)
|
56
|
+
rewriter.process
|
57
|
+
rewriter
|
56
58
|
end
|
57
59
|
|
58
60
|
# Register a rewriter with its group and name.
|
data/lib/synvert/core/version.rb
CHANGED
@@ -291,6 +291,11 @@ describe Parser::AST::Node do
|
|
291
291
|
expect(node.to_value).to eq 1
|
292
292
|
end
|
293
293
|
|
294
|
+
it 'gets for float' do
|
295
|
+
node = parse('1.5')
|
296
|
+
expect(node.to_value).to eq 1.5
|
297
|
+
end
|
298
|
+
|
294
299
|
it 'gets for string' do
|
295
300
|
node = parse("'str'")
|
296
301
|
expect(node.to_value).to eq 'str'
|
@@ -385,11 +390,6 @@ describe Parser::AST::Node do
|
|
385
390
|
end
|
386
391
|
|
387
392
|
describe '#match?' do
|
388
|
-
let(:instance) {
|
389
|
-
rewriter = Synvert::Rewriter.new('foo', 'bar')
|
390
|
-
Synvert::Rewriter::Instance.new(rewriter, 'file pattern')
|
391
|
-
}
|
392
|
-
|
393
393
|
it 'matches class name' do
|
394
394
|
source = 'class Synvert; end'
|
395
395
|
node = parse(source)
|
@@ -414,18 +414,42 @@ describe Parser::AST::Node do
|
|
414
414
|
expect(node).to be_match(type: 'send', arguments: [0])
|
415
415
|
end
|
416
416
|
|
417
|
+
it 'matches assign float' do
|
418
|
+
source = 'at_least(1.5)'
|
419
|
+
node = parse(source)
|
420
|
+
expect(node).to be_match(type: 'send', arguments: [1.5])
|
421
|
+
end
|
422
|
+
|
417
423
|
it 'matches arguments with string' do
|
418
424
|
source = 'params["user"]'
|
419
425
|
node = parse(source)
|
420
426
|
expect(node).to be_match(type: 'send', receiver: 'params', message: '[]', arguments: ['user'])
|
421
427
|
end
|
422
428
|
|
429
|
+
it 'matches arguments with string 2' do
|
430
|
+
source = 'params["user"]'
|
431
|
+
node = parse(source)
|
432
|
+
expect(node).to be_match(type: 'send', receiver: 'params', message: '[]', arguments: ["'user'"])
|
433
|
+
end
|
434
|
+
|
435
|
+
it 'matches arguments with string 3' do
|
436
|
+
source = "{ notice: 'Welcome' }"
|
437
|
+
node = parse(source)
|
438
|
+
expect(node).to be_match(type: 'hash', notice_value: "'Welcome'")
|
439
|
+
end
|
440
|
+
|
423
441
|
it 'matches arguments any' do
|
424
442
|
source = 'config.middleware.insert_after ActiveRecord::QueryCache, Lifo::Cache, page_cache: false'
|
425
443
|
node = parse(source)
|
426
444
|
expect(node).to be_match(type: 'send', arguments: { any: 'Lifo::Cache' })
|
427
445
|
end
|
428
446
|
|
447
|
+
it 'matches arguments with nested hash' do
|
448
|
+
source = '{ user_id: user.id }'
|
449
|
+
node = parse(source)
|
450
|
+
expect(node).to be_match(type: 'hash', user_id_value: { type: 'send', receiver: { type: 'send', message: 'user' }, message: 'id' })
|
451
|
+
end
|
452
|
+
|
429
453
|
it 'matches arguments contain' do
|
430
454
|
source = 'def slow(foo, bar, &block); end'
|
431
455
|
node = parse(source)
|
@@ -594,11 +618,6 @@ describe Parser::AST::Node do
|
|
594
618
|
end
|
595
619
|
|
596
620
|
describe '#rewritten_source' do
|
597
|
-
let(:instance) {
|
598
|
-
rewriter = Synvert::Rewriter.new('foo', 'bar')
|
599
|
-
Synvert::Rewriter::Instance.new(rewriter, 'file pattern')
|
600
|
-
}
|
601
|
-
|
602
621
|
it 'does not rewrite with unknown method' do
|
603
622
|
source = 'class Synvert; end'
|
604
623
|
node = parse(source)
|
@@ -155,22 +155,20 @@ module Synvert::Core
|
|
155
155
|
replace_with 'create {{arguments}}'
|
156
156
|
end
|
157
157
|
end
|
158
|
-
input =
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
end
|
173
|
-
"
|
158
|
+
input = <<~EOS
|
159
|
+
it 'uses factory_girl' do
|
160
|
+
user = FactoryGirl.create :user
|
161
|
+
post = FactoryGirl.create :post, user: user
|
162
|
+
assert post.valid?
|
163
|
+
end
|
164
|
+
EOS
|
165
|
+
output = <<~EOS
|
166
|
+
it 'uses factory_girl' do
|
167
|
+
user = create :user
|
168
|
+
post = create :post, user: user
|
169
|
+
assert post.valid?
|
170
|
+
end
|
171
|
+
EOS
|
174
172
|
expect(Dir).to receive(:glob).with('./spec/**/*_spec.rb').and_return(['spec/models/post_spec.rb'])
|
175
173
|
expect(File).to receive(:read).with('spec/models/post_spec.rb').and_return(input)
|
176
174
|
expect(File).to receive(:write).with('spec/models/post_spec.rb', output)
|
@@ -186,18 +184,16 @@ end
|
|
186
184
|
end
|
187
185
|
end
|
188
186
|
end
|
189
|
-
input =
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
end
|
200
|
-
'
|
187
|
+
input = <<~EOS
|
188
|
+
RSpec.configure do |config|
|
189
|
+
config.include FactoryGirl::Syntax::Methods
|
190
|
+
end
|
191
|
+
EOS
|
192
|
+
output = <<~EOS
|
193
|
+
RSpec.configure do |config|
|
194
|
+
config.include FactoryGirl::Syntax::Methods
|
195
|
+
end
|
196
|
+
EOS
|
201
197
|
expect(Dir).to receive(:glob).with('./spec/spec_helper.rb').and_return(['spec/spec_helper.rb'])
|
202
198
|
expect(File).to receive(:read).with('spec/spec_helper.rb').and_return(input)
|
203
199
|
expect(File).not_to receive(:write).with('spec/spec_helper.rb', output)
|
@@ -213,18 +209,16 @@ end
|
|
213
209
|
end
|
214
210
|
end
|
215
211
|
end
|
216
|
-
input =
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
end
|
227
|
-
'
|
212
|
+
input = <<~EOS
|
213
|
+
RSpec.configure do |config|
|
214
|
+
config.include FactoryGirl::Syntax::Methods
|
215
|
+
end
|
216
|
+
EOS
|
217
|
+
output = <<~EOS
|
218
|
+
RSpec.configure do |config|
|
219
|
+
config.include FactoryGirl::Syntax::Methods
|
220
|
+
end
|
221
|
+
EOS
|
228
222
|
expect(Dir).to receive(:glob).with('./spec/spec_helper.rb').and_return(['spec/spec_helper.rb']).twice
|
229
223
|
expect(File).to receive(:read).with('spec/spec_helper.rb').and_return(input).once
|
230
224
|
expect(File).not_to receive(:write).with('spec/spec_helper.rb', output)
|
@@ -239,22 +233,20 @@ end
|
|
239
233
|
replace_with 'create {{arguments}}'
|
240
234
|
end
|
241
235
|
end
|
242
|
-
input =
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
end
|
257
|
-
"
|
236
|
+
input = <<~EOS
|
237
|
+
it 'uses factory_girl' do
|
238
|
+
user = FactoryGirl.create :user
|
239
|
+
post = FactoryGirl.create :post, user: user
|
240
|
+
assert post.valid?
|
241
|
+
end
|
242
|
+
EOS
|
243
|
+
output = <<~EOS
|
244
|
+
it 'uses factory_girl' do
|
245
|
+
user = create :user
|
246
|
+
post = create :post, user: user
|
247
|
+
assert post.valid?
|
248
|
+
end
|
249
|
+
EOS
|
258
250
|
expect(Dir).to receive(:glob).with('./spec/**/*_spec.rb').and_return(['spec/models/post_spec.rb']).twice
|
259
251
|
expect(File).to receive(:read).with('spec/models/post_spec.rb').and_return(input)
|
260
252
|
expect(File).to receive(:write).with('spec/models/post_spec.rb', output)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: synvert-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.42.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Huang
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-07-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|