From ceea8cf40a9ac8a060a40dd4fe496df049f9ef37 Mon Sep 17 00:00:00 2001 From: Koichi ITO Date: Fri, 8 Apr 2022 02:17:59 +0900 Subject: [PATCH] Make `Node#condition?` aware of `case-match` node This PR makes `Node#condition?` aware of `case-match` node. --- ...ke_node_condition_p_aware_of_case_match.md | 1 + lib/rubocop/ast/node.rb | 2 +- spec/rubocop/ast/node_spec.rb | 82 +++++++++++++++++++ 3 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 changelog/new_make_node_condition_p_aware_of_case_match.md diff --git a/changelog/new_make_node_condition_p_aware_of_case_match.md b/changelog/new_make_node_condition_p_aware_of_case_match.md new file mode 100644 index 000000000..bfe7ab49a --- /dev/null +++ b/changelog/new_make_node_condition_p_aware_of_case_match.md @@ -0,0 +1 @@ +* [#227](https://github.com/rubocop-hq/rubocop-ast/pull/227): Make `Node#condition?` aware of `case-match` node. ([@koic][]) diff --git a/lib/rubocop/ast/node.rb b/lib/rubocop/ast/node.rb index 928c5cb81..996d23aea 100644 --- a/lib/rubocop/ast/node.rb +++ b/lib/rubocop/ast/node.rb @@ -57,7 +57,7 @@ class Node < Parser::AST::Node # rubocop:disable Metrics/ClassLength # @api private BASIC_CONDITIONALS = %i[if while until].to_set.freeze # @api private - CONDITIONALS = (BASIC_CONDITIONALS + [:case]).freeze + CONDITIONALS = (BASIC_CONDITIONALS + %i[case case_match]).freeze # @api private POST_CONDITION_LOOP_TYPES = %i[while_post until_post].to_set.freeze # @api private diff --git a/spec/rubocop/ast/node_spec.rb b/spec/rubocop/ast/node_spec.rb index 372a6d16d..cafcb52fe 100644 --- a/spec/rubocop/ast/node_spec.rb +++ b/spec/rubocop/ast/node_spec.rb @@ -836,4 +836,86 @@ class << expr end end end + + describe '#conditional?' do + context 'when `if` node' do + let(:src) do + <<~RUBY + if condition + end + RUBY + end + + it 'is true' do + expect(node).to be_conditional + end + end + + context 'when `while` node' do + let(:src) do + <<~RUBY + while condition + end + RUBY + end + + it 'is true' do + expect(node).to be_conditional + end + end + + context 'when `until` node' do + let(:src) do + <<~RUBY + until condition + end + RUBY + end + + it 'is true' do + expect(node).to be_conditional + end + end + + context 'when `case` node' do + let(:src) do + <<~RUBY + case condition + when foo + end + RUBY + end + + it 'is true' do + expect(node).to be_conditional + end + end + + context 'when `case_match` node', :ruby27 do + let(:src) do + <<~RUBY + case pattern + in foo + end + RUBY + end + + it 'is true' do + expect(node).to be_conditional + end + end + + context 'when post condition loop node' do + let(:src) do + <<~RUBY + begin + end while condition + RUBY + end + + it 'is false' do + expect(node).not_to be_conditional + end + end + end end