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