class Steep::Index::SourceIndex
def add_definition(constant: nil, method: nil, definition:)
def add_definition(constant: nil, method: nil, definition:) @count += 1 entry(constant: constant, method: method).add_definition(definition) self end
def add_reference(constant: nil, method: nil, ref:)
def add_reference(constant: nil, method: nil, ref:) @count += 1 entry(constant: constant, method: method).add_reference(ref) self end
def entry(constant: nil, method: nil)
def entry(constant: nil, method: nil) case when constant constant_index[constant] ||= ConstantEntry.new(name: constant) when method method_index[method] ||= MethodEntry.new(name: method) else raise end end
def initialize(source:, parent: nil)
def initialize(source:, parent: nil) @source = source @parent = parent @parent_count = parent&.count @count = @parent_count || 0 @constant_index = {} @method_index = {} end
def merge!(child)
def merge!(child) raise unless child.parent == self raise unless child.parent_count == count constant_index.merge!(child.constant_index) do |_, entry, child_entry| entry.merge!(child_entry) end method_index.merge!(child.method_index) do |_, entry, child_entry| entry.merge!(child_entry) end @count = child.count + 1 end
def new_child
def new_child SourceIndex.new(source: source, parent: self) end