synvert-core 0.45.1 → 0.48.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: 35318f19e568f0e25bce6e982efd115aacb5fe2857fda56406839e3b4693253b
4
- data.tar.gz: 0a89e0f6376e41c13a5dae28a2bbeeee53ecb9c1e9b8e00e20ae0a082ed3c0bb
3
+ metadata.gz: d053ad88384be0c41958704354fff02d9c6d4aba71748ee4a57713e5502eb398
4
+ data.tar.gz: f856e276eb76e6cf16f72039bca6ea138b5aae6038c11887f7b81d0128b6a606
5
5
  SHA512:
6
- metadata.gz: de01431c5662dd61f698a537e68f74de2d6a19b63ecc7465fd81d6496fae158859446bc5d42fa1f432e559aeccb7c27a28d0f6b261f1195b68a97601260d0aa0
7
- data.tar.gz: ee623d625ee63212b64f752cb14b0214ff9d58c01c9c7fd23b51991b9fbfcca502ae0a96e633347bfa9486af3c4bfb0b424bdcaba8cf401c44fcdeea31caa4c4
6
+ metadata.gz: b15b022aab4015583b3c9b966b312c9dd3e0a4ecd184c498be19b566b2ef47eaace511ba83f65ecadc70b959fd2d685b1e9ee286bb64f4697016b7c1f5e1040a
7
+ data.tar.gz: e62eefc4e31cf53b3b0f7dff13e2909b49db206afea12b82122aae3f7d31037627776d92b8bbf546bb5911b38a0c80b73c5063375399b8b3b61abb519439ae7b
data/CHANGELOG.md CHANGED
@@ -1,21 +1,34 @@
1
1
  # CHANGELOG
2
2
 
3
- # 0.45.1 (2021-07-24)
3
+ ## 0.48.0 (2021-08-01)
4
4
 
5
+ * Force to read file as utf-8
6
+ * Add logo
7
+
8
+ ## 0.47.0 (2021-07-28)
9
+
10
+ * Add `to_single_quote` to `str` node
11
+ * Add `to_symbol` to `str` node
12
+ * Add `to_lambda_literal` to `lambda` node
13
+
14
+ ## 0.46.0 (2021-07-25)
15
+
16
+ * Add `strip_curly_braces` and `wrap_curly_braces` for `hash` node
17
+ * Simplify symbol `match_value?`
5
18
  * Unwrap quote when matching string value
6
19
 
7
- # 0.45.0 (2021-07-22)
20
+ ## 0.45.0 (2021-07-22)
8
21
 
9
22
  * Handle `nil` child node for `begin_pos` and `end_pos`
10
23
  * Remove `Rewriter::Instance` options
11
24
 
12
- # 0.44.0 (2021-07-19)
25
+ ## 0.44.0 (2021-07-19)
13
26
 
14
27
  * Return rewrtier after executing snippet
15
28
  * `left_value` and `right_value` support `or_asgn` node
16
29
  * `child_node_range` supports send `parentheses`
17
30
 
18
- # 0.42.0 (2021-07-11)
31
+ ## 0.42.0 (2021-07-11)
19
32
 
20
33
  * Match string with quote
21
34
  * `match_value?` returns true if actual and expected are the same
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Synvert::Core
2
2
 
