From 4883af42fb9de2ee9663630b87d16aee9ccdc6b9 Mon Sep 17 00:00:00 2001 From: nobuyo Date: Fri, 29 Apr 2022 10:41:26 +0900 Subject: [PATCH] [Fix #10589] Fix autocorrect for `Style/RaiseArgs` with `EnforcedStyle: compact` and exception object is assigned to a local variable. Update lib/rubocop/cop/style/raise_args.rb Co-authored-by: Koichi ITO --- changelog/fix_autocorrect_for_styleraiseargs.md | 1 + lib/rubocop/cop/style/raise_args.rb | 2 +- spec/rubocop/cop/style/raise_args_spec.rb | 17 +++++++++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 changelog/fix_autocorrect_for_styleraiseargs.md diff --git a/changelog/fix_autocorrect_for_styleraiseargs.md b/changelog/fix_autocorrect_for_styleraiseargs.md new file mode 100644 index 00000000000..9158f0e6463 --- /dev/null +++ b/changelog/fix_autocorrect_for_styleraiseargs.md @@ -0,0 +1 @@ +* [#10589](https://github.com/rubocop/rubocop/issues/10589): Fix autocorrect for `Style/RaiseArgs` with `EnforcedStyle: compact` and exception object is assigned to a local variable. ([@nobuyo][]) diff --git a/lib/rubocop/cop/style/raise_args.rb b/lib/rubocop/cop/style/raise_args.rb index 780d625d3d2..872eb8a8075 100644 --- a/lib/rubocop/cop/style/raise_args.rb +++ b/lib/rubocop/cop/style/raise_args.rb @@ -80,7 +80,7 @@ def correction_exploded_to_compact(node) return node.source if message_nodes.size > 1 argument = message_nodes.first.source - exception_class = exception_node.const_name || exception_node.receiver.source + exception_class = exception_node.receiver&.source || exception_node.source if node.parent && requires_parens?(node.parent) "#{node.method_name}(#{exception_class}.new(#{argument}))" diff --git a/spec/rubocop/cop/style/raise_args_spec.rb b/spec/rubocop/cop/style/raise_args_spec.rb index e968e257714..d199905d4bb 100644 --- a/spec/rubocop/cop/style/raise_args_spec.rb +++ b/spec/rubocop/cop/style/raise_args_spec.rb @@ -17,6 +17,19 @@ end end + context 'with a raise with 2 args and exception object is assigned to a local variable' do + it 'reports an offense' do + expect_offense(<<~RUBY) + raise error_class, msg + ^^^^^^^^^^^^^^^^^^^^^^ Provide an exception object as an argument to `raise`. + RUBY + + expect_correction(<<~RUBY) + raise error_class.new(msg) + RUBY + end + end + context 'with a raise with exception instantiation and message arguments' do it 'reports an offense' do expect_offense(<<~RUBY) @@ -317,6 +330,10 @@ def do_something expect_no_offenses('raise RuntimeError, msg') end + it 'accepts a raise when exception object is assigned to a local variable' do + expect_no_offenses('raise error_class, msg') + end + it 'accepts a raise with msg argument' do expect_no_offenses('raise msg') end