synvert-core 0.32.0 → 0.35.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 +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
|