ruby-changes:59388
From: zverok <ko1@a...>
Date: Mon, 23 Dec 2019 08:30:41 +0900 (JST)
Subject: [ruby-changes:59388] c1bd1bf272 (master): Document Module#const_source_location
https://git.ruby-lang.org/ruby.git/commit/?id=c1bd1bf272 From c1bd1bf27236b33965dd92c1b2297edc91327cfb Mon Sep 17 00:00:00 2001 From: zverok <zverok.offline@g...> Date: Fri, 13 Dec 2019 18:59:23 +0200 Subject: Document Module#const_source_location diff --git a/object.c b/object.c index 4d2d006..0bb0e0f 100644 --- a/object.c +++ b/object.c @@ -2706,6 +2706,53 @@ rb_mod_const_defined(int argc, VALUE *argv, VALUE mod) https://github.com/ruby/ruby/blob/trunk/object.c#L2706 return Qtrue; } +/* + * call-seq: + * mod.const_source_location(sym, inherit=true) -> [String, Integer] + * mod.const_source_location(str, inherit=true) -> [String, Integer] + * + * Returns the Ruby source filename and line number containing first definition + * of constant specified. If the named constant is not found, +nil+ is returned. + * If the constant is found, but its source location can not be extracted + * (constant is defined in C code), empty array is returned. + * + * _inherit_ specifies whether to lookup in <code>mod.ancestors</code> (+true+ + * by default). + * + * # test.rb: + * class A + * C1 = 1 + * end + * + * module M + * C2 = 2 + * end + * + * class B < A + * include M + * C3 = 3 + * end + * + * class A # continuation of A definition + * end + * + * p B.const_source_location('C3') # => ["test.rb", 11] + * p B.const_source_location('C2') # => ["test.rb", 6] + * p B.const_source_location('C1') # => ["test.rb", 2] + * + * p B.const_source_location('C2', false) # => nil -- don't lookup in ancestors + * + * p Object.const_source_location('B') # => ["test.rb", 9] + * p Object.const_source_location('A') # => ["test.rb", 1] -- note it is first entry, not "continuation" + * + * p B.const_source_location('A') # => ["test.rb", 1] -- because Object is in ancestors + * p M.const_source_location('A') # => ["test.rb", 1] -- Object is not ancestor, but additionally checked for modules + * + * p Object.const_source_location('A::C1') # => ["test.rb", 2] -- nesting is supported + * p Object.const_source_location('String') # => [] -- constant is defined in C code + * + * + */ static VALUE rb_mod_const_source_location(int argc, VALUE *argv, VALUE mod) { -- cgit v0.10.2 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/