diff --git a/lib/parser/ruby30.y b/lib/parser/ruby30.y index d1d69c91e..1131c9773 100644 --- a/lib/parser/ruby30.y +++ b/lib/parser/ruby30.y @@ -3071,7 +3071,7 @@ require 'parser' end def endless_method_name(name_t) - if name_t[0].end_with?('=') + if !%w[=== == != <= >= []=].include?(name_t[0]) && name_t[0].end_with?('=') diagnostic :error, :endless_setter, nil, name_t end end diff --git a/lib/parser/ruby31.y b/lib/parser/ruby31.y index 320f24c86..64b809fc7 100644 --- a/lib/parser/ruby31.y +++ b/lib/parser/ruby31.y @@ -3071,7 +3071,7 @@ require 'parser' end def endless_method_name(name_t) - if name_t[0].end_with?('=') + if !%w[=== == != <= >= []=].include?(name_t[0]) && name_t[0].end_with?('=') diagnostic :error, :endless_setter, nil, name_t end end diff --git a/test/test_parser.rb b/test/test_parser.rb index 0b10252f3..b36fba1a6 100644 --- a/test/test_parser.rb +++ b/test/test_parser.rb @@ -10107,6 +10107,19 @@ def test_endless_setter SINCE_3_0) end + def test_endless_non_setter_ending_with_equal + %i[=== == != <= >= != []=].each do |method_name| + assert_parses( + s(:def, method_name, + s(:args, + s(:arg, :other)), + s(:send, nil, :do_something)), + %Q{def #{method_name}(other) = do_something}, + %q{}, + SINCE_3_0) + end + end + def test_endless_method_without_args assert_parses( s(:def, :foo,