Module: Canopus::Workspace::LanguageServerConfigurable

Defined in:
lib/canopus/workspace/language_server_configurable.rb

Instance Method Summary collapse

Instance Method Details

#language_server_states(language) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/canopus/workspace/language_server_configurable.rb', line 5

def language_server_states(language)
  options = server_options_list(@client_options&.[](language))
  language_client_list(language).each_with_index.map do |client, index|
    command = options.dig(index, :command) || []
    {language: language, index: index, name: File.basename(command.first.to_s), state: client.state}.freeze
  end.freeze
end

#restart_language_server(language, index) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/canopus/workspace/language_server_configurable.rb', line 21

def restart_language_server(language, index)
  (@client_lock ||= Mutex.new).synchronize do
    options = server_options_list(@client_options&.[](language) || language_server_options(language))
    clients = language_client_list(language).dup
    option = options.fetch(index)
    current = clients.fetch(index)
    replacement = start_language_client(language, option, index: index)
    replacements = clients.dup
    replacements[index] = replacement
    store_language_clients(language, replacements)
    begin
      open_language_client_documents(language, replacement)
    rescue StandardError
      store_language_clients(language, clients)
      cleanup_language_clients(language, [replacement])
      raise
    end
    retire_language_client(language, current)
    @message = "Restarted #{File.basename(option.fetch(:command).first)}"
    replacement
  end
end

#show_language_server_restart ⇒ Object



13
14
15
16
17
18
19
# File 'lib/canopus/workspace/language_server_configurable.rb', line 13

def show_language_server_restart
  language = editor.language_document.definition.name
  items = language_server_states(language)
  self.palette = {kind: :language_servers, query: +"", index: 0,
    matches: items.map { |item| "#{item[:name]} (#{item[:state]})" }, items: items}
  update_palette
end