mirror of
				https://gitea.invidious.io/iv-org/shard-ameba.git
				synced 2024-08-15 00:53:29 +00:00 
			
		
		
		
	Do not report expanded arguments in ShadowingOuterLocalVar rule
				
					
				
			This commit is contained in:
		
							parent
							
								
									5aac63ea74
								
							
						
					
					
						commit
						30e3816ed1
					
				
					 2 changed files with 31 additions and 4 deletions
				
			
		|  | @ -31,6 +31,30 @@ module Ameba::Rule::Lint | ||||||
|         CRYSTAL |         CRYSTAL | ||||||
|     end |     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 |     it "does not report outer vars declared below shadowed block" do | ||||||
|       expect_no_issues subject, <<-CRYSTAL |       expect_no_issues subject, <<-CRYSTAL | ||||||
|         methods = klass.methods.select { |m| m.annotation(MyAnn) } |         methods = klass.methods.select { |m| m.annotation(MyAnn) } | ||||||
|  |  | ||||||
|  | @ -53,13 +53,16 @@ module Ameba::Rule::Lint | ||||||
|       return unless outer_scope = scope.outer_scope |       return unless outer_scope = scope.outer_scope | ||||||
| 
 | 
 | ||||||
|       scope.arguments.reject(&.ignored?).each do |arg| |       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 variable.nil? || !variable.declared_before?(arg) | ||||||
|         next if outer_scope.assigns_ivar?(arg.name) |         next if outer_scope.assigns_ivar?(name) | ||||||
|         next if outer_scope.assigns_type_dec?(arg.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 |     end | ||||||
|   end |   end | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue