-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement some parameter name check cop #3666
Comments
Are we going to use the same checks as Reek does?
I'm not sure about "names beginning with an underscore" because it's a common pattern for naming unused vars when overriding methods (kinda Erlang style). And what about this And I think, we should have a flexible configuration here, smth like: Style/UncommunicativeName:
# Do not report offenses on the provided names
IgnoreNames: [] |
I wouldn't check about this.
Might make sense to have 2 cops for method params and block param names. At any rate the cop should have a rather flexible configuration. |
And what about variable names? Yet another cop? |
I've been thinking about this and would like to tackle it. Here is my proposal: This issue can represent the addition of 2 Cops.
After those, we can discuss the possibility of other To accommodate meaningful single char names, configuration could be added to whitelist particular letters. OR we can just allow them all for block params & never for method. I'd love to go as far as including a little strong typing here, by checking that the class of a single char var match a value passed to configuration. But we can't and shouldn't do that in RuboCop. Is there any appropriate place in Rubocop to allow code owners to specify what Class those single chars should represent but not enforce it. e.x. { h: [Hash], i: [Integer, Numeric], c: [CustomClass], etc. }? I think this is just wishful thinking on my part, but wanted to bring up the possibility. |
I prefer this way. It's very common to have single char (or less meaningful) block params names, especially for keys/values ( Methods are likely to have (and, IMO, should have) more descriptive arguments names though.
It can be configurable in Rubocop, but I think in most cases there gonna be the whole alphabet) Using the first char of a class name is popular. Of course, having good list of defaults ( |
So to recap:
And disable this cop in the |
And I think:
And according to:
What about having a parameter |
Ok. Ready to start crafting this over the next few days. I'm still not sold on passing a predefined list of exceptions to the rule. But I really like the idea of a In this first pass, I'm going to forego |
Follow up of rubocop#5410. This PR fixes the following error on Travis CI. ```console % bundle exec rspec ./spec/project_spec.rb Run options: include {:focus=>true} All examples were filtered out; ignoring {:focus=>true} Randomized with seed 45488 ..............F.F Failures: 1) RuboCop Project changelog entry body ends with a punctuation Failure/Error: expect(bodies).to all(match(/[\.\!]$/)) expected ["Add new `` cop.", "Add new `` cop.", "Add new `` cop.", "Add new `` cop.", "Add new `` cop.", "Add ...nclosed in braces are not noticed.", "Received malformed format string ArgumentError from rubocop."] to all match /[\.\!]$/ object at index 18 failed to match: expected "Fix ``'s false positive with a method call with arguments. ([@pocke][]) " to match /[\.\!]$/ # ./spec/project_spec.rb:174:in `block (5 levels) in <top (required)>' 2) RuboCop Project changelog entry after version 0.14.0 has a link to the contributors at the end Failure/Error: expect(entries).to all(match(/\(\[@\S+\]\[\](?:, \[@\S+\]\[\])*\)$/)) expected ["* [rubocop#3666](rubocop#3666): Add new `Naming/UncommunicativeBlockPara...552): `RaiseArgs` allows exception constructor calls with more than one 1 argument. ([@bbatsov][])"] to all match /\(\[@\S+\]\[\](?:, \[@\S+\]\[\])*\)$/ object at index 18 failed to match: expected "* [rubocop#5393](rubocop#5393): Fix `Rails/Delegate`'s false positive with a method call with arguments. ([@pocke][]) " to match /\(\[@\S+\]\[\](?:, \[@\S+\]\[\])*\)$/ # ./spec/project_spec.rb:123:in `block (5 levels) in <top (required)>' Finished in 1.36 seconds (files took 1.07 seconds to load) 17 examples, 2 failures Failed examples: rspec ./spec/project_spec.rb:173 # RuboCop Project changelog entry body ends with a punctuation rspec ./spec/project_spec.rb:122 # RuboCop Project changelog entry after version 0.14.0 has a link to the contributors at the end ``` https://travis-ci.org/bbatsov/rubocop/jobs/325980721#L1146-L1162
Follow up of #5410. This PR fixes the following error on Travis CI. ```console % bundle exec rspec ./spec/project_spec.rb Run options: include {:focus=>true} All examples were filtered out; ignoring {:focus=>true} Randomized with seed 45488 ..............F.F Failures: 1) RuboCop Project changelog entry body ends with a punctuation Failure/Error: expect(bodies).to all(match(/[\.\!]$/)) expected ["Add new `` cop.", "Add new `` cop.", "Add new `` cop.", "Add new `` cop.", "Add new `` cop.", "Add ...nclosed in braces are not noticed.", "Received malformed format string ArgumentError from rubocop."] to all match /[\.\!]$/ object at index 18 failed to match: expected "Fix ``'s false positive with a method call with arguments. ([@pocke][]) " to match /[\.\!]$/ # ./spec/project_spec.rb:174:in `block (5 levels) in <top (required)>' 2) RuboCop Project changelog entry after version 0.14.0 has a link to the contributors at the end Failure/Error: expect(entries).to all(match(/\(\[@\S+\]\[\](?:, \[@\S+\]\[\])*\)$/)) expected ["* [#3666](#3666): Add new `Naming/UncommunicativeBlockPara...552): `RaiseArgs` allows exception constructor calls with more than one 1 argument. ([@bbatsov][])"] to all match /\(\[@\S+\]\[\](?:, \[@\S+\]\[\])*\)$/ object at index 18 failed to match: expected "* [#5393](#5393): Fix `Rails/Delegate`'s false positive with a method call with arguments. ([@pocke][]) " to match /\(\[@\S+\]\[\](?:, \[@\S+\]\[\])*\)$/ # ./spec/project_spec.rb:123:in `block (5 levels) in <top (required)>' Finished in 1.36 seconds (files took 1.07 seconds to load) 17 examples, 2 failures Failed examples: rspec ./spec/project_spec.rb:173 # RuboCop Project changelog entry body ends with a punctuation rspec ./spec/project_spec.rb:122 # RuboCop Project changelog entry after version 0.14.0 has a link to the contributors at the end ``` https://travis-ci.org/bbatsov/rubocop/jobs/325980721#L1146-L1162
People keep referring to Reek's
Uncommunicative Variable Name
check as one of the big omissions in RuboCop. We didn't include it initially, as it can't be implemented reliably (some short names are pretty meaningful - likex
andy
when dealing with points), but I guess if the users want it we should give it to them.This cop should act on both method and block param names.
The text was updated successfully, but these errors were encountered: