Remove memoization in Config#for_all_cops #3726
Closed
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.
Sometimes a
Config
instance has its internal hash mutated, and changes onAllCops
don't get reflected in#for_all_cops
due to its memoization.This problem doesn't happen when
AllCops
is set initially, but whenAllCops
is set afterwards@for_all_cops
already got instantiated with an empty hash.This issue is noticeable in
ConfigLoaderResolver#resolve_inheritance
, which mutates the config to merge the values coming from the parent configuration. When the parent config definesAllCops
the values don't get used in places that rely on#for_all_cops
.I checked the git history and I didn't find any reason to have had that method memoized. I also run this change in a fairly large codebase and I didn't notice any noticeable performance decrease.