mirror of
				https://gitea.invidious.io/iv-org/shard-ameba.git
				synced 2024-08-15 00:53:29 +00:00 
			
		
		
		
	Do not report type declarations within generic records
This commit is contained in:
		
							parent
							
								
									b56d34715d
								
							
						
					
					
						commit
						f2677d68f6
					
				
					 2 changed files with 18 additions and 4 deletions
				
			
		|  | @ -394,6 +394,12 @@ module Ameba::Rule::Lint | ||||||
|           CRYSTAL |           CRYSTAL | ||||||
|       end |       end | ||||||
| 
 | 
 | ||||||
|  |       it "doesn't report if this is a record declaration (generics)" do | ||||||
|  |         expect_no_issues subject, <<-CRYSTAL | ||||||
|  |           record Foo(T), foo : T | ||||||
|  |           CRYSTAL | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|       it "doesn't report if this is an accessor declaration" do |       it "doesn't report if this is an accessor declaration" do | ||||||
|         accessor_macros = %w[setter class_setter] |         accessor_macros = %w[setter class_setter] | ||||||
|         %w[getter class_getter property class_property].each do |name| |         %w[getter class_getter property class_property].each do |name| | ||||||
|  |  | ||||||
|  | @ -173,9 +173,10 @@ module Ameba::AST | ||||||
|       scope = @current_scope |       scope = @current_scope | ||||||
| 
 | 
 | ||||||
|       case |       case | ||||||
|       when scope.top_level? && record_macro?(node)         then return false |       when (scope.top_level? || scope.type_definition?) && record_macro?(node) | ||||||
|       when scope.type_definition? && record_macro?(node)   then return false |         return false | ||||||
|       when scope.type_definition? && accessor_macro?(node) then return false |       when scope.type_definition? && accessor_macro?(node) | ||||||
|  |         return false | ||||||
|       when scope.def? && special_node?(node) |       when scope.def? && special_node?(node) | ||||||
|         scope.arguments.each do |arg| |         scope.arguments.each do |arg| | ||||||
|           ref = arg.variable.reference(scope) |           ref = arg.variable.reference(scope) | ||||||
|  | @ -194,7 +195,14 @@ module Ameba::AST | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     private def record_macro?(node) |     private def record_macro?(node) | ||||||
|       node.name == "record" && node.args.first?.is_a?(Crystal::Path) |       return false unless node.name == "record" | ||||||
|  | 
 | ||||||
|  |       case node.args.first? | ||||||
|  |       when Crystal::Path, Crystal::Generic | ||||||
|  |         true | ||||||
|  |       else | ||||||
|  |         false | ||||||
|  |       end | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     private def skip?(node) |     private def skip?(node) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue