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

Fix inherit_mode for third-party gems #1192

Merged
merged 1 commit into from Oct 5, 2021

Commits on Oct 5, 2021

  1. Fix inherit_mode for third-party gems

    fixes #1126
    
    See palkan/action_policy#103 (comment)
    
    If a third-party gem, e.g. `action_policy`, defines their
    `config/default.yml` and supplements to the default RSpec DSL that we
    provide in our `config/default.yml`, `rubocop`'s behaviour is to
    actually override the configuration, as `inherit_mode` is `override` for
    lists by default.
    
    RuboCop has recently [fixed the problem with ignored
    `inherit_mode`](rubocop/rubocop#9952) and we've
    [bumped to use `rubocop` version that includes the
    fix](#1181), but we haven't
    adjusted our `config/default.yml` to merge by default.
    
    This is causing both user project RSpec DSL configuration and
    third-party gem RSpec DSL configuration to override our default,
    rendering our cops blind.
    
    ### Example
    
    A new project
    
    ```ruby
    # Gemfile
    source 'https://rubygems.org'
    
    gem 'action_policy'
    gem 'rubocop-rspec'
    ```
    
    ```yml
    # .rubocop.yml
    require:
      - rubocop-rspec
    
    inherit_gem:
      action_policy: config/rubocop-rspec.yml
    ```
    
    ```ruby
    # spec/a_spec.rb
    RSpec.describe 'A' do
      it_behaves_like 'a'
      it_behaves_like 'a'
    
      describe_rule :show? do
        succeed 'when post is published'
        succeed 'when post is published'
      end
    end
    ```
    
    Ideally, both the duplicated `it_behaves_like` and `succeed` should be
    detected. However, `action_policy`'s `Includes/Examples` setting
    overrides ours, and `it_behaves_like` disappears from this list. As a
    result, `rubocop` only detects the duplication of `succeed`, but not of
    `it_behaves_like`.
    pirj committed Oct 5, 2021
    Configuration menu
    Copy the full SHA
    f663fdc View commit details
    Browse the repository at this point in the history