class RuboCop::Cop::Lint::Void

This cop checks for operators, variables and literals used in void context.

@example

# bad

def some_method
  some_num * 10
  do_something
end

@example

# bad

def some_method(some_var)
  some_var
  do_something
end

@example

# good

def some_method
  do_something
  some_num * 10
end

@example

# good

def some_method(some_var)
  do_something
  some_var
end

Constants

BINARY_OPERATORS
DEFINED_MSG
LIT_MSG
OPERATORS
OP_MSG
SELF_MSG
UNARY_OPERATORS
VAR_MSG
VOID_CONTEXT_TYPES

Public Instance Methods

on_begin(node) click to toggle source
# File lib/rubocop/cop/lint/void.rb, line 56
def on_begin(node)
  check_begin(node)
end
Also aliased as: on_kwbegin
on_kwbegin(node)
Alias for: on_begin

Private Instance Methods

check_begin(node) click to toggle source
# File lib/rubocop/cop/lint/void.rb, line 63
def check_begin(node)
  expressions = *node
  expressions = expressions.drop_last(1) unless in_void_context?(node)
  expressions.each do |expr|
    check_void_op(expr)
    check_literal(expr)
    check_var(expr)
    check_self(expr)
    check_defined(expr)
  end
end
check_defined(node) click to toggle source
# File lib/rubocop/cop/lint/void.rb, line 103
def check_defined(node)
  return unless node.defined_type?

  add_offense(node, message: format(DEFINED_MSG, node.source))
end
check_literal(node) click to toggle source
# File lib/rubocop/cop/lint/void.rb, line 91
def check_literal(node)
  return if !node.literal? || node.xstr_type?

  add_offense(node, message: format(LIT_MSG, node.source))
end
check_self(node) click to toggle source
# File lib/rubocop/cop/lint/void.rb, line 97
def check_self(node)
  return unless node.self_type?

  add_offense(node, message: SELF_MSG)
end
check_var(node) click to toggle source
# File lib/rubocop/cop/lint/void.rb, line 83
def check_var(node)
  return unless node.variable? || node.const_type?

  add_offense(node,
              location: :name,
              message: format(VAR_MSG, node.loc.name.source))
end
check_void_op(node) click to toggle source
# File lib/rubocop/cop/lint/void.rb, line 75
def check_void_op(node)
  return unless node.send_type? && OPERATORS.include?(node.method_name)

  add_offense(node,
              location: :selector,
              message: format(OP_MSG, node.method_name))
end
in_void_context?(node) click to toggle source
# File lib/rubocop/cop/lint/void.rb, line 109
def in_void_context?(node)
  parent = node.parent

  return false unless parent && parent.children.last == node

  VOID_CONTEXT_TYPES.include?(parent.type) && parent.void_context?
end