Skip to content

Commit

Permalink
Merge pull request #426 from crystal-ameba/fix-issue-409
Browse files Browse the repository at this point in the history
Do not report expanded arguments in `ShadowingOuterLocalVar` rule
  • Loading branch information
Sija committed Nov 17, 2023
2 parents 5aac63e + 30e3816 commit a88033c
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 4 deletions.
24 changes: 24 additions & 0 deletions spec/ameba/rule/lint/shadowing_outer_local_var_spec.cr
Original file line number Diff line number Diff line change
Expand Up @@ -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) }
Expand Down
11 changes: 7 additions & 4 deletions src/ameba/rule/lint/shadowing_outer_local_var.cr
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit a88033c

Please sign in to comment.