Parallel static analysis by default #10000
Merged
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.
Modern PCs have multi-core. RuboCop has
--parallel
option, but it is not used by default. This means that there is extra core resources for static analysis because multi-core is not being used effectively.This PR will be parallel processing by default, so RuboCop will run faster in proportion to number of cores. Options that can be parallel processing, such as
--only
,--except
, and others have thesame default behavior.
However, there are options that cannot be parallel processing, such as auto-correction and others, so they are serial processing as before.
--parallel
can be a hidden option for some users. This change is expected to reduce user's wait time for running RuboCop.Below is an example on my development PC.
Before:
After:
If user's PC has a lot of cores, memory and RuboCop targets a lot of files to inspect, it will be effective.
One concern is that parallel processing uses more memory. For example, Ruby's MJIT is off by default as an example of concerning about memory consumption in a low memory production runtime (e.g. Heroku's minimum Dyno).
However, RuboCop is a development tool, I assume that it will be fine in most cases.
If user want to use it in a low memory production runtime, user can specify
--no-parallel
.Note: JRuby and Windows are not supported based on #4537.
Before submitting the PR make sure the following are checked:
[Fix #issue-number]
(if the related issue exists).master
(if not - rebase it).bundle exec rake default
. It executes all tests and runs RuboCop on its own code.{change_type}_{change_description}.md
if the new code introduces user-observable changes. See changelog entry format for details.