synvert-core 0.32.0 → 0.35.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/lib/synvert/core/node_ext.rb +5 -9
- data/lib/synvert/core/rewriter/instance.rb +1 -1
- data/lib/synvert/core/rewriter/scope/within_scope.rb +12 -3
- data/lib/synvert/core/version.rb +1 -1
- data/spec/synvert/core/node_ext_spec.rb +35 -2
- data/spec/synvert/core/rewriter/scope/within_scope.rb +8 -9
- 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: 2cebe11ac19bf86abe8809a2b95401dca2dd4d75285cb3e342c1d6a81c3fc4fb
|
4
|
+
data.tar.gz: 300d59aded93c156a78fffe02147ab3a74adc6c9c6e0449433b5a19881b64363
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7b03da68bbb3c5be3d275c922da6f1e8b0671ec1666b004897d60f142095c555eab5f4ac1eb386981b18e7fd60d0ed3d746b65883bfa63c3f3954b015ed1b2c8
|
7
|
+
data.tar.gz: 57c1ce9cb9d250b3a418a0587eac7e1b21b2e8125dc1d4924e390bc07a6ede2d15eb82059e0e7acf3a029c0733608475c0478da93875ceff03cfa5889b55860b
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## 0.35.0 (2021-05-17)
|
4
|
+
|
5
|
+
* Add `contain` rule
|
6
|
+
|
7
|
+
## 0.34.0 (2021-05-16)
|
8
|
+
|
9
|
+
* `child_node_name` supports [:def, :parentheses] and [:defs, :parentheses]
|
10
|
+
* Rename `pipe` to `pipes`
|
11
|
+
|
12
|
+
## 0.33.0 (2021-05-10)
|
13
|
+
|
14
|
+
* Add `body` for `class` node
|
15
|
+
|
3
16
|
## 0.32.0 (2021-05-07)
|
4
17
|
|
5
18
|
* Remove `ArgumentsNode`
|
@@ -110,7 +110,7 @@ module Parser::AST
|
|
110
110
|
case type
|
111
111
|
when :begin
|
112
112
|
children
|
113
|
-
when :def, :block
|
113
|
+
when :def, :block, :class
|
114
114
|
return [] if children[2].nil?
|
115
115
|
|
116
116
|
:begin == children[2].type ? children[2].body : children[2..-1]
|
@@ -329,20 +329,16 @@ module Parser::AST
|
|
329
329
|
# @return [Parser::Source::Range] source range of child node.
|
330
330
|
def child_node_range(child_name)
|
331
331
|
case [type, child_name]
|
332
|
-
when %i[block
|
332
|
+
when %i[block pipes], %i[def parentheses], %i[defs parentheses]
|
333
333
|
Parser::Source::Range.new('(string)', arguments.loc.expression.begin_pos, arguments.loc.expression.end_pos)
|
334
334
|
when %i[block arguments], %i[def arguments], %i[defs arguments]
|
335
335
|
Parser::Source::Range.new('(string)', arguments.first.loc.expression.begin_pos, arguments.last.loc.expression.end_pos)
|
336
|
-
when %i[class name]
|
337
|
-
loc.name
|
338
|
-
when %i[def name]
|
339
|
-
loc.name
|
340
|
-
when %i[defs name]
|
336
|
+
when %i[class name], %i[def name], %i[defs name]
|
341
337
|
loc.name
|
342
338
|
when %i[defs dot]
|
343
339
|
loc.operator
|
344
340
|
when %i[defs self]
|
345
|
-
Parser::Source::Range.new('(string)', loc.operator.begin_pos -
|
341
|
+
Parser::Source::Range.new('(string)', loc.operator.begin_pos - 'self'.length, loc.operator.begin_pos)
|
346
342
|
when %i[send dot]
|
347
343
|
loc.dot
|
348
344
|
when %i[send message]
|
@@ -403,7 +399,7 @@ module Parser::AST
|
|
403
399
|
def match?(rules)
|
404
400
|
flat_hash(rules).keys.all? do |multi_keys|
|
405
401
|
case multi_keys.last
|
406
|
-
when :any
|
402
|
+
when :any, :contain
|
407
403
|
actual_values = actual_value(self, multi_keys[0...-1])
|
408
404
|
expected = expected_value(rules, multi_keys)
|
409
405
|
actual_values.any? { |actual| match_value?(actual, expected) }
|
@@ -37,9 +37,18 @@ module Synvert::Core
|
|
37
37
|
def find_matching_nodes(current_node)
|
38
38
|
matching_nodes = []
|
39
39
|
if @options[:recursive]
|
40
|
-
|
41
|
-
|
42
|
-
|
40
|
+
if current_node.is_a?(Parser::AST::Node)
|
41
|
+
matching_nodes << current_node if current_node.match? @rules
|
42
|
+
current_node.recursive_children do |child_node|
|
43
|
+
matching_nodes << child_node if child_node.match? @rules
|
44
|
+
end
|
45
|
+
else
|
46
|
+
current_node.each do |node|
|
47
|
+
matching_nodes << node if node.match? @rules
|
48
|
+
node.recursive_children do |child_node|
|
49
|
+
matching_nodes << child_node if child_node.match? @rules
|
50
|
+
end
|
51
|
+
end
|
43
52
|
end
|
44
53
|
elsif current_node.is_a?(Parser::AST::Node)
|
45
54
|
if current_node.type == :begin
|
data/lib/synvert/core/version.rb
CHANGED
@@ -146,6 +146,21 @@ describe Parser::AST::Node do
|
|
146
146
|
expect(node.body).to eq [parse('include EmailSpec::Helpers'), parse('include EmailSpec::Matchers')]
|
147
147
|
end
|
148
148
|
|
149
|
+
it 'gets empty for class node' do
|
150
|
+
node = parse('class User; end')
|
151
|
+
expect(node.body).to be_empty
|
152
|
+
end
|
153
|
+
|
154
|
+
it 'gets one line for class node' do
|
155
|
+
node = parse('class User; attr_accessor :email; end')
|
156
|
+
expect(node.body).to eq [parse('attr_accessor :email')]
|
157
|
+
end
|
158
|
+
|
159
|
+
it 'gets one line for class node' do
|
160
|
+
node = parse('class User; attr_accessor :email; attr_accessor :username; end')
|
161
|
+
expect(node.body).to eq [parse('attr_accessor :email'), parse('attr_accessor :username')]
|
162
|
+
end
|
163
|
+
|
149
164
|
it 'gets for begin node' do
|
150
165
|
node = parse('foo; bar')
|
151
166
|
expect(node.body).to eq [parse('foo'), parse('bar')]
|
@@ -399,6 +414,12 @@ describe Parser::AST::Node do
|
|
399
414
|
expect(node).to be_match(type: 'send', arguments: { any: 'Lifo::Cache' })
|
400
415
|
end
|
401
416
|
|
417
|
+
it 'matches arguments contain' do
|
418
|
+
source = 'def slow(foo, bar, &block); end'
|
419
|
+
node = parse(source)
|
420
|
+
expect(node).to be_match(type: 'def', arguments: { contain: '&block' })
|
421
|
+
end
|
422
|
+
|
402
423
|
it 'matches not' do
|
403
424
|
source = 'class Synvert; end'
|
404
425
|
node = parse(source)
|
@@ -432,9 +453,9 @@ describe Parser::AST::Node do
|
|
432
453
|
expect(range.to_range).to eq(25...29)
|
433
454
|
end
|
434
455
|
|
435
|
-
it 'checks
|
456
|
+
it 'checks pipes' do
|
436
457
|
node = parse('Factory.define :user do |user|; end')
|
437
|
-
range = node.child_node_range(:
|
458
|
+
range = node.child_node_range(:pipes)
|
438
459
|
expect(range.to_range).to eq(24...30)
|
439
460
|
end
|
440
461
|
end
|
@@ -469,6 +490,12 @@ describe Parser::AST::Node do
|
|
469
490
|
range = node.child_node_range(:arguments)
|
470
491
|
expect(range.to_range).to eq(8...11)
|
471
492
|
end
|
493
|
+
|
494
|
+
it 'checks parentheses' do
|
495
|
+
node = parse('def foo(bar); end')
|
496
|
+
range = node.child_node_range(:parentheses)
|
497
|
+
expect(range.to_range).to eq(7...12)
|
498
|
+
end
|
472
499
|
end
|
473
500
|
|
474
501
|
context 'defs node' do
|
@@ -495,6 +522,12 @@ describe Parser::AST::Node do
|
|
495
522
|
range = node.child_node_range(:arguments)
|
496
523
|
expect(range.to_range).to eq(13...16)
|
497
524
|
end
|
525
|
+
|
526
|
+
it 'checks parentheses' do
|
527
|
+
node = parse('def self.foo(bar); end')
|
528
|
+
range = node.child_node_range(:parentheses)
|
529
|
+
expect(range.to_range).to eq(12...17)
|
530
|
+
end
|
498
531
|
end
|
499
532
|
|
500
533
|
context 'send node' do
|
@@ -8,16 +8,15 @@ module Synvert::Core
|
|
8
8
|
rewriter = Rewriter.new('foo', 'bar')
|
9
9
|
Rewriter::Instance.new(rewriter, 'file pattern')
|
10
10
|
}
|
11
|
-
let(:source) {
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
"
|
19
|
-
}
|
11
|
+
let(:source) { <<~EOS }
|
12
|
+
describe Post do
|
13
|
+
it 'gets post' do
|
14
|
+
FactoryGirl.create :post
|
15
|
+
end
|
16
|
+
end
|
17
|
+
EOS
|
20
18
|
let(:node) { Parser::CurrentRuby.parse(source) }
|
19
|
+
|
21
20
|
before do
|
22
21
|
Rewriter::Instance.reset
|
23
22
|
instance.current_node = node
|
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.35.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-05-
|
11
|
+
date: 2021-05-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|