diff --git a/CHANGELOG.md b/CHANGELOG.md index 45005c194..979b71bea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## master (unreleased) +### New features + +* [#49](https://github.com/rubocop-hq/rubocop-ast/pull/49): Add `DefNode#endless?` (Ruby 3.0). ([@marcandre][]) + ## 0.7.1 (2020-09-28) ### Bug fixes diff --git a/lib/rubocop/ast/node/def_node.rb b/lib/rubocop/ast/node/def_node.rb index 4769acc6d..96a61d631 100644 --- a/lib/rubocop/ast/node/def_node.rb +++ b/lib/rubocop/ast/node/def_node.rb @@ -58,6 +58,11 @@ def body def receiver children[-4] end + + # @return [Boolean] if the definition is without an `end` or not. + def endless? + !loc.end + end end end end diff --git a/spec/rubocop/ast/def_node_spec.rb b/spec/rubocop/ast/def_node_spec.rb index 3aba8082e..af76b5be0 100644 --- a/spec/rubocop/ast/def_node_spec.rb +++ b/spec/rubocop/ast/def_node_spec.rb @@ -516,4 +516,18 @@ it { expect(def_node.body.begin_type?).to be(true) } end end + + describe '#endless?' do + context 'with standard method definition' do + let(:source) { 'def foo; 42; end' } + + it { expect(def_node.endless?).to be(false) } + end + + context 'with endless method definition', :ruby30 do + let(:source) { 'def foo() = 42' } + + it { expect(def_node.endless?).to be(true) } + end + end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index b672dd26c..56cac2e75 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -34,6 +34,10 @@ let(:ruby_version) { 2.7 } end +RSpec.shared_context 'ruby 3.0', :ruby30 do + let(:ruby_version) { 3.0 } +end + # ... module DefaultRubyVersion extend RSpec::SharedContext