Project

General

Profile

Actions

Feature #7418

closed

Kernel#used_refinements

Added by Anonymous about 12 years ago. Updated about 8 years ago.

Status:
Closed
Target version:
-
[ruby-core:49805]

Description

I'd like to propose a method that returns an array of all refinements visible from the current scope. I have documented the ordering of the return array as undefined to allow a bit of flexibility in how it is implemented across the various Ruby implementations.

One of the criticisms of refinements is that its use makes code harder to understand - especially when non-lexical refinements are being used. This method slightly improves the situation by making debugging of code using refinements easier.

I've named the method 'used_refinements' for now, but I'm open to changing that to something else.

I've already done the initial implementation which is attached as a patch. Feedback would be most appreciated.


Files

used_refinements.patch (3.06 KB) used_refinements.patch Anonymous, 11/21/2012 08:16 PM

Updated by judofyr (Magnus Holm) about 12 years ago

Maybe it should be called Module.refinements (a la Module.nesting).

// Magnus Holm

On Wed, Nov 21, 2012 at 12:16 PM, charliesome (Charlie Somerville)
wrote:

Issue #7418 has been reported by charliesome (Charlie Somerville).


Feature #7418: Kernel#used_refinements
https://bugs.ruby-lang.org/issues/7418

Author: charliesome (Charlie Somerville)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:

I'd like to propose a method that returns an array of all refinements visible from the current scope. I have documented the ordering of the return array as undefined to allow a bit of flexibility in how it is implemented across the various Ruby implementations.

One of the criticisms of refinements is that its use makes code harder to understand - especially when non-lexical refinements are being used. This method slightly improves the situation by making debugging of code using refinements easier.

I've named the method 'used_refinements' for now, but I'm open to changing that to something else.

I've already done the initial implementation which is attached as a patch. Feedback would be most appreciated.

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

Updated by shugo (Shugo Maeda) about 12 years ago

  • Status changed from Open to Assigned
  • Assignee set to shugo (Shugo Maeda)

judofyr (Magnus Holm) wrote:

Maybe it should be called Module.refinements (a la Module.nesting).

Module.refinements conflicts with Module#refinements, which returns refinements defined in the receiver.

Actions #3

Updated by chendo (Jack Chen) about 12 years ago

+1 since I gave Charlie the idea :)

Updated by mame (Yusuke Endoh) almost 12 years ago

  • Target version set to 2.6

Shugo, is this feature mandatory for the 2.0.0 refinements?
I'm setting to next minor tentatively.

--
Yusuke Endoh

Updated by shugo (Shugo Maeda) over 11 years ago

  • Assignee changed from shugo (Shugo Maeda) to matz (Yukihiro Matsumoto)

I'm against adding a new reflection API for refinements into Ruby 2.1.
What do you think of it, Matz?

Updated by matz (Yukihiro Matsumoto) about 8 years ago

Module.used_refinements accepted.

Matz.

Actions #7

Updated by shugo (Shugo Maeda) about 8 years ago

  • Status changed from Assigned to Closed

Applied in changeset r56094.


  • eval.c (rb_mod_s_used_refinements): new method
    Module.used_refinements. based on the patch by Charlie
    Somerville. [Feature #7418] [ruby-core:49805]

Updated by shugo (Shugo Maeda) about 8 years ago

  • Status changed from Closed to Open

Module.used_refinements accepted.

Module.used_modules might be a better name, because a module can have more than one refinement:

module M
  refine A
  end

  refine B
  end
end

using M
p Module.used_modules #=> [M]

Updated by shugo (Shugo Maeda) about 8 years ago

Shugo Maeda wrote:

Module.used_modules might be a better name, because a module can have more than one refinement:

Matz said that he thinks so too at https://twitter.com/yukihiro_matz/status/773787246990196736, so I'll change the name.

Actions #10

Updated by shugo (Shugo Maeda) about 8 years ago

  • Status changed from Open to Closed

Applied in changeset r56109.


  • eval.c (rb_mod_s_used_modules): rename Module.used_refinements to
    Module.used_modules. [Feature #7418] [ruby-core:49805]
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0