class RuboCop::Cop::Style::SingleLineMethods
It can optionally accept single-line methods with no body.
This cop checks for single-line method definitions.
def allow_empty?
def allow_empty? cop_config['AllowIfMethodIsEmpty'] end
def autocorrect(node)
def autocorrect(node) body = @body eol_comment = processed_source.comments.find do |c| c.loc.line == node.loc.expression.line end @corrections << lambda do |corrector| if body.type == :begin body.children.each do |part| break_line_before(part.loc.expression, node, corrector, 1) end else break_line_before(body.loc.expression, node, corrector, 1) end break_line_before(node.loc.end, node, corrector, 0) move_comment(eol_comment, node, corrector) if eol_comment end end
def break_line_before(range, node, corrector, indent_steps)
def break_line_before(range, node, corrector, indent_steps) corrector.insert_before( range, "\n" + ' ' * (node.loc.keyword.column + indent_steps * configured_indentation_width) ) end
def configured_indentation_width
def configured_indentation_width config.for_cop('IndentationWidth')['Width'] end
def move_comment(eol_comment, node, corrector)
def move_comment(eol_comment, node, corrector) text = eol_comment.loc.expression.source corrector.insert_before(node.loc.expression, text + "\n" + ' ' * node.loc.keyword.column) corrector.remove(eol_comment.loc.expression) end
def on_method_def(node, _method_name, _args, body)
def on_method_def(node, _method_name, _args, body) start_line = node.loc.keyword.line end_line = node.loc.end.line empty_body = body.nil? return unless start_line == end_line && !(allow_empty? && empty_body) @body = body add_offense(node, :expression) end