synvert-core 0.45.0 → 0.47.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 +15 -3
- data/lib/synvert/core/node_ext.rb +55 -4
- data/lib/synvert/core/rewriter/helper.rb +1 -1
- data/lib/synvert/core/version.rb +1 -1
- data/spec/synvert/core/node_ext_spec.rb +87 -0
- 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: c9673a5aa5ad59322786e09e99a527e7f7a7e05c7067200c9baed0602c7c1fe2
|
4
|
+
data.tar.gz: e946fa740f8678faa4f1cb856c2d6a54b4b0c09ed10084110bb78648da1a7497
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cebcaad6d3a1162b0ceb8354ae2d598f18e70474e068b8a91cdea8440c83f02280afae97adb8c923a5dbe7750138f02e5b73a633f4b7dbd9dfa9b0c90962c14a
|
7
|
+
data.tar.gz: b482a97216175c0a16492bdb23294acc33727493202c088d44a94fb73f15df6263d1addf2df5e2ef53cecc7147ff475e67c12e2eb9f3451b6c92b4b47eee42d4
|
data/CHANGELOG.md
CHANGED
@@ -1,17 +1,29 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
-
|
3
|
+
## 0.47.0 (2021-07-28)
|
4
|
+
|
5
|
+
* Add `to_single_quote` to `str` node
|
6
|
+
* Add `to_symbol` to `str` node
|
7
|
+
* Add `to_lambda_literal` to `lambda` node
|
8
|
+
|
9
|
+
## 0.46.0 (2021-07-25)
|
10
|
+
|
11
|
+
* Add `strip_curly_braces` and `wrap_curly_braces` for `hash` node
|
12
|
+
* Simplify symbol `match_value?`
|
13
|
+
* Unwrap quote when matching string value
|
14
|
+
|
15
|
+
## 0.45.0 (2021-07-22)
|
4
16
|
|
5
17
|
* Handle `nil` child node for `begin_pos` and `end_pos`
|
6
18
|
* Remove `Rewriter::Instance` options
|
7
19
|
|
8
|
-
|
20
|
+
## 0.44.0 (2021-07-19)
|
9
21
|
|
10
22
|
* Return rewrtier after executing snippet
|
11
23
|
* `left_value` and `right_value` support `or_asgn` node
|
12
24
|
* `child_node_range` supports send `parentheses`
|
13
25
|
|
14
|
-
|
26
|
+
## 0.42.0 (2021-07-11)
|
15
27
|
|
16
28
|
* Match string with quote
|
17
29
|
* `match_value?` returns true if actual and expected are the same
|
@@ -490,6 +490,50 @@ module Parser::AST
|
|
490
490
|
end
|
491
491
|
end
|
492
492
|
|
493
|
+
# strip curly braces for hash
|
494
|
+
def strip_curly_braces
|
495
|
+
return to_source unless type == :hash
|
496
|
+
|
497
|
+
to_source.sub(/^{(.*)}$/) { Regexp.last_match(1).strip }
|
498
|
+
end
|
499
|
+
|
500
|
+
# wrap curly braces for hash
|
501
|
+
def wrap_curly_braces
|
502
|
+
return to_source unless type == :hash
|
503
|
+
|
504
|
+
"{ #{to_source} }"
|
505
|
+
end
|
506
|
+
|
507
|
+
# get single quote string
|
508
|
+
def to_single_quote
|
509
|
+
return to_source unless type == :str
|
510
|
+
|
511
|
+
"'#{to_value}'"
|
512
|
+
end
|
513
|
+
|
514
|
+
# convert string to symbol
|
515
|
+
def to_symbol
|
516
|
+
return to_source unless type == :str
|
517
|
+
|
518
|
+
":#{to_value}"
|
519
|
+
end
|
520
|
+
|
521
|
+
# convert lambda {} to -> {}
|
522
|
+
def to_lambda_literal
|
523
|
+
if type == :block && caller.type == :send && caller.receiver.nil? && caller.message == :lambda
|
524
|
+
new_source = to_source
|
525
|
+
if arguments.size > 1
|
526
|
+
new_source = new_source[0...arguments.loc.begin.to_range.begin - 1] + new_source[arguments.loc.end.to_range.end..-1]
|
527
|
+
new_source = new_source.sub('lambda', "->(#{arguments.map(&:to_source).join(', ')})")
|
528
|
+
else
|
529
|
+
new_source = new_source.sub('lambda', '->')
|
530
|
+
end
|
531
|
+
new_source
|
532
|
+
else
|
533
|
+
to_source
|
534
|
+
end
|
535
|
+
end
|
536
|
+
|
493
537
|
private
|
494
538
|
|
495
539
|
# Compare actual value with expected value.
|
@@ -504,15 +548,14 @@ module Parser::AST
|
|
504
548
|
case expected
|
505
549
|
when Symbol
|
506
550
|
if actual.is_a?(Parser::AST::Node)
|
507
|
-
actual.
|
551
|
+
actual.to_value == expected
|
508
552
|
else
|
509
553
|
actual.to_sym == expected
|
510
554
|
end
|
511
555
|
when String
|
512
556
|
if actual.is_a?(Parser::AST::Node)
|
513
|
-
|
514
|
-
|
515
|
-
actual.to_source[1...-1] == expected
|
557
|
+
actual.to_source == expected || actual.to_value == expected ||
|
558
|
+
actual.to_source == unwrap_quote(expected) || actual.to_value == unwrap_quote(expected)
|
516
559
|
else
|
517
560
|
actual.to_s == expected || wrap_quote(actual.to_s) == expected
|
518
561
|
end
|
@@ -591,5 +634,13 @@ module Parser::AST
|
|
591
634
|
"'#{string}'"
|
592
635
|
end
|
593
636
|
end
|
637
|
+
|
638
|
+
def unwrap_quote(string)
|
639
|
+
if (string[0] == '"' && string[-1] == '"') || (string[0] == "'" && string[-1] == "'")
|
640
|
+
string[1...-1]
|
641
|
+
else
|
642
|
+
string
|
643
|
+
end
|
644
|
+
end
|
594
645
|
end
|
595
646
|
end
|
@@ -66,7 +66,7 @@ module Synvert::Core
|
|
66
66
|
# strip_brackets("(1..100)") #=> "1..100"
|
67
67
|
def strip_brackets(code)
|
68
68
|
code.sub(/^\((.*)\)$/) { Regexp.last_match(1) }.sub(/^\[(.*)\]$/) { Regexp.last_match(1) }.sub(/^{(.*)}$/) {
|
69
|
-
Regexp.last_match(1)
|
69
|
+
Regexp.last_match(1).strip
|
70
70
|
}
|
71
71
|
end
|
72
72
|
|
data/lib/synvert/core/version.rb
CHANGED
@@ -679,4 +679,91 @@ describe Parser::AST::Node do
|
|
679
679
|
EOS
|
680
680
|
end
|
681
681
|
end
|
682
|
+
|
683
|
+
describe '#strip_curly_braces' do
|
684
|
+
context 'hash node' do
|
685
|
+
it 'removes curly braces' do
|
686
|
+
node = parse("{ foo: 'bar' }")
|
687
|
+
expect(node.strip_curly_braces).to eq("foo: 'bar'")
|
688
|
+
end
|
689
|
+
end
|
690
|
+
|
691
|
+
context 'other node' do
|
692
|
+
it 'do nothing' do
|
693
|
+
node = parse("'foobar'")
|
694
|
+
expect(node.strip_curly_braces).to eq("'foobar'")
|
695
|
+
end
|
696
|
+
end
|
697
|
+
end
|
698
|
+
|
699
|
+
describe '#wrap_curly_braces' do
|
700
|
+
context 'hash node' do
|
701
|
+
it 'adds curly braces' do
|
702
|
+
node = parse("test(foo: 'bar')").arguments.first
|
703
|
+
expect(node.to_source).to eq("foo: 'bar'")
|
704
|
+
expect(node.wrap_curly_braces).to eq("{ foo: 'bar' }")
|
705
|
+
end
|
706
|
+
end
|
707
|
+
|
708
|
+
context 'other node' do
|
709
|
+
it 'does nothing' do
|
710
|
+
node = parse("'foobar'")
|
711
|
+
expect(node.wrap_curly_braces).to eq("'foobar'")
|
712
|
+
end
|
713
|
+
end
|
714
|
+
end
|
715
|
+
|
716
|
+
describe '#to_single_quote' do
|
717
|
+
context 'str node' do
|
718
|
+
it 'converts double quote to single quote' do
|
719
|
+
node = parse('"foobar"')
|
720
|
+
expect(node.to_source).to eq '"foobar"'
|
721
|
+
expect(node.to_single_quote).to eq "'foobar'"
|
722
|
+
end
|
723
|
+
end
|
724
|
+
|
725
|
+
context 'other node' do
|
726
|
+
it 'does nothing' do
|
727
|
+
node = parse(':foobar')
|
728
|
+
expect(node.to_single_quote).to eq ':foobar'
|
729
|
+
end
|
730
|
+
end
|
731
|
+
end
|
732
|
+
|
733
|
+
describe '#to_symbol' do
|
734
|
+
context 'str node' do
|
735
|
+
it 'converts string to symbol' do
|
736
|
+
node = parse("'foobar'")
|
737
|
+
expect(node.to_symbol).to eq ':foobar'
|
738
|
+
end
|
739
|
+
end
|
740
|
+
|
741
|
+
context 'other node' do
|
742
|
+
it 'does nothing' do
|
743
|
+
node = parse(':foobar')
|
744
|
+
expect(node.to_symbol).to eq ':foobar'
|
745
|
+
end
|
746
|
+
end
|
747
|
+
end
|
748
|
+
|
749
|
+
describe '#to_lambda_literal' do
|
750
|
+
context 'lambda node' do
|
751
|
+
it 'converts to lambda literal without arguments' do
|
752
|
+
node = parse('lambda { foobar }')
|
753
|
+
expect(node.to_lambda_literal).to eq('-> { foobar }')
|
754
|
+
end
|
755
|
+
|
756
|
+
it 'converts to lambda literal with arguments' do
|
757
|
+
node = parse('lambda { |x, y| foobar }')
|
758
|
+
expect(node.to_lambda_literal).to eq('->(x, y) { foobar }')
|
759
|
+
end
|
760
|
+
end
|
761
|
+
|
762
|
+
context 'other node' do
|
763
|
+
it 'does nothing' do
|
764
|
+
node = parse(':foobar')
|
765
|
+
expect(node.to_lambda_literal).to eq ':foobar'
|
766
|
+
end
|
767
|
+
end
|
768
|
+
end
|
682
769
|
end
|
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.47.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-07-
|
11
|
+
date: 2021-07-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|