Feature #20912
closedAdd warning when redefining __id__ as well as object_id
Description
Currently if you create a class and redefine or remove either object_id
or __send__
it will issue a warning. There's no such warning on __id__
.
❯ ruby -we 'class << Object.new; def object_id = 1; end'
-e:1: warning: redefining `object_id' may cause serious problems
❯ ruby -we 'class << Object.new; def __id__ = 1; end'
❯
It makes sense that there's no warning on send
, because we expect __send__
to be the method reliably available. __send__
is on BasicObject
, send
is only on Kernel
. This seems a little inconsistent that object_id
warns while __id__
does not warn. __id__
is the equivalent to __send__
as it's also on BasicObject
, where object_id
is only on Kernel
.
This may be a more obvious problem in Ruby 3.4.0 as commit:cffd380390967d17899fde0a81f5151ae6ddd076 makes the warning print in more cases.
I propose we change this warning to be emitted only when __id__
is redefined and not when object_id
is redefined:
Proposed behaviour:
❯ ruby -we 'class << Object.new; def object_id = 1; end'
❯ ruby -we 'class << Object.new; def __id__ = 1; end'
-e:1: warning: redefining `__id__' may cause serious problems
❯