Sha256: fc77e786c79984fc13135c3333ce376f3490cf7724cab49374c0e10f876246ff
Contents?: true
Size: 1.23 KB
Versions: 2
Compression:
Stored size: 1.23 KB
Contents
# typed: true # frozen_string_literal: true require "set" module Tapioca # Registers a TracePoint immediately upon load to track points at which # classes and modules are opened for definition. This is used to track # correspondence between classes/modules and files, as this information isn't # available in the ruby runtime without extra accounting. module ConstantLocator extend Reflection @class_files = {} # Immediately activated upon load. Observes class/module definition. TracePoint.trace(:class) do |tp| unless tp.self.singleton_class? key = name_of(tp.self) file = tp.path if file == "(eval)" file = T.must(caller_locations) .drop_while { |loc| loc.path == "(eval)" } .first&.path end @class_files[key] ||= Set.new @class_files[key] << file end end # Returns the files in which this class or module was opened. Doesn't know # about situations where the class was opened prior to +require+ing, # or where metaprogramming was used via +eval+, etc. def self.files_for(klass) name = String === klass ? klass : name_of(klass) files = @class_files[name] files || Set.new end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
tapioca-0.5.6 | lib/tapioca/constant_locator.rb |
tapioca-0.5.5 | lib/tapioca/constant_locator.rb |