synvert-core 0.28.1 → 0.29.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +2 -1
- data/lib/synvert/core/node_ext.rb +56 -13
- data/lib/synvert/core/version.rb +1 -1
- data/spec/synvert/core/node_ext_spec.rb +10 -0
- data/spec/synvert/core/rewriter/action/delete_action_spec.rb +3 -3
- data/spec/synvert/core/rewriter/action/replace_action_spec.rb +2 -2
- data/synvert-core.gemspec +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 31ee6b89cd48a4accb2dc71fdec2e487c534e8d6eb4a9bd6050817cd88f7ba3c
|
|
4
|
+
data.tar.gz: cd4c005e0f7a21e52e984e5279a45d4325d341b92d67feedbbc455ddc062e0fc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4d1e8642e682a155eedb03c6cdbabca55f53f22c258d4774da7200877159ec18c0a7d568823c5c379fd93810d0baf945a2bc139f8444423855c6279241acb0bc
|
|
7
|
+
data.tar.gz: 73a369f23d1add90b21ce578faf37a3136a6ffcb384f47fa5b3881fd4241af4b087b19fb0d854143ed1e3d9b76f350fc41b2415cddc29671cde3afe0e46d4709
|
data/CHANGELOG.md
CHANGED
|
@@ -203,7 +203,7 @@ module Parser::AST
|
|
|
203
203
|
def hash_value(key)
|
|
204
204
|
if :hash == type
|
|
205
205
|
value_node = children.find { |pair_node| pair_node.key.to_value == key }
|
|
206
|
-
value_node
|
|
206
|
+
value_node&.value
|
|
207
207
|
else
|
|
208
208
|
raise Synvert::Core::MethodNotSupported, "hash_value is not handled for #{debug_info}"
|
|
209
209
|
end
|
|
@@ -280,6 +280,29 @@ module Parser::AST
|
|
|
280
280
|
end
|
|
281
281
|
end
|
|
282
282
|
|
|
283
|
+
# Respond key value for hash node, e.g.
|
|
284
|
+
#
|
|
285
|
+
# Current node is s(:hash, s(:pair, s(:sym, :number), s(:int, 10)))
|
|
286
|
+
# node.number_value is 10
|
|
287
|
+
def method_missing(method_name, *args, &block)
|
|
288
|
+
if :hash == type && method_name.to_s.include?('_value')
|
|
289
|
+
key = method_name.to_s.sub('_value', '')
|
|
290
|
+
return hash_value(key.to_sym)&.to_value if key?(key.to_sym)
|
|
291
|
+
return hash_value(key.to_s)&.to_value if key?(key.to_s)
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
super
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
def respond_to_missing?(method_name, *args)
|
|
298
|
+
if :hash == type && method_name.to_s.include?('_value')
|
|
299
|
+
key = method_name.to_s.sub('_value', '')
|
|
300
|
+
return true if key?(key.to_sym) || key?(key.to_s)
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
super
|
|
304
|
+
end
|
|
305
|
+
|
|
283
306
|
def to_s
|
|
284
307
|
if :mlhs == type
|
|
285
308
|
"(#{children.map(&:name).join(', ')})"
|
|
@@ -323,35 +346,55 @@ module Parser::AST
|
|
|
323
346
|
# @return [Parser::Source::Range] source range of child node.
|
|
324
347
|
def child_node_range(child_name)
|
|
325
348
|
case [type, child_name]
|
|
326
|
-
when [
|
|
349
|
+
when %i[block pipe]
|
|
327
350
|
Parser::Source::Range.new('(string)', arguments.loc.expression.begin_pos, arguments.loc.expression.end_pos)
|
|
328
|
-
when [
|
|
351
|
+
when %i[class name]
|
|
329
352
|
loc.name
|
|
330
|
-
when [
|
|
353
|
+
when %i[def name]
|
|
331
354
|
loc.name
|
|
332
|
-
when [
|
|
355
|
+
when %i[defs name]
|
|
333
356
|
loc.name
|
|
334
|
-
when [
|
|
357
|
+
when %i[defs dot]
|
|
335
358
|
loc.operator
|
|
336
|
-
when [
|
|
359
|
+
when %i[defs self]
|
|
337
360
|
Parser::Source::Range.new('(string)', loc.operator.begin_pos - 4, loc.operator.begin_pos)
|
|
338
|
-
when [
|
|
361
|
+
when %i[send dot]
|
|
339
362
|
loc.dot
|
|
340
|
-
when [
|
|
341
|
-
|
|
363
|
+
when %i[send message]
|
|
364
|
+
if loc.operator
|
|
365
|
+
Parser::Source::Range.new('(string)', loc.selector.begin_pos, loc.operator.end_pos)
|
|
366
|
+
else
|
|
367
|
+
loc.selector
|
|
368
|
+
end
|
|
342
369
|
else
|
|
343
370
|
if respond_to?(child_name)
|
|
344
371
|
child_node = send(child_name)
|
|
345
372
|
return nil if child_node.nil?
|
|
373
|
+
|
|
346
374
|
if child_node.is_a?(Parser::AST::Node)
|
|
347
|
-
return
|
|
375
|
+
return(
|
|
376
|
+
Parser::Source::Range.new(
|
|
377
|
+
'(string)',
|
|
378
|
+
child_node.loc.expression.begin_pos,
|
|
379
|
+
child_node.loc.expression.end_pos
|
|
380
|
+
)
|
|
381
|
+
)
|
|
348
382
|
end
|
|
383
|
+
|
|
349
384
|
# arguments
|
|
350
385
|
return nil if child_node.empty?
|
|
351
|
-
|
|
386
|
+
|
|
387
|
+
return(
|
|
388
|
+
Parser::Source::Range.new(
|
|
389
|
+
'(string)',
|
|
390
|
+
child_node.first.loc.expression.begin_pos,
|
|
391
|
+
child_node.last.loc.expression.end_pos
|
|
392
|
+
)
|
|
393
|
+
)
|
|
352
394
|
end
|
|
353
395
|
|
|
354
|
-
raise Synvert::Core::MethodNotSupported,
|
|
396
|
+
raise Synvert::Core::MethodNotSupported,
|
|
397
|
+
"child_node_range is not handled for #{evaluated.inspect}, child_name: #{child_name}"
|
|
355
398
|
end
|
|
356
399
|
end
|
|
357
400
|
|
data/lib/synvert/core/version.rb
CHANGED
|
@@ -333,6 +333,16 @@ describe Parser::AST::Node do
|
|
|
333
333
|
end
|
|
334
334
|
end
|
|
335
335
|
|
|
336
|
+
describe 'key value by method_missing' do
|
|
337
|
+
it 'gets for key value' do
|
|
338
|
+
node = parse("{:foo => :bar}")
|
|
339
|
+
expect(node.foo_value).to eq :bar
|
|
340
|
+
|
|
341
|
+
node = parse("{'foo' => 'bar'}")
|
|
342
|
+
expect(node.foo_value).to eq 'bar'
|
|
343
|
+
end
|
|
344
|
+
end
|
|
345
|
+
|
|
336
346
|
describe '#recursive_children' do
|
|
337
347
|
it 'iterates all children recursively' do
|
|
338
348
|
node = parse('class Synvert; def current_node; @node; end; end')
|
|
@@ -5,18 +5,18 @@ require 'spec_helper'
|
|
|
5
5
|
module Synvert::Core
|
|
6
6
|
describe Rewriter::DeleteAction do
|
|
7
7
|
subject {
|
|
8
|
-
source =
|
|
8
|
+
source = 'arr.map {}.flatten'
|
|
9
9
|
node = Parser::CurrentRuby.parse(source)
|
|
10
10
|
instance = double(current_node: node)
|
|
11
11
|
Rewriter::DeleteAction.new(instance, :dot, :message)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
it 'gets begin_pos' do
|
|
15
|
-
expect(subject.begin_pos).to eq
|
|
15
|
+
expect(subject.begin_pos).to eq 'arr.map {}'.length
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
it 'gets end_pos' do
|
|
19
|
-
expect(subject.end_pos).to eq
|
|
19
|
+
expect(subject.end_pos).to eq 'arr.map {}.flatten'.length
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
it 'gets rewritten_code' do
|
|
@@ -6,7 +6,7 @@ module Synvert::Core
|
|
|
6
6
|
describe Rewriter::ReplaceAction do
|
|
7
7
|
context 'replace with single line' do
|
|
8
8
|
subject {
|
|
9
|
-
source =
|
|
9
|
+
source = 'FactoryBot.create(:user)'
|
|
10
10
|
node = Parser::CurrentRuby.parse(source)
|
|
11
11
|
instance = double(current_node: node)
|
|
12
12
|
Rewriter::ReplaceAction.new(instance, :receiver, :dot, :message, with: 'create')
|
|
@@ -17,7 +17,7 @@ module Synvert::Core
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
it 'gets end_pos' do
|
|
20
|
-
expect(subject.end_pos).to eq
|
|
20
|
+
expect(subject.end_pos).to eq 'FactoryBot.create'.length
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
it 'gets rewritten_code' do
|
data/synvert-core.gemspec
CHANGED
|
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
|
21
21
|
|
|
22
22
|
spec.add_runtime_dependency "activesupport"
|
|
23
23
|
spec.add_runtime_dependency "erubis"
|
|
24
|
-
spec.add_runtime_dependency "parser"
|
|
24
|
+
spec.add_runtime_dependency "parser"
|
|
25
25
|
|
|
26
26
|
spec.add_development_dependency "bundler"
|
|
27
27
|
spec.add_development_dependency "guard"
|
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.29.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-04-
|
|
11
|
+
date: 2021-04-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -42,16 +42,16 @@ dependencies:
|
|
|
42
42
|
name: parser
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- - "
|
|
45
|
+
- - ">="
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version:
|
|
47
|
+
version: '0'
|
|
48
48
|
type: :runtime
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
|
-
- - "
|
|
52
|
+
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version:
|
|
54
|
+
version: '0'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: bundler
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -213,7 +213,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
213
213
|
- !ruby/object:Gem::Version
|
|
214
214
|
version: '0'
|
|
215
215
|
requirements: []
|
|
216
|
-
rubygems_version: 3.1.
|
|
216
|
+
rubygems_version: 3.1.6
|
|
217
217
|
signing_key:
|
|
218
218
|
specification_version: 4
|
|
219
219
|
summary: convert ruby code to better syntax.
|