Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add unset_nil option to ConfigLoader.merge_with_default #7048

Merged

Commits on May 15, 2019

  1. Add unset_nil option to ConfigLoader.merge_with_default

    ### Summary
    
    Follow up rubocop#6942.
    
    `unset_nil` was introduced to RuboCop core at rubocop#6942.
    
    This causes the following warning to be displayed for
    `TargetRailsVersion` and `Database` where `null` (or `~`) is
    specified in the RuboCop Rails `config/default.yml` configuration.
    
    - https://github.com/rubocop-hq/rubocop-rails/blob/5180fa2c25cef467eececd9c80739f7cad6adbbf/config/default.yml#L11
    - https://github.com/rubocop-hq/rubocop-rails/blob/5180fa2c25cef467eececd9c80739f7cad6adbbf/config/default.yml#L89
    
    ```console
    % cd path/to/rubocop-rails
    % bundle exec rake
    
    (snip)
    
    Warning: AllCops does not support TargetRailsVersion parameter.
    
    Supported parameters are:
    
      - RubyInterpreters
      - Include
      - Exclude
      - DefaultFormatter
      - DisplayCopNames
      - DisplayStyleGuide
      - StyleGuideBaseURL
      - ExtraDetails
      - StyleGuideCopsOnly
      - EnabledByDefault
      - DisabledByDefault
      - UseCache
      - MaxFilesInCache
      - CacheRootDirectory
      - AllowSymlinksInCacheRootDirectory
      - TargetRubyVersion
    
    Warning: Rails/BulkChangeTable does not support Database parameter.
    
    Supported parameters are:
    
      - Enabled
      - SupportedDatabases
      - Include
    ```
    
    This PR aims to prevent this issue by the following work around to RuboCop Rails.
    I will open a PR to RuboCop Rails if this PR is accepted.
    
    ```diff
    diff --git a/lib/rubocop/rails/inject.rb b/lib/rubocop/rails/inject.rb
    index abb715ea7..8d1ffa371 100644
    --- a/lib/rubocop/rails/inject.rb
    +++ b/lib/rubocop/rails/inject.rb
    @@ -10,7 +10,7 @@ module RuboCop
             hash = ConfigLoader.send(:load_yaml_configuration, path)
             config = Config.new(hash, path)
             puts "configuration from #{path}" if ConfigLoader.debug?
    -        config = ConfigLoader.merge_with_default(config, path)
    +        config = ConfigLoader.merge_with_default(config, path, unset_nil: false)
             ConfigLoader.instance_variable_set(:@default_configuration, config)
           end
         end
    ```
    
    ### Other Information
    
    The following example app code reproduces this issue using
    RuboCop Rails master code.
    
    ```ruby
    # Gemfile
    source "https://rubygems.org"
    
    git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
    
    gem 'rubocop', github: 'rubocop-hq/rubocop'
    gem 'rubocop-rails', github: 'rubocop-hq/rubocop-rails'
    ```
    
    ```ruby
    # app/models/user.rb
    class User < ActiveRecord::Base
    end
    ```
    
    ```yaml
    # .rubocop.yml
    AllCops:
      TargetRailsVersion: 5.2
    ```
    
    ```
    % bunlde install
    % bundle exec rubocop --only Rails/ApplicationRecord --require rubocop-rails
    Warning: AllCops does not support TargetRailsVersion parameter.
    
    Supported parameters are:
    
      - RubyInterpreters
      - Include
      - Exclude
      - DefaultFormatter
      - DisplayCopNames
      - DisplayStyleGuide
      - StyleGuideBaseURL
      - ExtraDetails
      - StyleGuideCopsOnly
      - EnabledByDefault
      - DisabledByDefault
      - UseCache
      - MaxFilesInCache
      - CacheRootDirectory
      - AllowSymlinksInCacheRootDirectory
      - TargetRubyVersion
    
    Inspecting 2 files
    .C
    
    Offenses:
    
    app/models/user.rb:1:14: C: Rails/ApplicationRecord: Models should
    subclass ApplicationRecord.
    class User < ActiveRecord::Base
                 ^^^^^^^^^^^^^^^^^^
    
    2 files inspected, 1 offense detected
    ```
    
    This means that an unexpected warning is displayed during a migration
    period until RuboCop Rails cops is removed from RuboCop core.
    koic committed May 15, 2019
    Configuration menu
    Copy the full SHA
    07103f2 View commit details
    Browse the repository at this point in the history