Skip to content

Commit 959bc55

Browse files
authored
Add unique server id (#278)
1 parent 7eaa1ff commit 959bc55

File tree

3 files changed

+18
-8
lines changed

3 files changed

+18
-8
lines changed

apps/language_server/lib/language_server/providers/code_lens.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ defmodule ElixirLS.LanguageServer.Providers.CodeLens do
110110
end
111111
end
112112

113-
def code_lens(uri, text) do
113+
def code_lens(server_instance_id, uri, text) do
114114
resp =
115115
for {_, line, {mod, fun, arity}, contract, is_macro} <- Server.suggest_contracts(uri),
116116
SourceFile.function_def_on_line?(text, line, fun),
@@ -119,7 +119,7 @@ defmodule ElixirLS.LanguageServer.Providers.CodeLens do
119119
"range" => range(line - 1, 0, line - 1, 0),
120120
"command" => %{
121121
"title" => "@spec #{spec}",
122-
"command" => "spec",
122+
"command" => "spec:#{server_instance_id}",
123123
"arguments" => [
124124
%{
125125
"uri" => uri,

apps/language_server/lib/language_server/providers/execute_command.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ defmodule ElixirLS.LanguageServer.Providers.ExecuteCommand do
66
alias ElixirLS.LanguageServer.{JsonRpc, SourceFile}
77
import ElixirLS.LanguageServer.Protocol
88

9-
def execute("spec", args, source_files) do
9+
def execute("spec:" <> _, args, source_files) do
1010
[
1111
%{
1212
"uri" => uri,

apps/language_server/lib/language_server/server.ex

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ defmodule ElixirLS.LanguageServer.Server do
3535
use Protocol
3636

3737
defstruct [
38+
:server_instance_id,
3839
:build_ref,
3940
:dialyzer_sup,
4041
:client_capabilities,
@@ -346,6 +347,9 @@ defmodule ElixirLS.LanguageServer.Server do
346347
defp handle_request(initialize_req(_id, root_uri, client_capabilities), state) do
347348
show_version_warnings()
348349

350+
server_instance_id =
351+
:crypto.strong_rand_bytes(32) |> Base.url_encode64() |> binary_part(0, 32)
352+
349353
state =
350354
case root_uri do
351355
"file://" <> _ ->
@@ -357,7 +361,11 @@ defmodule ElixirLS.LanguageServer.Server do
357361
state
358362
end
359363

360-
state = %{state | client_capabilities: client_capabilities}
364+
state = %{
365+
state
366+
| client_capabilities: client_capabilities,
367+
server_instance_id: server_instance_id
368+
}
361369

362370
# If we don't receive workspace/didChangeConfiguration for 5 seconds, use default settings
363371
Process.send_after(self(), :default_config, 5000)
@@ -374,7 +382,7 @@ defmodule ElixirLS.LanguageServer.Server do
374382
Process.send_after(self(), :send_file_watchers, 100)
375383
end
376384

377-
{:ok, %{"capabilities" => server_capabilities()}, state}
385+
{:ok, %{"capabilities" => server_capabilities(server_instance_id)}, state}
378386
end
379387

380388
defp handle_request(request(_id, "shutdown", _params), state) do
@@ -519,7 +527,9 @@ defmodule ElixirLS.LanguageServer.Server do
519527

520528
defp handle_request(code_lens_req(_id, uri), state) do
521529
if dialyzer_enabled?(state) and state.settings["suggestSpecs"] != false do
522-
{:async, fn -> CodeLens.code_lens(uri, state.source_files[uri].text) end, state}
530+
{:async,
531+
fn -> CodeLens.code_lens(state.server_instance_id, uri, state.source_files[uri].text) end,
532+
state}
523533
else
524534
{:ok, nil, state}
525535
end
@@ -556,7 +566,7 @@ defmodule ElixirLS.LanguageServer.Server do
556566
end)
557567
end
558568

559-
defp server_capabilities do
569+
defp server_capabilities(server_instance_id) do
560570
%{
561571
"macroExpansion" => true,
562572
"textDocumentSync" => %{
@@ -574,7 +584,7 @@ defmodule ElixirLS.LanguageServer.Server do
574584
"workspaceSymbolProvider" => true,
575585
"documentOnTypeFormattingProvider" => %{"firstTriggerCharacter" => "\n"},
576586
"codeLensProvider" => %{"resolveProvider" => false},
577-
"executeCommandProvider" => %{"commands" => ["spec"]},
587+
"executeCommandProvider" => %{"commands" => ["spec:#{server_instance_id}"]},
578588
"workspace" => %{
579589
"workspaceFolders" => %{"supported" => true, "changeNotifications" => true}
580590
}

0 commit comments

Comments
 (0)