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 #6926] Allow nil values to unset config defaults #6942
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
dduugg
changed the title
Use nil values to unset defaults
[Fix #6926] Allow nil values to unset config defaults
Apr 17, 2019
The build seems stuck. Can you rebase on |
dduugg
force-pushed
the
enable-config-unset
branch
3 times, most recently
from
April 17, 2019 12:16
5dfd3b8
to
0697057
Compare
dduugg
force-pushed
the
enable-config-unset
branch
from
April 17, 2019 12:32
0697057
to
27080f6
Compare
@bbatsov thanks for your attention, done! |
koic
added a commit
to koic/rubocop
that referenced
this pull request
May 15, 2019
### 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.
8 tasks
bbatsov
pushed a commit
that referenced
this pull request
May 15, 2019
### Summary Follow up #6942. `unset_nil` was introduced to RuboCop core at #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.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR adds the ability to unset default configuration values by using an explicit
nil
value (or~
, in YAML). This is consistent with the documented behavior of hash inheritance.Care must be taken when merging hashes that this only happens when merging into the default config hash, which is done by adding an opt to
ConfigLoaderResolver#merge_with_default
that is only enabled when calling fromConfigLoaderResolver#merge_with_default
. (Otherwise, merging a config hashB
with an explicitnil
intoA
would leave an unset value for the config. When this merged hash is merged into the default config, the default value would be unchanged.)Resolves #6926
Before submitting the PR make sure the following are checked:
[Fix #issue-number]
(if the related issue exists).master
(if not - rebase it).and description in grammatically correct, complete sentences.
bundle exec rake default
. It executes all tests and RuboCop for itself, and generates the documentation.