class Steep::Project::CompletionProvider

def run(line:, column:)

def run(line:, column:)
  source_text = self.source_text.dup
  index = index_for(source_text, line:line, column: column)
  possible_trigger = source_text[index-1]
  Steep.logger.debug "possible_trigger: #{possible_trigger.inspect}"
  position = Position.new(line: line, column: column)
  begin
    Steep.logger.tagged "completion_provider#run(line: #{line}, column: #{column})" do
      Steep.measure "type_check!" do
        type_check!(source_text)
      end
    end
    Steep.measure "completion item collection" do
      items_for_trigger(position: position)
    end
  rescue Parser::SyntaxError => exn
    Steep.logger.error "recovering syntax error: #{exn.inspect}"
    case possible_trigger
    when "."
      source_text[index-1] = " "
      type_check!(source_text)
      items_for_dot(position: position)
    when "@"
      source_text[index-1] = " "
      type_check!(source_text)
      items_for_atmark(position: position)
    else
      []
    end
  end
end