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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 79cd6bc1c9d3e69d97ee47a276165412326be82a0d87f4527742c6d6c2acdca8
4
- data.tar.gz: efa16f88a2a075aa33b3dc5aba653e8c188317840a5a0af75dfba87878a4c7d3
3
+ metadata.gz: c9673a5aa5ad59322786e09e99a527e7f7a7e05c7067200c9baed0602c7c1fe2
4
+ data.tar.gz: e946fa740f8678faa4f1cb856c2d6a54b4b0c09ed10084110bb78648da1a7497
5
5
  SHA512:
6
- metadata.gz: 51115212e46d96e19fc611a565535246e0fa25d43b8ad6d8830c7e149571b0ff682621ba9525a2d9ab0250d1a98afde7f02d5d8f414457d00fcbbd5bf5352372
7
- data.tar.gz: a6b3c930b1183abd25ee03e5c371a5a937f22e686e975f8de48afb882ff82deb8b43432ada7ff85254c2f04e7be1081bca8b7cd4af475cc94ad1250fd8c02846
6
+ metadata.gz: cebcaad6d3a1162b0ceb8354ae2d598f18e70474e068b8a91cdea8440c83f02280afae97adb8c923a5dbe7750138f02e5b73a633f4b7dbd9dfa9b0c90962c14a
7
+ data.tar.gz: b482a97216175c0a16492bdb23294acc33727493202c088d44a94fb73f15df6263d1addf2df5e2ef53cecc7147ff475e67c12e2eb9f3451b6c92b4b47eee42d4
data/CHANGELOG.md CHANGED
@@ -1,17 +1,29 @@
1
1
  # CHANGELOG
2
2
 
3
- # 0.45.0 (2021-07-22)
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
- # 0.44.0 (2021-07-19)
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
- # 0.42.0 (2021-07-11)
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.to_source == ":#{expected}"
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
- return true if (Parser::CurrentRuby.parse(expected) == actual rescue nil)
514
- actual.to_source == expected || (actual.to_source[0] == ':' && actual.to_source[1..-1] == expected) ||
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
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Synvert
4
4
  module Core
5
- VERSION = '0.45.0'
5
+ VERSION = '0.47.0'
6
6
  end
7
7
  end
@@ -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.45.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-22 00:00:00.000000000 Z
11
+ date: 2021-07-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport