Module: MilkTea::LSP::Server::ServerProgress
- Included in:
- MilkTea::LSP::Server
- Defined in:
- lib/milk_tea/lsp/server/progress.rb
Constant Summary collapse
- PROGRESS_TOKEN_PREFIX =
"mt-lsp-progress"
Instance Method Summary collapse
- #create_progress(title:, message: nil, cancellable: false) ⇒ Object
- #create_progress_handle(protocol, token) ⇒ Object
- #next_progress_token_id ⇒ Object
Instance Method Details
#create_progress(title:, message: nil, cancellable: false) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/milk_tea/lsp/server/progress.rb', line 9 def create_progress(title:, message: nil, cancellable: false) token = "#{PROGRESS_TOKEN_PREFIX}-#{next_progress_token_id}" @protocol.send_request('window/workDoneProgress/create', { token: token }) do |_result, error| warn "[LSP] client rejected progress token #{token}: #{error}" if error end begin_value = { kind: 'begin', title: title, cancellable: cancellable } begin_value[:message] = if @protocol.write_notification('$/progress', { token: token, value: begin_value }) create_progress_handle(@protocol, token) end |
#create_progress_handle(protocol, token) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/milk_tea/lsp/server/progress.rb', line 22 def create_progress_handle(protocol, token) handle = Object.new handle.define_singleton_method(:report) do |percentage: nil, message: nil| value = { kind: 'report' } value[:percentage] = percentage if percentage value[:message] = if protocol.write_notification('$/progress', { token: token, value: value }) end handle.define_singleton_method(:done) do |message: nil| value = { kind: 'end' } value[:message] = if protocol.write_notification('$/progress', { token: token, value: value }) end handle end |
#next_progress_token_id ⇒ Object
38 39 40 41 |
# File 'lib/milk_tea/lsp/server/progress.rb', line 38 def next_progress_token_id @progress_token_counter ||= 0 @progress_token_counter += 1 end |