synvert-core 0.31.0 → 0.32.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/synvert/core/node_ext.rb +16 -29
- data/lib/synvert/core/version.rb +1 -1
- data/spec/synvert/core/node_ext_spec.rb +6 -6
- 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: eb6c6b0b57d35fa8d3f850685ccda616f56f19fe55fee0b766302574b2cc577e
|
4
|
+
data.tar.gz: fac77a466b7691c8b74c5a3bb4f2b00ef31be69dfdb0db93fb07593e8553702e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ce9c70f4892ed3e65cb4669e0e623b745d8edce13e06fbc758c33adce27870934b6e5ea78dcf0eca480c421b96b9afa6de666599094819fd6e5cb6f4ba3b056
|
7
|
+
data.tar.gz: '0800aedc7b404a04f4605e2586f123faed17152f7ebe81bd430f48834f760c8189efe7fb348f41d15f2285370bdd2d08c31badb6e99df064c5b50dd98801ea88'
|
data/CHANGELOG.md
CHANGED
@@ -1,29 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Parser::AST
|
4
|
-
# ArgumentsNode allows to handle all args as one node or handle all args as an array.
|
5
|
-
class ArgumentsNode
|
6
|
-
# Initialize
|
7
|
-
#
|
8
|
-
# @param node [Parser::AST::Node] args node.
|
9
|
-
def initialize(node)
|
10
|
-
@node = node
|
11
|
-
end
|
12
|
-
|
13
|
-
# If args node responds method itself, call method on args node.
|
14
|
-
# If args children (array) responds method, call method on args children.
|
15
|
-
# Otherwise raise method missing error.
|
16
|
-
def method_missing(meth, *args, &block)
|
17
|
-
if @node.respond_to?(meth)
|
18
|
-
@node.send meth, *args, &block
|
19
|
-
elsif @node.children.respond_to?(meth)
|
20
|
-
@node.children.send meth, *args, &block
|
21
|
-
else
|
22
|
-
super
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
4
|
# Parser::AST::Node monkey patch.
|
28
5
|
class Node
|
29
6
|
# Get name node of :class, :module, :const, :mlhs, :def and :defs node.
|
@@ -101,9 +78,9 @@ module Parser::AST
|
|
101
78
|
def arguments
|
102
79
|
case type
|
103
80
|
when :def, :block
|
104
|
-
|
81
|
+
children[1]
|
105
82
|
when :defs
|
106
|
-
|
83
|
+
children[2]
|
107
84
|
when :send
|
108
85
|
children[2..-1]
|
109
86
|
when :defined?
|
@@ -285,7 +262,9 @@ module Parser::AST
|
|
285
262
|
# Current node is s(:hash, s(:pair, s(:sym, :number), s(:int, 10)))
|
286
263
|
# node.number_value is 10
|
287
264
|
def method_missing(method_name, *args, &block)
|
288
|
-
if :
|
265
|
+
if :args == type && children.respond_to?(method_name)
|
266
|
+
return children.send(method_name, *args, &block)
|
267
|
+
elsif :hash == type && method_name.to_s.include?('_value')
|
289
268
|
key = method_name.to_s.sub('_value', '')
|
290
269
|
return hash_value(key.to_sym)&.to_value if key?(key.to_sym)
|
291
270
|
return hash_value(key.to_s)&.to_value if key?(key.to_s)
|
@@ -297,7 +276,9 @@ module Parser::AST
|
|
297
276
|
end
|
298
277
|
|
299
278
|
def respond_to_missing?(method_name, *args)
|
300
|
-
if :
|
279
|
+
if :args == type && children.respond_to?(method_name)
|
280
|
+
return true
|
281
|
+
elsif :hash == type && method_name.to_s.include?('_value')
|
301
282
|
key = method_name.to_s.sub('_value', '')
|
302
283
|
return true if key?(key.to_sym) || key?(key.to_s)
|
303
284
|
end
|
@@ -350,6 +331,8 @@ module Parser::AST
|
|
350
331
|
case [type, child_name]
|
351
332
|
when %i[block pipe]
|
352
333
|
Parser::Source::Range.new('(string)', arguments.loc.expression.begin_pos, arguments.loc.expression.end_pos)
|
334
|
+
when %i[block arguments], %i[def arguments], %i[defs arguments]
|
335
|
+
Parser::Source::Range.new('(string)', arguments.first.loc.expression.begin_pos, arguments.last.loc.expression.end_pos)
|
353
336
|
when %i[class name]
|
354
337
|
loc.name
|
355
338
|
when %i[def name]
|
@@ -458,8 +441,12 @@ module Parser::AST
|
|
458
441
|
evaluated = instance_eval old_code
|
459
442
|
case evaluated
|
460
443
|
when Parser::AST::Node
|
461
|
-
evaluated.
|
462
|
-
|
444
|
+
if evaluated.type == :args
|
445
|
+
evaluated.loc.expression.source[1...-1]
|
446
|
+
else
|
447
|
+
evaluated.loc.expression.source
|
448
|
+
end
|
449
|
+
when Array
|
463
450
|
if evaluated.size > 0
|
464
451
|
file_source = evaluated.first.loc.expression.source_buffer.source
|
465
452
|
source = file_source[evaluated.first.loc.expression.begin_pos...evaluated.last.loc.expression.end_pos]
|
data/lib/synvert/core/version.rb
CHANGED
@@ -104,17 +104,17 @@ describe Parser::AST::Node do
|
|
104
104
|
describe '#arguments' do
|
105
105
|
it 'gets for def node' do
|
106
106
|
node = parse('def test(foo, bar); foo + bar; end')
|
107
|
-
expect(node.arguments.
|
107
|
+
expect(node.arguments.type).to eq :args
|
108
108
|
end
|
109
109
|
|
110
110
|
it 'gets for defs node' do
|
111
111
|
node = parse('def self.test(foo, bar); foo + bar; end')
|
112
|
-
expect(node.arguments.
|
112
|
+
expect(node.arguments.type).to eq :args
|
113
113
|
end
|
114
114
|
|
115
115
|
it 'gets for block node' do
|
116
116
|
node = parse('RSpec.configure do |config|; end')
|
117
|
-
expect(node.arguments.
|
117
|
+
expect(node.arguments.type).to eq :args
|
118
118
|
end
|
119
119
|
|
120
120
|
it 'gets for send node' do
|
@@ -408,13 +408,13 @@ describe Parser::AST::Node do
|
|
408
408
|
it 'matches in' do
|
409
409
|
source = 'FactoryBot.create(:user)'
|
410
410
|
node = parse(source)
|
411
|
-
expect(node).to be_match(type: 'send', message: { in: [
|
411
|
+
expect(node).to be_match(type: 'send', message: { in: %i[create build] })
|
412
412
|
end
|
413
413
|
|
414
414
|
it 'matches not_in' do
|
415
415
|
source = 'FactoryBot.create(:user)'
|
416
416
|
node = parse(source)
|
417
|
-
expect(node).not_to be_match(type: 'send', message: { not_in: [
|
417
|
+
expect(node).not_to be_match(type: 'send', message: { not_in: %i[create build] })
|
418
418
|
end
|
419
419
|
end
|
420
420
|
|
@@ -566,7 +566,7 @@ describe Parser::AST::Node do
|
|
566
566
|
expect(node.rewritten_source('{{name}}')).to eq 'Synvert'
|
567
567
|
end
|
568
568
|
|
569
|
-
it 'rewrites for
|
569
|
+
it 'rewrites for arguments' do
|
570
570
|
source = 'test { |a, b| }'
|
571
571
|
node = parse(source)
|
572
572
|
expect(node.rewritten_source('{{arguments}}')).to eq 'a, b'
|
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.32.0
|
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-05-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|