class Solargraph::LanguageServer::Progress
Progress notification handling for language server hosts.
Constants
- CREATED
- FINISHED
- WAITING
Attributes
@return [String, nil]
@return [String, nil]
@return [Integer]
@return [Symbol]
@return [String]
@return [String]
Public Class Methods
Source
# File lib/solargraph/language_server/progress.rb, line 33 def initialize title @title = title @uuid = SecureRandom.uuid @percentage = 0 @status = WAITING end
@param title [String]
Public Instance Methods
Source
# File lib/solargraph/language_server/progress.rb, line 43 def begin message, percentage @kind = 'begin' @message = message @percentage = percentage end
@param message [String] @param percentage [Integer] @return [void]
Source
# File lib/solargraph/language_server/progress.rb, line 79 def created? [CREATED, FINISHED].include?(status) end
Source
# File lib/solargraph/language_server/progress.rb, line 60 def finish message @kind = 'end' @message = message @percentage = 100 true end
@param message [String] @return [void]
Source
# File lib/solargraph/language_server/progress.rb, line 83 def finished? status == FINISHED end
Source
# File lib/solargraph/language_server/progress.rb, line 52 def report message, percentage @kind = 'report' @message = message @percentage = percentage end
@param message [String] @param percentage [Integer] @return [void]
Source
# File lib/solargraph/language_server/progress.rb, line 69 def send host return unless host.client_supports_progress? && !finished? message = build create(host) host.send_notification '$/progress', message @status = FINISHED if kind == 'end' keep_alive host end
@param host [Solargraph::LanguageServer::Host] @return [void]
Private Instance Methods
Source
# File lib/solargraph/language_server/progress.rb, line 99 def build { token: uuid, value: { kind: kind, cancellable: false }.merge(build_value) } end
@return [Hash]
Source
# File lib/solargraph/language_server/progress.rb, line 110 def build_value case kind when 'begin' { title: title, message: message, percentage: percentage } when 'report' { message: message, percentage: percentage } when 'end' { message: message } else raise "Invalid progress kind #{kind}" end end
@return [Hash]
Source
# File lib/solargraph/language_server/progress.rb, line 91 def create host return if created? host.send_request 'window/workDoneProgress/create', { token: uuid } @status = CREATED end
@param host [Solargraph::LanguageServer::Host] @return [void]
Source
# File lib/solargraph/language_server/progress.rb, line 125 def keep_alive host mutex.synchronize { @last = Time.now } @keep_alive ||= Thread.new do until finished? sleep 10 break if finished? next if mutex.synchronize { Time.now - @last < 10 } send host end end end
@param host [Host] @return [void]
Source
# File lib/solargraph/language_server/progress.rb, line 138 def mutex @mutex ||= Mutex.new end
@return [Thread::Mutex]