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

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] = message if message
  @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] = message if message
    protocol.write_notification('$/progress', { token: token, value: value })
  end
  handle.define_singleton_method(:done) do |message: nil|
    value = { kind: 'end' }
    value[:message] = message if message
    protocol.write_notification('$/progress', { token: token, value: value })
  end
  handle
end

#next_progress_token_idObject



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