Skip to content

Commit

Permalink
Merge pull request #9926 from koic/fix_incorrect_autocorrect_for_styl…
Browse files Browse the repository at this point in the history
…e_single_line_methods

Fix an incorrect auto-correct for `Style/SingleLineMethods`
  • Loading branch information
koic committed Jul 13, 2021
2 parents 2053dbe + b79367b commit d241f43
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 9 deletions.
@@ -0,0 +1 @@
* [#9926](https://github.com/rubocop/rubocop/pull/9926): Fix an incorrect auto-correct for `Style/SingleLineMethods` when method body is enclosed in parentheses. ([@koic][])
23 changes: 14 additions & 9 deletions lib/rubocop/cop/style/single_line_methods.rb
Expand Up @@ -72,17 +72,15 @@ def correct_to_endless?(body_node)
end

def correct_to_multiline(corrector, node)
each_part(node.body) do |part|
LineBreakCorrector.break_line_before(
range: part, node: node, corrector: corrector,
configured_width: configured_indentation_width
)
if (body = node.body) && body.begin_type? && body.parenthesized_call?
break_line_before(corrector, node, body)
else
each_part(body) do |part|
break_line_before(corrector, node, part)
end
end

LineBreakCorrector.break_line_before(
range: node.loc.end, node: node, corrector: corrector,
indent_steps: 0, configured_width: configured_indentation_width
)
break_line_before(corrector, node, node.loc.end, indent_steps: 0)

move_comment(node, corrector)
end
Expand All @@ -96,6 +94,13 @@ def correct_to_endless(corrector, node)
corrector.replace(node, replacement)
end

def break_line_before(corrector, node, range, indent_steps: 1)
LineBreakCorrector.break_line_before(
range: range, node: node, corrector: corrector,
configured_width: configured_indentation_width, indent_steps: indent_steps
)
end

def each_part(body)
return unless body

Expand Down
13 changes: 13 additions & 0 deletions spec/rubocop/cop/style/single_line_methods_spec.rb
Expand Up @@ -32,6 +32,19 @@ def @table.columns;#{trailing_whitespace}
RUBY
end

it 'registers an offense for a single-line method and method body is enclosed in parentheses' do
expect_offense(<<~RUBY)
def foo() (do_something) end
^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Avoid single-line method definitions.
RUBY

expect_correction(<<~RUBY)
def foo()#{trailing_whitespace}
(do_something)#{trailing_whitespace}
end
RUBY
end

context 'when AllowIfMethodIsEmpty is disabled' do
let(:cop_config) { { 'AllowIfMethodIsEmpty' => false } }

Expand Down

0 comments on commit d241f43

Please sign in to comment.