class Steep::Server::BaseWorker
def run
def run tags = Steep.logger.formatter.current_tags.dup thread = Thread.new do Thread.current.abort_on_exception = true Steep.logger.formatter.push_tags(*tags) Steep.logger.tagged "background" do while job = queue.pop case job when ShutdownJob writer.write(id: job.id, result: nil) else if skip_job? Steep.logger.info "Skipping job..." else begin handle_job(job) rescue => exn Steep.log_error exn writer.write( { method: "window/showMessage", params: { type: LSP::Constant::MessageType::ERROR, message: "Unexpected error: #{exn.message} (#{exn.class})" } } ) end end end end end end Steep.logger.tagged "frontend" do begin reader.read do |request| Steep.logger.info "Received message from master: #{request[:method]}(#{request[:id]})" case request[:method] when "shutdown" queue << ShutdownJob.new(id: request[:id]) @skip_job = skip_jobs_after_shutdown? queue.close when "exit" break else handle_request(request) unless @shutdown end end ensure thread.join end end end