class CodeExplorer::ConstBinding
tracks what constants are resolvable
Public Class Methods
new(fqname, parent = nil)
click to toggle source
# File lib/code_explorer/const_binding.rb, line 4 def initialize(fqname, parent = nil) @fqname = fqname @parent = parent @known = {} end
Public Instance Methods
close_namespace()
click to toggle source
@return [ConstBinding] the parent scope
# File lib/code_explorer/const_binding.rb, line 23 def close_namespace @parent end
declare_const(fqname)
click to toggle source
# File lib/code_explorer/const_binding.rb, line 27 def declare_const(fqname) if @known[fqname] # puts "warning: #{fqname} already declared" end @known[fqname] = :const end
open_namespace(fqname)
click to toggle source
@return [ConstBinding] the new scope
# File lib/code_explorer/const_binding.rb, line 11 def open_namespace(fqname) ns = @known[fqname] if ns.is_a? ConstBinding # puts "(reopening #{fqname})" else ns = self.class.new(fqname, self) @known[fqname] = ns end ns end
resolve_declared_const(name)
click to toggle source
# File lib/code_explorer/const_binding.rb, line 34 def resolve_declared_const(name) if @fqname.empty? name else "#{@fqname}::#{name}" end end
resolve_used_const(name)
click to toggle source
# File lib/code_explorer/const_binding.rb, line 42 def resolve_used_const(name) # puts "resolving #{name} in #{@fqname}, known #{@known.inspect}" candidate = resolve_declared_const(name) if @known.include?(candidate) candidate elsif @parent @parent.resolve_used_const(name) else name end end