synvert-core 0.44.0 → 0.45.2
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/.github/workflows/main.yml +32 -0
- data/CHANGELOG.md +15 -2
- data/README.md +1 -1
- data/lib/synvert/core/node_ext.rb +11 -6
- data/lib/synvert/core/rewriter.rb +2 -3
- data/lib/synvert/core/rewriter/action/delete_action.rb +2 -2
- data/lib/synvert/core/rewriter/instance.rb +2 -6
- data/lib/synvert/core/version.rb +1 -1
- data/spec/synvert/core/rewriter/gem_spec_spec.rb +12 -13
- metadata +3 -3
- data/.travis.yml +0 -8
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 425514bc071364c9908b0eff57e626c19fecf611ce3504dd51875af747969aea
         | 
| 4 | 
            +
              data.tar.gz: 2120c05146eab24a6f6c36c9213fcce70ed3102862b1f572d2ba208659b8053a
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 65ff93235c9c5a437017f59a4e63fc6ef0a569b4b4f9de6cf23cbb0bf8203c796ea8cdd564ee4a434b87fb4346b0569140f4b75e94ebacfea1dc3cb3e54168f2
         | 
| 7 | 
            +
              data.tar.gz: 5902bcfda3dfe77f362df46e1e8dcad4c269ff5057827936279ebfb8dcd82b19fe6b01e6e52db190d1a7b8d40233a8b15b03864191070e8ef2da8deeb0161ca3
         | 
| @@ -0,0 +1,32 @@ | |
| 1 | 
            +
            # This workflow uses actions that are not certified by GitHub.
         | 
| 2 | 
            +
            # They are provided by a third-party and are governed by
         | 
| 3 | 
            +
            # separate terms of service, privacy policy, and support
         | 
| 4 | 
            +
            # documentation.
         | 
| 5 | 
            +
            # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
         | 
| 6 | 
            +
            # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            name: CI
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            on:
         | 
| 11 | 
            +
              push:
         | 
| 12 | 
            +
                branches: [ master ]
         | 
| 13 | 
            +
              pull_request:
         | 
| 14 | 
            +
                branches: [ master ]
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            jobs:
         | 
| 17 | 
            +
              test:
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                runs-on: ubuntu-latest
         | 
| 20 | 
            +
                strategy:
         | 
| 21 | 
            +
                  matrix:
         | 
| 22 | 
            +
                    ruby-version: ['2.5', '2.6', '2.7', '3.0']
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                steps:
         | 
| 25 | 
            +
                - uses: actions/checkout@v2
         | 
| 26 | 
            +
                - name: Set up Ruby
         | 
| 27 | 
            +
                  uses: ruby/setup-ruby@v1
         | 
| 28 | 
            +
                  with:
         | 
| 29 | 
            +
                    ruby-version: ${{ matrix.ruby-version }}
         | 
| 30 | 
            +
                    bundler-cache: true
         | 
| 31 | 
            +
                - name: Run tests
         | 
| 32 | 
            +
                  run: bundle exec rake
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,12 +1,25 @@ | |
| 1 1 | 
             
            # CHANGELOG
         | 
| 2 2 |  | 
| 3 | 
            -
             | 
| 3 | 
            +
            ## 0.45.2 (2021-07-24)
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            * Simplify symbol `match_value?`
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            ## 0.45.1 (2021-07-24)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            * Unwrap quote when matching string value
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            ## 0.45.0 (2021-07-22)
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            * Handle `nil` child node for `begin_pos` and `end_pos`
         | 
| 14 | 
            +
            * Remove `Rewriter::Instance` options
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            ## 0.44.0 (2021-07-19)
         | 
| 4 17 |  | 
| 5 18 | 
             
            * Return rewrtier after executing snippet
         | 
| 6 19 | 
             
            * `left_value` and `right_value` support `or_asgn` node
         | 
| 7 20 | 
             
            * `child_node_range` supports send `parentheses`
         | 
| 8 21 |  | 
| 9 | 
            -
             | 
| 22 | 
            +
            ## 0.42.0 (2021-07-11)
         | 
| 10 23 |  | 
| 11 24 | 
             
            * Match string with quote
         | 
| 12 25 | 
             
            * `match_value?` returns true if actual and expected are the same
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            # Synvert::Core
         | 
| 2 2 |  | 
| 3 | 
            -
             | 
| 3 | 
            +
            
         | 
