[ruby-core:123113] [Ruby Feature#21555] Add support for predicate attribute reader names

Issue #21555 has been reported by shan (Shannon Skipper). ---------------------------------------- Feature #21555: Add support for predicate attribute reader names https://bugs.ruby-lang.org/issues/21555 * Author: shan (Shannon Skipper) * Status: Open ---------------------------------------- After manually aliasing predicate methods many times, I wanted to propose letting `attr_reader` take predicate method names that correspond to instance variables of the base name without a trailing question mark. https://github.com/ruby/ruby/pull/14391 If the base name method doesn't already exist, a predicate name defines a base name method attribute reader to alias then undefines the base name. For example, this creates an `enabled?` method that reads `@enabled`: ```ruby attr_reader :enabled? ``` This feature is only supported for `attr_reader` and `attr`, not `attr_writer` or `attr_accessor`, since setter methods cannot have question marks. Example: ```ruby class Example attr_reader :valid?, :meaning def initialize @valid = [true, false].sample @meaning = 42 end end Example.new.valid? #=> true ``` -- https://bugs.ruby-lang.org/

Issue #21555 has been updated by Dan0042 (Daniel DeLorme). Also related to #5781 #11167 #12046 #15991 #19708 Popular eh? ---------------------------------------- Feature #21555: Add support for predicate attribute reader names https://bugs.ruby-lang.org/issues/21555#change-114433 * Author: shan (Shannon Skipper) * Status: Open ---------------------------------------- After manually aliasing predicate methods many times, I wanted to propose letting `attr_reader` take predicate method names that correspond to instance variables of the base name without a trailing question mark. https://github.com/ruby/ruby/pull/14391 If the base name method doesn't already exist, a predicate name defines a base name method attribute reader to alias then undefines the base name. For example, this creates an `enabled?` method that reads `@enabled`: ```ruby attr_reader :enabled? ``` This feature is only supported for `attr_reader` and `attr`, not `attr_writer` or `attr_accessor`, since setter methods cannot have question marks. Example: ```ruby class Example attr_reader :valid?, :meaning def initialize @valid = [true, false].sample @meaning = 42 end end Example.new.valid? #=> true ``` -- https://bugs.ruby-lang.org/

Issue #21555 has been updated by byroot (Jean Boussier).
This feature is only supported for attr_reader and attr, not attr_writer or attr_accessor, since setter methods cannot have question marks.
Using the same logic, `attr_accessor :enabled?` could generate `#enabled?` and `#enabled=` without problem. `attr_writer :enabled?` would be weird though. ---------------------------------------- Feature #21555: Add support for predicate attribute reader names https://bugs.ruby-lang.org/issues/21555#change-114435 * Author: shan (Shannon Skipper) * Status: Open ---------------------------------------- After manually aliasing predicate methods many times, I wanted to propose letting `attr_reader` take predicate method names that correspond to instance variables of the base name without a trailing question mark. https://github.com/ruby/ruby/pull/14391 If the base name method doesn't already exist, a predicate name defines a base name method attribute reader to alias then undefines the base name. For example, this creates an `enabled?` method that reads `@enabled`: ```ruby attr_reader :enabled? ``` This feature is only supported for `attr_reader` and `attr`, not `attr_writer` or `attr_accessor`, since setter methods cannot have question marks. Example: ```ruby class Example attr_reader :valid?, :meaning def initialize @valid = [true, false].sample @meaning = 42 end end Example.new.valid? #=> true ``` -- https://bugs.ruby-lang.org/

Issue #21555 has been updated by shan (Shannon Skipper). Dan0042 (Daniel DeLorme) wrote in #note-2:
Also related to #5781 #11167 #12046 #15991 #19708 Popular eh?
Wow! There's already an open ticket for this exact issue even. I apologize for not properly searching before filing. I should have just added a PR link there in retrospect. byroot (Jean Boussier) wrote in #note-3:
This feature is only supported for attr_reader and attr, not attr_writer or attr_accessor, since setter methods cannot have question marks.
Using the same logic, `attr_accessor :enabled?` could generate `#enabled?` and `#enabled=` without problem. `attr_writer :enabled?` would be weird though.
I was thinking of `attr_writer :enabled?` being weird and dismissed `attr_accessor :enabled?`. I didn't think of the case where you want `attr_reader :enabled?` and `attr_writer :enabled` without `attr_writer :enabled`. I wouldn't mind doing an `attr_reader :enabled?` with `attr_writer :enabled` but agree `attr_accessor :enabled?` makes sense based on the pattern. ---------------------------------------- Feature #21555: Add support for predicate attribute reader names https://bugs.ruby-lang.org/issues/21555#change-114457 * Author: shan (Shannon Skipper) * Status: Open ---------------------------------------- After manually aliasing predicate methods many times, I wanted to propose letting `attr_reader` take predicate method names that correspond to instance variables of the base name without a trailing question mark. https://github.com/ruby/ruby/pull/14391 If the base name method doesn't already exist, a predicate name defines a base name method attribute reader to alias then undefines the base name. For example, this creates an `enabled?` method that reads `@enabled`: ```ruby attr_reader :enabled? ``` This feature is only supported for `attr_reader` and `attr`, not `attr_writer` or `attr_accessor`, since setter methods cannot have question marks. Example: ```ruby class Example attr_reader :valid?, :meaning def initialize @valid = [true, false].sample @meaning = 42 end end Example.new.valid? #=> true ``` -- https://bugs.ruby-lang.org/
participants (3)
-
byroot (Jean Boussier)
-
Dan0042 (Daniel DeLorme)
-
shan (Shannon Skipper)