36 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # typed: strict
 | |
| # frozen_string_literal: true
 | |
| 
 | |
| module RuboCop
 | |
|   module Cop
 | |
|     module Style
 | |
|       # This cop checks that `unless` is not used with multiple conditions.
 | |
|       #
 | |
|       # @api private
 | |
|       class UnlessMultipleConditions < Base
 | |
|         extend T::Sig
 | |
|         extend AutoCorrector
 | |
| 
 | |
|         MSG = "Avoid using `unless` with multiple conditions."
 | |
| 
 | |
|         sig { params(node: RuboCop::AST::IfNode).void }
 | |
|         def on_if(node)
 | |
|           return if !node.unless? || (!node.condition.and_type? && !node.condition.or_type?)
 | |
| 
 | |
|           add_offense(node.condition.source_range.with(begin_pos: node.loc.keyword.begin_pos)) do |corrector|
 | |
|             corrector.replace(node.loc.keyword, "if")
 | |
|             corrector.replace(node.condition.loc.operator, node.condition.inverse_operator)
 | |
|             [node.condition.lhs, node.condition.rhs].each do |subcondition|
 | |
|               if !subcondition.source.start_with?("(") || !subcondition.source.end_with?(")")
 | |
|                 corrector.insert_before(subcondition, "(")
 | |
|                 corrector.insert_after(subcondition, ")")
 | |
|               end
 | |
|               corrector.insert_before(subcondition, "!")
 | |
|             end
 | |
|           end
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 | 
