class RuboCop::Cop::Lint::LiteralInCondition
This cop checks for literals used as the conditions or as operands in and/or expressions serving as the conditions of if/while/until.
@example
if 20 do_something end if some_var && true do_something end
Constants
- MSG
Public Instance Methods
message(node)
click to toggle source
# File lib/rubocop/cop/lint/literal_in_condition.rb, line 55 def message(node) format(MSG, node.source) end
on_case(node)
click to toggle source
# File lib/rubocop/cop/lint/literal_in_condition.rb, line 43 def on_case(node) cond, *whens, _else = *node if cond check_case_cond(cond) else whens.each do |when_node| check_for_literal(when_node) end end end
on_if(node)
click to toggle source
# File lib/rubocop/cop/lint/literal_in_condition.rb, line 23 def on_if(node) check_for_literal(node) end
on_until(node)
click to toggle source
# File lib/rubocop/cop/lint/literal_in_condition.rb, line 35 def on_until(node) check_for_literal(node) end
on_until_post(node)
click to toggle source
# File lib/rubocop/cop/lint/literal_in_condition.rb, line 39 def on_until_post(node) check_for_literal(node) end
on_while(node)
click to toggle source
# File lib/rubocop/cop/lint/literal_in_condition.rb, line 27 def on_while(node) check_for_literal(node) end
on_while_post(node)
click to toggle source
# File lib/rubocop/cop/lint/literal_in_condition.rb, line 31 def on_while_post(node) check_for_literal(node) end
Private Instance Methods
basic_literal?(node)
click to toggle source
# File lib/rubocop/cop/lint/literal_in_condition.rb, line 82 def basic_literal?(node) if node && node.type == :array primitive_array?(node) else node.basic_literal? end end
check_case_cond(node)
click to toggle source
# File lib/rubocop/cop/lint/literal_in_condition.rb, line 120 def check_case_cond(node) return if node.type == :array && !primitive_array?(node) return if node.type == :dstr handle_node(node) end
check_for_literal(node)
click to toggle source
# File lib/rubocop/cop/lint/literal_in_condition.rb, line 61 def check_for_literal(node) cond, = *node # if the cond node is literal we obviously have a problem if cond.literal? add_offense(cond, :expression) else # alternatively we have to consider a logical node with a # literal argument check_node(cond) end end
check_node(node)
click to toggle source
# File lib/rubocop/cop/lint/literal_in_condition.rb, line 94 def check_node(node) return unless node if not?(node) receiver, = *node handle_node(receiver) elsif [:and, :or].include?(node.type) *operands = *node operands.each do |op| handle_node(op) end elsif node.type == :begin && node.children.size == 1 child_node = node.children.first handle_node(child_node) end end
handle_node(node)
click to toggle source
# File lib/rubocop/cop/lint/literal_in_condition.rb, line 112 def handle_node(node) if node.literal? add_offense(node, :expression) elsif [:send, :and, :or, :begin].include?(node.type) check_node(node) end end
not?(node)
click to toggle source
# File lib/rubocop/cop/lint/literal_in_condition.rb, line 74 def not?(node) return false unless node && node.type == :send _receiver, method_name, *_args = *node method_name == :! end
primitive_array?(node)
click to toggle source
# File lib/rubocop/cop/lint/literal_in_condition.rb, line 90 def primitive_array?(node) node.children.all? { |n| basic_literal?(n) } end