Support IgnoredMethod configuration in method complexity cops #7823
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.
Rationale:
At work we make extensive use of functional objects to encapsulate business transactions. These objects will have a single public method
#call
, which stacks all the edge-cases as guard clauses towards the top.It usually looks something like:
We find this makes it very easy to understand what's going on, business transactions become composable and easy to test.
This almost always leads to
Metrics
cops violations for#call
. However, the method is perfectly fine. With this layout, more complex business transactions aren't necessarily harder to grok than simpler ones.Others seem to report the same problem.
What is this change?
This adds support for
IgnoredMethods
toMetrics/AbcSize
,Metrics/CyclomaticComplexity
, andMetrics/PerceivedComplexity
.Side note:
We should probably standardize the configuration option name before releasing 1.0. I used
IgnoredMethods
because we have an existing mixin for it, but I see other cops roll their own implementations and names.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 RuboCop for itself, and generates the documentation.