Feature #7418
closed
    Kernel#used_refinements
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
        
          
          Updated by judofyr (Magnus Holm) almost 13 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)
charlie@charliesomerville.com wrote:
Issue #7418 has been reported by charliesome (Charlie Somerville).
Feature #7418: Kernel#used_refinements
https://bugs.ruby-lang.org/issues/7418Author: 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.
        
          
          Updated by shugo (Shugo Maeda) almost 13 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.
        
          
          Updated by chendo (Jack Chen) almost 13 years ago
          
          
        
        
      
      +1 since I gave Charlie the idea :)
        
          
          Updated by mame (Yusuke Endoh) almost 13 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 mame@tsg.ne.jp
        
          
          Updated by shugo (Shugo Maeda) over 12 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 9 years ago
          
          
        
        
      
      Module.used_refinements accepted.
Matz.
        
          
          Updated by shugo (Shugo Maeda) about 9 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 9 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 9 years ago
          
          
        
        
      
      Shugo Maeda wrote:
Module.used_modulesmight 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.
        
          
          Updated by shugo (Shugo Maeda) about 9 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]