| 4 4 | 
             
            [](https://coveralls.io/r/xinminlabs/synvert-core)
         | 
| 5 5 | 
             
            [](http://badge.fury.io/rb/synvert-core)
         | 
| 6 6 |  | 
| @@ -365,8 +365,6 @@ module Parser::AST | |
| 365 365 | 
             
                  when %i[send parentheses]
         | 
| 366 366 | 
             
                    if loc.begin && loc.end
         | 
| 367 367 | 
             
                      Parser::Source::Range.new('(string)', loc.begin.begin_pos, loc.end.end_pos)
         | 
| 368 | 
            -
                    else
         | 
| 369 | 
            -
                      nil
         | 
| 370 368 | 
             
                    end
         | 
| 371 369 | 
             
                  else
         | 
| 372 370 | 
             
                    if respond_to?(child_name)
         | 
| @@ -506,15 +504,14 @@ module Parser::AST | |
| 506 504 | 
             
                  case expected
         | 
| 507 505 | 
             
                  when Symbol
         | 
| 508 506 | 
             
                    if actual.is_a?(Parser::AST::Node)
         | 
| 509 | 
            -
                      actual. | 
| 507 | 
            +
                      actual.to_value == expected
         | 
| 510 508 | 
             
                    else
         | 
| 511 509 | 
             
                      actual.to_sym == expected
         | 
| 512 510 | 
             
                    end
         | 
| 513 511 | 
             
                  when String
         | 
| 514 512 | 
             
                    if actual.is_a?(Parser::AST::Node)
         | 
| 515 | 
            -
                       | 
| 516 | 
            -
             | 
| 517 | 
            -
                        actual.to_source[1...-1] == expected
         | 
| 513 | 
            +
                      actual.to_source == expected || actual.to_value == expected ||
         | 
| 514 | 
            +
                        actual.to_source == unwrap_quote(expected) || actual.to_value == unwrap_quote(expected)
         | 
| 518 515 | 
             
                    else
         | 
| 519 516 | 
             
                      actual.to_s == expected || wrap_quote(actual.to_s) == expected
         | 
| 520 517 | 
             
                    end
         | 
| @@ -593,5 +590,13 @@ module Parser::AST | |
| 593 590 | 
             
                    "'#{string}'"
         | 
| 594 591 | 
             
                  end
         | 
| 595 592 | 
             
                end
         | 
| 593 | 
            +
             | 
| 594 | 
            +
                def unwrap_quote(string)
         | 
| 595 | 
            +
                  if (string[0] == '"' && string[-1] == '"') || (string[0] == "'" && string[-1] == "'")
         | 
| 596 | 
            +
                    string[1...-1]
         | 
| 597 | 
            +
                  else
         | 
| 598 | 
            +
                    string
         | 
| 599 | 
            +
                  end
         | 
| 600 | 
            +
                end
         | 
| 596 601 | 
             
              end
         | 
| 597 602 | 
             
            end
         | 
| @@ -245,13 +245,12 @@ module Synvert::Core | |
| 245 245 | 
             
                # It creates a [Synvert::Core::Rewriter::Instance] to rewrite code.
         | 
| 246 246 | 
             
                #
         | 
| 247 247 | 
             
                # @param file_pattern [String] pattern to find files, e.g. spec/**/*_spec.rb
         | 
| 248 | 
            -
                # @param options [Hash] instance options.
         | 
| 249 248 | 
             
                # @param block [Block] the block to rewrite code in the matching files.
         | 
| 250 | 
            -
                def within_files(file_pattern,  | 
| 249 | 
            +
                def within_files(file_pattern, &block)
         | 
| 251 250 | 
             
                  return if @sandbox
         | 
| 252 251 |  | 
| 253 252 | 
             
                  if (!@ruby_version || @ruby_version.match?) && (!@gem_spec || @gem_spec.match?)
         | 
| 254 | 
            -
                    Rewriter::Instance.new(self, file_pattern,  | 
| 253 | 
            +
                    Rewriter::Instance.new(self, file_pattern, &block).process
         | 
| 255 254 | 
             
                  end
         | 
| 256 255 | 
             
                end
         | 
| 257 256 |  | 
| @@ -12,14 +12,14 @@ module Synvert::Core | |
| 12 12 | 
             
                #
         | 
| 13 13 | 
             
                # @return [Integer] begin position.
         | 
| 14 14 | 
             
                def begin_pos
         | 
| 15 | 
            -
                  @selectors.map { |selector| @node.child_node_range(selector) | 
| 15 | 
            +
                  @selectors.map { |selector| @node.child_node_range(selector) }.compact.map(&:begin_pos).min
         | 
| 16 16 | 
             
                end
         | 
| 17 17 |  | 
| 18 18 | 
             
                # End position of code to replace.
         | 
| 19 19 | 
             
                #
         | 
| 20 20 | 
             
                # @return [Integer] end position.
         | 
| 21 21 | 
             
                def end_pos
         | 
| 22 | 
            -
                  @selectors.map { |selector| @node.child_node_range(selector) | 
| 22 | 
            +
                  @selectors.map { |selector| @node.child_node_range(selector) }.compact.map(&:end_pos).max
         | 
| 23 23 | 
             
                end
         | 
| 24 24 |  | 
| 25 25 | 
             
                # The rewritten code, always empty string.
         | 
| @@ -64,20 +64,16 @@ module Synvert::Core | |
| 64 64 | 
             
                #   @return current filename
         | 
| 65 65 | 
             
                attr_accessor :current_node, :current_file
         | 
| 66 66 |  | 
| 67 | 
            -
                DEFAULT_OPTIONS = { sort_by: 'begin_pos' }.freeze
         | 
| 68 | 
            -
             | 
| 69 67 | 
             
                # Initialize an instance.
         | 
| 70 68 | 
             
                #
         | 
| 71 69 | 
             
                # @param rewriter [Synvert::Core::Rewriter]
         | 
| 72 70 | 
             
                # @param file_pattern [String] pattern to find files, e.g. spec/**/*_spec.rb
         | 
| 73 | 
            -
                # @param options [Hash] instance options, it includes :sort_by.
         | 
| 74 71 | 
             
                # @param block [Block] block code to find nodes, match conditions and rewrite code.
         | 
| 75 72 | 
             
                # @return [Synvert::Core::Rewriter::Instance]
         | 
| 76 | 
            -
                def initialize(rewriter, file_pattern,  | 
| 73 | 
            +
                def initialize(rewriter, file_pattern, &block)
         | 
| 77 74 | 
             
                  @rewriter = rewriter
         | 
| 78 75 | 
             
                  @actions = []
         | 
| 79 76 | 
             
                  @file_pattern = file_pattern
         | 
| 80 | 
            -
                  @options = DEFAULT_OPTIONS.merge(options)
         | 
| 81 77 | 
             
                  @block = block
         | 
| 82 78 | 
             
                  rewriter.helpers.each { |helper| singleton_class.send(:define_method, helper[:name], &helper[:block]) }
         | 
| 83 79 | 
             
                end
         | 
| @@ -107,7 +103,7 @@ module Synvert::Core | |
| 107 103 | 
             
                      end
         | 
| 108 104 |  | 
| 109 105 | 
             
                      if @actions.length > 0
         | 
| 110 | 
            -
                        @actions.sort_by! { |action| action. | 
| 106 | 
            +
                        @actions.sort_by! { |action| [action.begin_pos, action.end_pos] }
         | 
| 111 107 | 
             
                        conflict_actions = get_conflict_actions
         | 
| 112 108 | 
             
                        @actions.reverse_each do |action|
         | 
| 113 109 | 
             
                          source[action.begin_pos...action.end_pos] = action.rewritten_code
         | 
    
        data/lib/synvert/core/version.rb
    CHANGED
    
    
| @@ -4,19 +4,18 @@ require 'spec_helper' | |
| 4 4 |  | 
| 5 5 | 
             
            module Synvert::Core
         | 
| 6 6 | 
             
              describe Rewriter::GemSpec do
         | 
| 7 | 
            -
                let(:gemfile_lock_content) {
         | 
| 8 | 
            -
                   | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
                 | 
| 18 | 
            -
                '
         | 
| 19 | 
            -
                }
         | 
| 7 | 
            +
                let(:gemfile_lock_content) { <<~EOS }
         | 
| 8 | 
            +
                  GEM
         | 
| 9 | 
            +
                    remote: https://rubygems.org/
         | 
| 10 | 
            +
                    specs:
         | 
| 11 | 
            +
                      ast (1.1.0)
         | 
| 12 | 
            +
                      parser (2.1.7)
         | 
| 13 | 
            +
                        ast (~> 1.1)
         | 
| 14 | 
            +
                        slop (~> 3.4, >= 3.4.5)
         | 
| 15 | 
            +
                      rake (10.1.1)
         | 
| 16 | 
            +
                      slop (3.4.7)
         | 
| 17 | 
            +
                EOS
         | 
| 18 | 
            +
                before { allow(File).to receive(:exist?).with(File.join(ENV['HOME'], '.gem/specs')).and_return(false) }
         | 
| 20 19 |  | 
| 21 20 | 
             
                it 'returns true if version in Gemfile.lock is greater than definition' do
         | 
| 22 21 | 
             
                  expect(File).to receive(:exist?).with('./Gemfile.lock').and_return(true)
         | 
    
        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.45.2
         | 
| 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-24 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activesupport
         | 
| @@ -129,9 +129,9 @@ executables: [] | |
| 129 129 | 
             
            extensions: []
         | 
| 130 130 | 
             
            extra_rdoc_files: []
         | 
| 131 131 | 
             
            files:
         | 
| 132 | 
            +
            - ".github/workflows/main.yml"
         | 
| 132 133 | 
             
            - ".gitignore"
         | 
| 133 134 | 
             
            - ".rspec"
         | 
| 134 | 
            -
            - ".travis.yml"
         | 
| 135 135 | 
             
            - CHANGELOG.md
         | 
| 136 136 | 
             
            - Gemfile
         | 
| 137 137 | 
             
            - Guardfile
         |