From 2ae1403d5c57388edc4d587b1511804ef5413662 Mon Sep 17 00:00:00 2001 From: Koichi ITO Date: Mon, 13 Dec 2021 01:26:06 +0900 Subject: [PATCH] Add `value_omission` method to `AST::PairNode` Follow up to https://github.com/whitequark/parser/pull/818 This PR adds `value_omission` method to `AST::PairNode` for Ruby 3.1's hash value omission. It can replace string match with that named API. --- changelog/new_add_value_omission_to_pair_node.md | 1 + lib/rubocop/ast/node/pair_node.rb | 7 +++++++ spec/rubocop/ast/pair_node_spec.rb | 14 ++++++++++++++ 3 files changed, 22 insertions(+) create mode 100644 changelog/new_add_value_omission_to_pair_node.md diff --git a/changelog/new_add_value_omission_to_pair_node.md b/changelog/new_add_value_omission_to_pair_node.md new file mode 100644 index 000000000..756d32a3d --- /dev/null +++ b/changelog/new_add_value_omission_to_pair_node.md @@ -0,0 +1 @@ +* [#10219](https://github.com/rubocop/rubocop/pull/10219): Add `value_omission` method to `AST::PairNode` for Ruby 3.1's hash value omission. ([@koic][]) diff --git a/lib/rubocop/ast/node/pair_node.rb b/lib/rubocop/ast/node/pair_node.rb index af65dfa12..4a04590d3 100644 --- a/lib/rubocop/ast/node/pair_node.rb +++ b/lib/rubocop/ast/node/pair_node.rb @@ -62,6 +62,13 @@ def inverse_delimiter(*deprecated, with_spacing: deprecated.first) def value_on_new_line? key.loc.line != value.loc.line end + + # Checks whether the `pair` uses hash value omission. + # + # @return [Boolean] whether this `pair` uses hash value omission + def value_omission? + source.end_with?(':') + end end end end diff --git a/spec/rubocop/ast/pair_node_spec.rb b/spec/rubocop/ast/pair_node_spec.rb index 7168faa8b..ec2029a99 100644 --- a/spec/rubocop/ast/pair_node_spec.rb +++ b/spec/rubocop/ast/pair_node_spec.rb @@ -711,4 +711,18 @@ end end end + + describe '#value_omission?' do + context 'when using hash value omission', :ruby31 do + let(:source) { '{ x: }' } + + it { expect(pair_node).to be_value_omission } + end + + context 'when not using hash value omission' do + let(:source) { '{ x: x }' } + + it { expect(pair_node).not_to be_value_omission } + end + end end