synvert-core 0.45.0 → 0.47.0

Sign up to get free protection for your applications and to get access to all the features.
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