Class: RubyTransform::Transformers::ClearExplicitReturns

Inherits:
RubyTransform::Transformer show all
Defined in:
lib/ruby_transform/transformers/clear_explicit_returns.rb

Overview

Clear Explicit Returns

Looks for cases where the last expression in a method contains an explicit “return” statement, which is unnecessary in ruby, and removes it.

Example:

def my_method
  a = 1
  call_something(a)
  return a
end

Transforms To:

def my_method
  a = 1
  call_something(a)
  a
end

Instance Method Summary collapse

Methods included from RubyTransform::TransformerHelpers

#sexp?

Instance Method Details

#matches_explicit_return_method?(e) ⇒ Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/ruby_transform/transformers/clear_explicit_returns.rb', line 37

def matches_explicit_return_method?(e)
  e.is_a?(Sexp) && e.method? && e.block && e.block.body.last && e.block.body.last.kind == :return
end

#transform(e) ⇒ Object



25
26
27
# File 'lib/ruby_transform/transformers/clear_explicit_returns.rb', line 25

def transform(e)
  super(transform_explicit_returns(e))
end

#transform_explicit_return_method(e) ⇒ Object



41
42
43
44
45
# File 'lib/ruby_transform/transformers/clear_explicit_returns.rb', line 41

def transform_explicit_return_method(e)
  e.clone.tap do |exp|
    exp.block[-1] = exp.block[-1].body[0]
  end
end

#transform_explicit_returns(e) ⇒ Object



29
30
31
32
33
34
35
# File 'lib/ruby_transform/transformers/clear_explicit_returns.rb', line 29

def transform_explicit_returns(e)
  if matches_explicit_return_method?(e)
    transform_explicit_return_method(e)
  else
    e
  end
end