3
+ <img src="https://xinminlabs.github.io/synvert/img/logo_96.png" alt="logo" width="32" height="32" />
4
+
3
5
  ![Main workflow](https://github.com/xinminlabs/synvert-core/actions/workflows/main.yml/badge.svg)
4
6
  [![Coverage Status](https://coveralls.io/repos/xinminlabs/synvert-core/badge.png?branch=master)](https://coveralls.io/r/xinminlabs/synvert-core)
5
7
  [![Gem Version](https://badge.fury.io/rb/synvert-core.png)](http://badge.fury.io/rb/synvert-core)
@@ -35,5 +37,5 @@ Or install it yourself as:
35
37
  4. Push to the branch (`git push origin my-new-feature`)
36
38
  5. Create a new Pull Request
37
39
 
38
- [1]: http://xinminlabs.github.io/synvert/
39
- [2]: http://rubydoc.info/github/xinminlabs/synvert-core/master/frames
40
+ [1]: https://xinminlabs.github.io/synvert/
41
+ [2]: https://rubydoc.info/github/xinminlabs/synvert-core/master/frames
@@ -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,7 +548,7 @@ 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
@@ -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
 
@@ -17,7 +17,7 @@ module Synvert::Core
17
17
  @file_source ||= {}
18
18
  @file_source[file_path] ||=
19
19
  begin
20
- source = File.read(file_path)
20
+ source = File.read(file_path, encoding: 'UTF-8')
21
21
  source = Engine::ERB.encode(source) if /\.erb$/.match?(file_path)
22
22
  source
23
23
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Synvert
4
4
  module Core
5
- VERSION = '0.45.1'
5
+ VERSION = '0.48.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
@@ -170,7 +170,7 @@ module Synvert::Core
170
170
  end
171
171
  EOS
172
172
  expect(Dir).to receive(:glob).with('./spec/**/*_spec.rb').and_return(['spec/models/post_spec.rb'])
173
- expect(File).to receive(:read).with('spec/models/post_spec.rb').and_return(input)
173
+ expect(File).to receive(:read).with('spec/models/post_spec.rb', encoding: 'UTF-8').and_return(input)
174
174
  expect(File).to receive(:write).with('spec/models/post_spec.rb', output)
175
175
  instance.process
176
176
  end
@@ -195,7 +195,7 @@ module Synvert::Core
195
195
  end
196
196
  EOS
197
197
  expect(Dir).to receive(:glob).with('./spec/spec_helper.rb').and_return(['spec/spec_helper.rb'])
198
- expect(File).to receive(:read).with('spec/spec_helper.rb').and_return(input)
198
+ expect(File).to receive(:read).with('spec/spec_helper.rb', encoding: 'UTF-8').and_return(input)
199
199
  expect(File).not_to receive(:write).with('spec/spec_helper.rb', output)
200
200
  instance.process
201
201
  end
@@ -220,7 +220,7 @@ module Synvert::Core
220
220
  end
221
221
  EOS
222
222
  expect(Dir).to receive(:glob).with('./spec/spec_helper.rb').and_return(['spec/spec_helper.rb']).twice
223
- expect(File).to receive(:read).with('spec/spec_helper.rb').and_return(input).once
223
+ expect(File).to receive(:read).with('spec/spec_helper.rb', encoding: 'UTF-8').and_return(input).once
224
224
  expect(File).not_to receive(:write).with('spec/spec_helper.rb', output)
225
225
  instance.process
226
226
  instance.process
@@ -248,9 +248,9 @@ module Synvert::Core
248
248
  end
249
249
  EOS
250
250
  expect(Dir).to receive(:glob).with('./spec/**/*_spec.rb').and_return(['spec/models/post_spec.rb']).twice
251
- expect(File).to receive(:read).with('spec/models/post_spec.rb').and_return(input)
251
+ expect(File).to receive(:read).with('spec/models/post_spec.rb', encoding: 'UTF-8').and_return(input)
252
252
  expect(File).to receive(:write).with('spec/models/post_spec.rb', output)
253
- expect(File).to receive(:read).with('spec/models/post_spec.rb').and_return(output)
253
+ expect(File).to receive(:read).with('spec/models/post_spec.rb', encoding: 'UTF-8').and_return(output)
254
254
  instance.process
255
255
  instance.process
256
256
  expect(rewriter.affected_files).to be_include('spec/models/post_spec.rb')
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.1
4
+ version: 0.48.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-23 00:00:00.000000000 Z
11
+ date: 2021-08-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport