class StaticSourceLoc::ModuleSource
Attributes
methods[R]
submodules[R]
Public Class Methods
new(name, parent, singleton=false)
click to toggle source
Calls superclass method
StaticSourceLoc::Source::new
# File lib/static_source_loc.rb, line 43 def initialize(name, parent, singleton=false) super name, parent @singleton = singleton @submodules, @methods = {}, {} end
Public Instance Methods
new_method(name)
click to toggle source
# File lib/static_source_loc.rb, line 57 def new_method(name) @methods[name] ||= MethodSource.new name, self end
new_submodule(name)
click to toggle source
# File lib/static_source_loc.rb, line 53 def new_submodule(name) @submodules[name] ||= ModuleSource.new name, self end
process_code(sexpr)
click to toggle source
# File lib/static_source_loc.rb, line 85 def process_code(sexpr) case sexpr.node_type when :block sexpr.values.each &method(:process_code) when :class, :module if sexpr[1].is_a? Symbol new_submodule(sexpr[1]). new_loc(sexpr.file, sexpr.line). process_code(s(:block).concat sexpr.drop(3)) end when :sclass if sexpr[1] == s(:self) singleton_class. new_loc(sexpr.file, sexpr.line). process_code(s(:block).concat sexpr.drop(2)) end when :defn new_method(sexpr[1]). new_loc(sexpr.file, sexpr.line) when :defs if sexpr[1] == s(:self) singleton_class. new_method(sexpr[2]). new_loc(sexpr.file, sexpr.line) end end self end
qualname()
click to toggle source
# File lib/static_source_loc.rb, line 66 def qualname unless singleton? "#{parent.qualname if parent}::#{name}" else "#{parent.qualname if parent}.#{name}" end end
singleton?()
click to toggle source
# File lib/static_source_loc.rb, line 49 def singleton? @singleton end
singleton_class()
click to toggle source
# File lib/static_source_loc.rb, line 61 def singleton_class @singleton_class ||= ModuleSource.new :singleton_class, self, true end
to_hash()
click to toggle source
# File lib/static_source_loc.rb, line 74 def to_hash children = [] children.concat(submodules.values) children.concat(methods.values) children << @singleton_class if @singleton_class children.each_with_object({qualname => self}) do |child, hash| hash[child.qualname] = child hash.merge! child.to_hash if child.respond_to? :to_hash end end