Merge pull request #319 from crystal-ameba/Sija/fix-unused-argument-with-anonymous-block-arg

This commit is contained in:
Sijawusz Pur Rahnama 2022-12-12 19:53:18 +01:00 committed by GitHub
commit 4b1378aa33
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 2 deletions

View file

@ -132,6 +132,15 @@ module Ameba::Rule::Lint
subject.catch(s).should_not be_valid
end
it "doesn't report if it's an anonymous block" do
s = Source.new %(
def method(&)
yield 1
end
)
subject.catch(s).should be_valid
end
it "doesn't report if variable is referenced implicitly" do
s = Source.new %(
class Bar < Foo

View file

@ -31,7 +31,12 @@ module Ameba::AST
def initialize(@node, @variable)
end
# Returns `true` if the name starts with '_', `false` if not.
# Returns `true` if the `name` is empty, `false` otherwise.
def anonymous?
name.blank?
end
# Returns `true` if the `name` starts with '_', `false` otherwise.
def ignored?
name.starts_with? '_'
end

View file

@ -55,7 +55,8 @@ module Ameba::Rule::Lint
private def find_unused_arguments(source, scope)
scope.arguments.each do |argument|
next if argument.ignored? || scope.references?(argument.variable)
next if argument.anonymous? || argument.ignored?
next if scope.references?(argument.variable)
name_suggestion = scope.node.is_a?(Crystal::Block) ? '_' : "_#{argument.name}"
issue_for argument.node, MSG % {argument.name, name_suggestion}