From: alex.wayfer@... Date: 2021-03-12T18:18:01+00:00 Subject: [ruby-core:102833] [Ruby master Feature#17674] Proposal: `Method#source_location` or `Method#owner` for refined methods Issue #17674 has been updated by AlexWayfer (Alexander Popov). osyo (manga osyo) wrote in #note-1: > hi. > In Ruby 2.7 and later, `#method` supports Refinements. > > ```ruby > # test.rb > module Cover > refine Range do > def cover?(value) > return super unless value.is_a?(Range) > > super(value.first) && super(value.last) > end > end > end > using Cover > > pp (1..10).method(:cover?).source_location > # Ruby 2.6 => nil > # Ruby 2.7 => ["/test.rb", 4] > > pp (1..10).method(:cover?).owner > # Ruby 2.6 => Range > # Ruby 2.7 => # > ``` > > see: https://bugs.ruby-lang.org/issues/15373 Can't confirm: ```ruby # frozen_string_literal: true puts RUBY_VERSION p (1..10).method(:cover?).source_location ``` ``` ~/Projects/ruby/test/source_location > ruby test.rb 3.0.0 nil ~/Projects/ruby/test/source_location > rbenv local 2.7.2 ~/Projects/ruby/test/source_location > ruby test.rb 2.7.2 nil ``` ---------------------------------------- Feature #17674: Proposal: `Method#source_location` or `Method#owner` for refined methods https://bugs.ruby-lang.org/issues/17674#change-90892 * Author: AlexWayfer (Alexander Popov) * Status: Open * Priority: Normal ---------------------------------------- Inspired by https://bugs.ruby-lang.org/issues/15504#note-17 I'm working on a gem with Ruby refinements, and some methods are invented in new Ruby versions like 2.5 or 3.0, and I'd like to define in this gem should I refine a method or not. So��� current behavior of `Method#source_location` returns `nil` for core and/or refined methods. I think, refinements should be caught by this method. Also I didn't know about `Method#owner`, but it can be a case for refinements too. -- https://bugs.ruby-lang.org/ Unsubscribe: