From: eregontp@...
Date: 2021-03-26T17:44:09+00:00
Subject: [ruby-core:103041] [Ruby master Feature#17749] Const source	location without name

Issue #17749 has been updated by Eregon (Benoit Daloze).


`Module#source_location` sounds good to me.

I wonder if we should try to collect all places where the class/module is opened/reopened.
`const_source_location` returns where the module was first defined, but there we might want to know e.g. in which files that class was modified.

I could imagine that could be useful in an IDE or debugger.
OTOH it's probably not so reasonable for `class_exec/module_exec` which could be done in a loop potentially.

----------------------------------------
Feature #17749: Const source location without name
https://bugs.ruby-lang.org/issues/17749#change-91103

* Author: tenderlovemaking (Aaron Patterson)
* Status: Open
* Priority: Normal
----------------------------------------
Hi,

I would like to be able to ask a class or module what its source location is without knowing the name.  For example, I want to do this:

```ruby
module A
  class B
  end
end

p A::B.const_source_location
```

In other works `A::B.const_source_location` would be equivalent to `A.const_source_location(:B)`.

The reason I want to do this is because sometimes it is very difficult to get the name of a constant, and sometimes I don't have access to the constant that "encloses" the class or module.

One example:

```ruby
ObjectSpace.each_object(Class) do |k|
  p k.const_source_location
end
```

In this case I have class objects, but I can't tell what constant `k` was defined *inside* of.  Also I can't trust the "name" method on `k` because sometimes it's not the default method (of course I could work around that, but it's not fun).

I've attached a patch that implements the feature, and there is a PR [here](https://github.com/ruby/ruby/pull/4324)

Side note: I think I would like "source_location" better than `const_source_location`, but I wanted to just file a feature request so we could talk about the feature in general.

---Files--------------------------------
0001-Add-constant-location-information-to-classes.patch (5.34 KB)
0001-Add-constant-location-information-to-classes.patch (5.97 KB)


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

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>