Add new Lint/TrailingCommaInAttributeDeclaration cop #8549
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.
Using a trailing comma in an attribute declaration, such as
attr_reader
will lead to the next method definition being shadowed by a (probably no-op) reader method. This happens becausedef
returns a symbol, which will be interpreted as the last argument to the attribute declaration.This led to a particularly hard to track down bug for one of my colleagues.
Leaving a trailing comma without any method definition following is a syntax error:
but with a method definition following, Ruby gets by, with unexpected results:
The generated AST shows what is happening:
As we can see, the whole method definition has become part of the attribute declaration.
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.