Make offense locations of metrics cops to contain whole a method #5042
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.
Problem
Currently, metrics cops add an offence for a complex method to
def
keyword.For example,
Metrics/AbcSize
However, the "
def
" is not complex, the method body is complex.So I think this cop should add an offence whole the method.
Note: Metrics/MethodLength already adds offences whole the method.
Solution
Make offense locations of metrics cops to contain whole a method.
AbcSize, CyclomaticComplexity and PerceivedComplexity cops are targets of this change.
For example
Note
Our spec helper does not support multi line offences completely. But we have a workaround for multi line offences, we can write an annotation after first line of an offence to test the offence that is for multi-line.
For example:
Before submitting the PR make sure the following are checked:
[Fix #issue-number]
(if the related issue exists).master
(if not - rebase it).rake spec
) are passing.rake internal_investigation
.and description in grammatically correct, complete sentences.
rake generate_cops_documentation
(required only when you've added a new cop or changed the configuration/documentation of an existing cop).