class LsifParser::Ranges

Processes and stores ranges data and links to their hovers and definitions

Public Class Methods

new() click to toggle source
# File lib/lsif_parser/ranges.rb, line 6
def initialize
  @ranges = {}
  @def_refs = {}
  @hovers = Hovers.new
end

Public Instance Methods

def_ref_for(id) click to toggle source
# File lib/lsif_parser/ranges.rb, line 31
def def_ref_for(id)
  @def_refs[id]
end
find(id) click to toggle source
# File lib/lsif_parser/ranges.rb, line 23
def find(id)
  @ranges[id]
end
hover_for(id) click to toggle source
# File lib/lsif_parser/ranges.rb, line 27
def hover_for(id)
  @hovers.for(id)
end
read(line) click to toggle source
# File lib/lsif_parser/ranges.rb, line 12
def read(line)
  case line['label']
  when 'range'
    add(line)
  when 'item'
    add_item(line)
  else
    @hovers.read(line)
  end
end

Private Instance Methods

add(line) click to toggle source
# File lib/lsif_parser/ranges.rb, line 37
def add(line)
  id = line['id']
  start_data = line['start']

  @ranges[id] = {
    start_line: start_data['line'],
    start_char: start_data['character']
  }
end
add_item(line) click to toggle source
# File lib/lsif_parser/ranges.rb, line 47
def add_item(line)
  type = line['property']

  return unless %w[definitions references].include?(type)

  line['inVs'].each do |range_id|
    @ranges[range_id]&.merge!(ref_id: line['outV'])
  end

  return unless type == 'definitions'

  @def_refs[line['outV']] = {
    id: line['inVs'].first,
    doc_id: line['document']
  }
end