mirror of
				https://gitea.invidious.io/iv-org/shard-ameba.git
				synced 2024-08-15 00:53:29 +00:00 
			
		
		
		
	Properly report literals (#96)
This commit is contained in:
		
							parent
							
								
									43bb29d3fd
								
							
						
					
					
						commit
						3a71b86193
					
				
					 2 changed files with 139 additions and 11 deletions
				
			
		| 
						 | 
				
			
			@ -44,16 +44,122 @@ module Ameba::Rule::Lint
 | 
			
		|||
      subject.catch(s).should_not be_valid
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "fails if there is a predicate in case conditional" do
 | 
			
		||||
      s = Source.new %(
 | 
			
		||||
        case [1, 2, 3]
 | 
			
		||||
        when :array
 | 
			
		||||
          :ok
 | 
			
		||||
        when :not_array
 | 
			
		||||
          :also_ok
 | 
			
		||||
        end
 | 
			
		||||
      )
 | 
			
		||||
      subject.catch(s).should_not be_valid
 | 
			
		||||
    describe "range" do
 | 
			
		||||
      it "reports range with literals" do
 | 
			
		||||
        s = Source.new %(
 | 
			
		||||
          case 1..2
 | 
			
		||||
          end
 | 
			
		||||
        )
 | 
			
		||||
        subject.catch(s).should_not be_valid
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      it "doesn't report range with non-literals" do
 | 
			
		||||
        s = Source.new %(
 | 
			
		||||
          case (1..a)
 | 
			
		||||
          end
 | 
			
		||||
        )
 | 
			
		||||
        subject.catch(s).should be_valid
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    describe "array" do
 | 
			
		||||
      it "reports array with literals" do
 | 
			
		||||
        s = Source.new %(
 | 
			
		||||
          case [1, 2, 3]
 | 
			
		||||
          when :array
 | 
			
		||||
            :ok
 | 
			
		||||
          when :not_array
 | 
			
		||||
            :also_ok
 | 
			
		||||
          end
 | 
			
		||||
        )
 | 
			
		||||
        subject.catch(s).should_not be_valid
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      it "doesn't report array with non-literals" do
 | 
			
		||||
        s = Source.new %(
 | 
			
		||||
          a, b = 1, 2
 | 
			
		||||
          case [1, 2, a]
 | 
			
		||||
          when :array
 | 
			
		||||
            :ok
 | 
			
		||||
          when :not_array
 | 
			
		||||
            :also_ok
 | 
			
		||||
          end
 | 
			
		||||
        )
 | 
			
		||||
        subject.catch(s).should be_valid
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    describe "hash" do
 | 
			
		||||
      it "reports hash with literals" do
 | 
			
		||||
        s = Source.new %(
 | 
			
		||||
          case { "name" => 1, 33 => 'b' }
 | 
			
		||||
          when :hash
 | 
			
		||||
            :ok
 | 
			
		||||
          end
 | 
			
		||||
        )
 | 
			
		||||
        subject.catch(s).should_not be_valid
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      it "doesn't report hash with non-literals in keys" do
 | 
			
		||||
        s = Source.new %(
 | 
			
		||||
          case { a => 1, 33 => 'b' }
 | 
			
		||||
          when :hash
 | 
			
		||||
            :ok
 | 
			
		||||
          end
 | 
			
		||||
        )
 | 
			
		||||
        subject.catch(s).should be_valid
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      it "doesn't report hash with non-literals in values" do
 | 
			
		||||
        s = Source.new %(
 | 
			
		||||
          case { "name" => a, 33 => 'b' }
 | 
			
		||||
          when :hash
 | 
			
		||||
            :ok
 | 
			
		||||
          end
 | 
			
		||||
        )
 | 
			
		||||
        subject.catch(s).should be_valid
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    describe "tuple" do
 | 
			
		||||
      it "reports tuple with literals" do
 | 
			
		||||
        s = Source.new %(
 | 
			
		||||
          case {1, false}
 | 
			
		||||
          when {1, _}
 | 
			
		||||
            :ok
 | 
			
		||||
          end
 | 
			
		||||
        )
 | 
			
		||||
        subject.catch(s).should_not be_valid
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      it "doesn't report tuple with non-literals" do
 | 
			
		||||
        s = Source.new %(
 | 
			
		||||
          a, b = 1, 2
 | 
			
		||||
          case {1, b}
 | 
			
		||||
          when {1, 2}
 | 
			
		||||
            :ok
 | 
			
		||||
          end
 | 
			
		||||
        )
 | 
			
		||||
        subject.catch(s).should be_valid
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    describe "named tuple" do
 | 
			
		||||
      it "reports named tuple with literals" do
 | 
			
		||||
        s = Source.new %(
 | 
			
		||||
          case { name: 1, foo: :bar}
 | 
			
		||||
          end
 | 
			
		||||
        )
 | 
			
		||||
        subject.catch(s).should_not be_valid
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      it "doesn't report named tuple with non-literals" do
 | 
			
		||||
        s = Source.new %(
 | 
			
		||||
          case { name: a, foo: :bar}
 | 
			
		||||
          end
 | 
			
		||||
        )
 | 
			
		||||
        subject.catch(s).should be_valid
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "reports rule, pos and message" do
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue