diff --git a/changelog/fix_incorrect_autocorrect_for_style_single_line_methods.md b/changelog/fix_incorrect_autocorrect_for_style_single_line_methods.md new file mode 100644 index 00000000000..b95913135d0 --- /dev/null +++ b/changelog/fix_incorrect_autocorrect_for_style_single_line_methods.md @@ -0,0 +1 @@ +* [#9645](https://github.com/rubocop/rubocop/pull/9645): Fix an incorrect auto-correct for `Style/SingleLineMethods` when using single line class method definition. ([@koic][]) diff --git a/lib/rubocop/cop/style/single_line_methods.rb b/lib/rubocop/cop/style/single_line_methods.rb index 9a0b6c1d3f5..db1cba7194c 100644 --- a/lib/rubocop/cop/style/single_line_methods.rb +++ b/lib/rubocop/cop/style/single_line_methods.rb @@ -91,8 +91,9 @@ def correct_to_multiline(corrector, node) end def correct_to_endless(corrector, node) + self_receiver = node.self_receiver? ? 'self.' : '' arguments = node.arguments.any? ? node.arguments.source : '()' - replacement = "def #{node.method_name}#{arguments} = #{node.body.source}" + replacement = "def #{self_receiver}#{node.method_name}#{arguments} = #{node.body.source}" corrector.replace(node, replacement) end diff --git a/spec/rubocop/cop/style/single_line_methods_spec.rb b/spec/rubocop/cop/style/single_line_methods_spec.rb index f4deafe512a..a61ffaf4b31 100644 --- a/spec/rubocop/cop/style/single_line_methods_spec.rb +++ b/spec/rubocop/cop/style/single_line_methods_spec.rb @@ -168,6 +168,12 @@ def some_method() = body RUBY end + it 'corrects to an endless class method definition' do + expect_correction(<<~RUBY.strip, source: 'def self.some_method; body end') + def self.some_method() = body + RUBY + end + it 'retains comments' do source = 'def some_method; body end # comment' expect_correction(<<~RUBY.strip, source: source)