mirror of
https://gitea.invidious.io/iv-org/shard-ameba.git
synced 2024-08-15 00:53:29 +00:00
Merge pull request #426 from crystal-ameba/fix-issue-409
Do not report expanded arguments in `ShadowingOuterLocalVar` rule
This commit is contained in:
commit
a88033c8ce
2 changed files with 31 additions and 4 deletions
|
@ -31,6 +31,30 @@ module Ameba::Rule::Lint
|
|||
CRYSTAL
|
||||
end
|
||||
|
||||
pending "reports if there is a shadowing in an unpacked variable in a block" do
|
||||
expect_issue subject, <<-CRYSTAL
|
||||
def some_method
|
||||
foo = 1
|
||||
|
||||
[{3}].each do |(foo)|
|
||||
# ^ error: Shadowing outer local variable `foo`
|
||||
end
|
||||
end
|
||||
CRYSTAL
|
||||
end
|
||||
|
||||
pending "reports if there is a shadowing in an unpacked variable in a block (2)" do
|
||||
expect_issue subject, <<-CRYSTAL
|
||||
def some_method
|
||||
foo = 1
|
||||
|
||||
[{[3]}].each do |((foo))|
|
||||
# ^ error: Shadowing outer local variable `foo`
|
||||
end
|
||||
end
|
||||
CRYSTAL
|
||||
end
|
||||
|
||||
it "does not report outer vars declared below shadowed block" do
|
||||
expect_no_issues subject, <<-CRYSTAL
|
||||
methods = klass.methods.select { |m| m.annotation(MyAnn) }
|
||||
|
|
|
@ -53,13 +53,16 @@ module Ameba::Rule::Lint
|
|||
return unless outer_scope = scope.outer_scope
|
||||
|
||||
scope.arguments.reject(&.ignored?).each do |arg|
|
||||
variable = outer_scope.find_variable(arg.name)
|
||||
# TODO: handle unpacked variables from `Block#unpacks`
|
||||
next unless name = arg.name.presence
|
||||
|
||||
variable = outer_scope.find_variable(name)
|
||||
|
||||
next if variable.nil? || !variable.declared_before?(arg)
|
||||
next if outer_scope.assigns_ivar?(arg.name)
|
||||
next if outer_scope.assigns_type_dec?(arg.name)
|
||||
next if outer_scope.assigns_ivar?(name)
|
||||
next if outer_scope.assigns_type_dec?(name)
|
||||
|
||||
issue_for arg.node, MSG % arg.name
|
||||
issue_for arg.node, MSG % name
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue