synvert-core-ruby

logo

AwesomeCode Status for xinminlabs/synvert-core-ruby Main workflow

Synvert core provides a set of DSLs to rewrite ruby code. e.g.

Synvert::Rewriter.new 'factory_bot', 'convert_factory_girl_to_factory_bot' do
  description <<~EOS
    It converts FactoryGirl to FactoryBot

    ```ruby
    require 'factory_girl'
    require 'factory_girl_rails'
    ```

    =>

    ```ruby
    require 'factory_bot'
    require 'factory_bot_rails'
    ```

    ```ruby
    FactoryGirl.create(:user)
    FactoryGirl.build(:user)
    ```

    =>

    ```ruby
    FactoryBot.create(:user)
    FactoryBot.build(:user)
    ```
  EOS

  within_files Synvert::RAILS_TEST_FILES do
    find_node '.const[name=FactoryGirl]' do
      replace_with 'FactoryBot'
    end

    find_node ".send[receiver=nil][message=require][arguments.size=1][arguments.first='factory_girl']" do
      replace :arguments, with: "'factory_bot'"
    end

    with_node type: 'send', receiver: nil, message: 'require', arguments: { size: 1, first: "'factory_girl_rails'" } do
      replace :arguments, with: "'factory_bot_rails'"
    end
  end
end

Want to see more examples, check out synvert-snippets-ruby.

Want to use the CLI, check out synvert-ruby.

DSLs are as follows

Scopes:

Conditions:

Actions:

  • append - append the code to the bottom of current node body
  • prepend - prepend the code to the bottom of current node body
  • insert - insert code
  • insert_after - insert the code next to the current node
  • insert_before - insert the code previous to the current node
  • replace - replace the code of specified child nodes
  • delete - delete the code specified child nodes
  • wrap - wrap the current node with code
  • replace_with - replace the whole code of current node
  • warn - warn message
  • replace_erb_stmt_with_expr - replace erb stmt code to expr code
  • noop - no operation