Skip to content

Commit 94b802e

Browse files
authored
Merge pull request #173 from axelson/document-symbols-handle-partial-initiation
textDocument/documentSymbol should handle a non-fully initialized server
2 parents 0e339c8 + 6dde399 commit 94b802e

File tree

3 files changed

+27
-5
lines changed

3 files changed

+27
-5
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
### Unreleased
22

3+
Bug Fixes:
4+
- Fix `textDocument/documentSymbol` on a non-fully initialized server (thanks [Jason Axelson](https://github.com/axelson)) [#173](https://github.com/elixir-lsp/elixir-ls/pull/173)
5+
36
### v0.3.2: 28 Mar 2020
47

58
Improvements:

apps/language_server/lib/language_server/server.ex

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -394,12 +394,19 @@ defmodule ElixirLS.LanguageServer.Server do
394394
defp handle_request(document_symbol_req(_id, uri), state) do
395395
fun = fn ->
396396
hierarchical? =
397-
state.client_capabilities
398-
|> Map.get("textDocument", %{})
399-
|> Map.get("documentSymbol", %{})
400-
|> Map.get("hierarchicalDocumentSymbolSupport", false)
397+
get_in(state.client_capabilities, [
398+
"textDocument",
399+
"documentSymbol",
400+
"hierarchicalDocumentSymbolSupport"
401+
]) || false
401402

402-
DocumentSymbols.symbols(uri, state.source_files[uri].text, hierarchical?)
403+
source_file = state.source_files[uri]
404+
405+
if source_file do
406+
DocumentSymbols.symbols(uri, source_file.text, hierarchical?)
407+
else
408+
{:ok, []}
409+
end
403410
end
404411

405412
{:async, fun, state}

apps/language_server/test/server_test.exs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,18 @@ defmodule ElixirLS.LanguageServer.ServerTest do
126126
assert %{received_shutdown?: true} = :sys.get_state(server)
127127
end
128128

129+
test "document symbols request when there are no client capabilities and the source file is not loaded into the server",
130+
%{server: server} do
131+
server_state = :sys.get_state(server)
132+
assert server_state.client_capabilities == nil
133+
assert server_state.source_files == %{}
134+
135+
Server.receive_packet(server, document_symbol_req(1, "file:///file.ex"))
136+
137+
resp = assert_receive(%{"id" => 1}, 1000)
138+
assert resp["result"] == []
139+
end
140+
129141
test "incremental formatter", %{server: server} do
130142
in_fixture(__DIR__, "formatter", fn ->
131143
uri = Path.join([root_uri(), "file.ex"])

0 commit comments

Comments
 (0)