Issue #9907 has been updated by Tomoyuki Chikanaga.

Backport changed from 2.0.0: REQUIRED, 2.1: REQUIRED to 2.0.0: REQUIRED, 2.1: DONTNEED

This seems a spec change for me. Any comments?

----------------------------------------
Bug #9907: Abbreviated method assignment with private attr_writer/attr_reader does not work.
https://bugs.ruby-lang.org/issues/9907#change-48900

* Author: Jrg W Mittag
* Status: Closed
* Priority: Normal
* Assignee: 
* Category: core
* Target version: current: 2.2.0
* ruby -v: ruby 2.2.0dev (2014-06-05 trunk 46357) [x86_64-darwin13]
* Backport: 2.0.0: REQUIRED, 2.1: DONTNEED
----------------------------------------
This looks like a hole in the specification:

~~~ruby
private def foo=(*) end
public  def foo; 0  end

self.foo =  42

self.foo += 42
# private method `foo=' called for main:Object (NoMethodError)

private :foo

self.foo += 42
# private method `foo' called for main:Object (NoMethodError)
~~~

There is an exception for `private` writers in the rule for private messagesends, but apparently that exception needs to broadened so that it also works in the case of abbreviated assignments. I'm not entirely sure what thisrule would be, but I don't think it would break backwards compatibility, since all situations that would work differently with the changed rule wouldcurrently raise a `NoMethodError` anyway.

The rule should be something like:

> * `private` methods can only be called without an explicit receiver.
> * An exception is made for method assignments, where the literal receiver`self` is also allowed in the assignee method expression.
> * This also applies to compound assignments: `self.foo = bar` shall *always* succeed if either or both of `foo` and `foo=` are `private`.



-- 
https://bugs.ruby-lang.org/