Skip to content

Commit 34e77c6

Browse files
koicbbatsov
authored andcommitted
Tweak offense message for Lint/Void
This commit tweaks offense message for `Lint/Void` when registering offenses of void constants.
1 parent 7bedbf4 commit 34e77c6

File tree

2 files changed

+41
-9
lines changed

2 files changed

+41
-9
lines changed

lib/rubocop/cop/lint/void.rb

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ class Void < Base
5757

5858
OP_MSG = 'Operator `%<op>s` used in void context.'
5959
VAR_MSG = 'Variable `%<var>s` used in void context.'
60+
CONST_MSG = 'Constant `%<var>s` used in void context.'
6061
LIT_MSG = 'Literal `%<lit>s` used in void context.'
6162
SELF_MSG = '`self` used in void context.'
6263
EXPRESSION_MSG = '`%<expression>s` used in void context.'
@@ -127,15 +128,18 @@ def check_void_op(node, &block)
127128
def check_var(node)
128129
return unless node.variable? || node.const_type?
129130

130-
if node.const_type? && node.special_keyword?
131-
add_offense(node, message: format(VAR_MSG, var: node.source)) do |corrector|
132-
autocorrect_void_expression(corrector, node)
133-
end
131+
if node.const_type?
132+
template = node.special_keyword? ? VAR_MSG : CONST_MSG
133+
134+
offense_range = node
135+
message = format(template, var: node.source)
134136
else
135-
add_offense(node.loc.name,
136-
message: format(VAR_MSG, var: node.loc.name.source)) do |corrector|
137-
autocorrect_void_expression(corrector, node)
138-
end
137+
offense_range = node.loc.name
138+
message = format(VAR_MSG, var: node.loc.name.source)
139+
end
140+
141+
add_offense(offense_range, message: message) do |corrector|
142+
autocorrect_void_expression(corrector, node)
139143
end
140144
end
141145

spec/rubocop/cop/lint/void_spec.rb

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@
8585
end
8686
end
8787

88-
%w[var @var @@var VAR $var].each do |var|
88+
%w[var @var @@var $var].each do |var|
8989
it "registers an offense for void var #{var} if not on last line" do
9090
expect_offense(<<~RUBY, var: var)
9191
%{var} = 5
@@ -101,6 +101,20 @@
101101
end
102102
end
103103

104+
it 'registers an offense for void constant `CONST` if not on last line' do
105+
expect_offense(<<~RUBY)
106+
CONST = 5
107+
CONST
108+
^^^^^ Constant `CONST` used in void context.
109+
top
110+
RUBY
111+
112+
expect_correction(<<~RUBY)
113+
CONST = 5
114+
top
115+
RUBY
116+
end
117+
104118
%w(1 2.0 :test /test/ [1] {}).each do |lit|
105119
it "registers an offense for void lit #{lit} if not on last line" do
106120
expect_offense(<<~RUBY, lit: lit)
@@ -437,6 +451,20 @@ def foo=(rhs)
437451
RUBY
438452
end
439453

454+
it 'registers an offenses for void constant in a `#each` method' do
455+
expect_offense(<<~RUBY)
456+
array.each do |_item|
457+
CONST
458+
^^^^^ Constant `CONST` used in void context.
459+
end
460+
RUBY
461+
462+
expect_correction(<<~RUBY)
463+
array.each do |_item|
464+
end
465+
RUBY
466+
end
467+
440468
it 'handles `#each` block with single expression' do
441469
expect_offense(<<~RUBY)
442470
array.each do |_item|

0 commit comments

Comments
 (0)