Skip to content

Commit c5d7edc

Browse files
committed
Remove support for query prefixes in WorkspaceSymbolsProvider
Closes elixir-lsp#392
1 parent 3ce835f commit c5d7edc

File tree

2 files changed

+106
-190
lines changed

2 files changed

+106
-190
lines changed

apps/language_server/lib/language_server/providers/workspace_symbols.ex

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -54,20 +54,7 @@ defmodule ElixirLS.LanguageServer.Providers.WorkspaceSymbols do
5454

5555
@spec symbols(String.t()) :: {:ok, [symbol_information_t]}
5656
def symbols(query, server \\ __MODULE__) do
57-
results =
58-
case query do
59-
"f " <> fun_query ->
60-
query(:functions, fun_query, server)
61-
62-
"t " <> type_query ->
63-
query(:types, type_query, server)
64-
65-
"c " <> callback_query ->
66-
query(:callbacks, callback_query, server)
67-
68-
module_query ->
69-
query(:modules, module_query, server)
70-
end
57+
results = query(query, server)
7158

7259
{:ok, results}
7360
end
@@ -105,10 +92,10 @@ defmodule ElixirLS.LanguageServer.Providers.WorkspaceSymbols do
10592
end
10693

10794
@impl GenServer
108-
def handle_call({:query, key, query}, from, state) do
95+
def handle_call({:query, query}, from, state) do
10996
{:ok, _pid} =
11097
Task.start_link(fn ->
111-
results = get_results(state, key, query)
98+
results = get_results(state, query)
11299
GenServer.reply(from, results)
113100
end)
114101

@@ -352,13 +339,13 @@ defmodule ElixirLS.LanguageServer.Providers.WorkspaceSymbols do
352339
|> elem(0)
353340
end
354341

355-
defp query(kind, query, server) do
342+
defp query(query, server) do
356343
case String.trim(query) do
357344
"" ->
358345
[]
359346

360347
trimmed ->
361-
GenServer.call(server, {:query, kind, trimmed})
348+
GenServer.call(server, {:query, trimmed})
362349
end
363350
end
364351

@@ -442,14 +429,13 @@ defmodule ElixirLS.LanguageServer.Providers.WorkspaceSymbols do
442429
:ok
443430
end
444431

445-
@spec get_results(state_t, key_t, String.t()) :: [symbol_information_t]
446-
defp get_results(state, key, query) do
432+
@spec get_results(state_t, String.t()) :: [symbol_information_t]
433+
defp get_results(state, query) do
447434
query_downcase = String.downcase(query)
448435
query_length = String.length(query)
449436
arity_suffix = Regex.run(@arity_suffix_regex, query)
450437

451-
state
452-
|> Map.fetch!(key)
438+
(state.modules ++ state.functions ++ state.types ++ state.callbacks)
453439
|> process_chunked(fn chunk ->
454440
chunk
455441
|> Enum.map(&{&1, get_score(&1.name, query, query_downcase, query_length, arity_suffix)})
@@ -505,15 +491,15 @@ defmodule ElixirLS.LanguageServer.Providers.WorkspaceSymbols do
505491
end
506492

507493
defp symbol_name(:functions, {module, function, arity}) do
508-
"f #{inspect(module)}.#{function}/#{arity}"
494+
"#{inspect(module)}.#{function}/#{arity}"
509495
end
510496

511497
defp symbol_name(:types, {module, type, arity}) do
512-
"t #{inspect(module)}.#{type}/#{arity}"
498+
"#{inspect(module)}.#{type}/#{arity}"
513499
end
514500

515501
defp symbol_name(:callbacks, {module, callback, arity}) do
516-
"c #{inspect(module)}.#{callback}/#{arity}"
502+
"#{inspect(module)}.#{callback}/#{arity}"
517503
end
518504

519505
@spec build_range(nil | non_neg_integer) :: range_t

apps/language_server/test/providers/workspace_symbols_test.exs

Lines changed: 95 additions & 165 deletions
Original file line numberDiff line numberDiff line change
@@ -44,180 +44,110 @@ defmodule ElixirLS.LanguageServer.Providers.WorkspaceSymbolsTest do
4444
end
4545

4646
test "returns modules", %{server: server} do
47-
assert {:ok,
48-
[
49-
%{
50-
kind: 2,
51-
location: %{
52-
range: %{end: %{character: 0, line: 1}, start: %{character: 0, line: 0}},
53-
uri: uri
54-
},
55-
name: "ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols"
56-
}
57-
]} = WorkspaceSymbols.symbols("ElixirLS.LanguageServer.Fixtures.", server)
58-
59-
assert uri |> String.ends_with?("test/support/fixtures/workspace_symbols.ex")
60-
61-
assert {:ok,
62-
[
63-
%{
64-
kind: 2,
65-
location: %{
66-
range: %{end: %{character: 0, line: 1}, start: %{character: 0, line: 0}},
67-
uri: uri
68-
},
69-
name: "ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols"
70-
}
71-
]} = WorkspaceSymbols.symbols("work", server)
72-
73-
assert uri |> String.ends_with?("test/support/fixtures/workspace_symbols.ex")
47+
assert {:ok, list} = WorkspaceSymbols.symbols("ElixirLS.LanguageServer.Fixtures.", server)
48+
49+
assert module =
50+
Enum.find(list, &(&1.name == "ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols"))
51+
52+
assert module.kind == 2
53+
assert module.location.uri |> String.ends_with?("test/support/fixtures/workspace_symbols.ex")
54+
55+
assert module.location.range == %{
56+
end: %{character: 0, line: 1},
57+
start: %{character: 0, line: 0}
58+
}
59+
60+
assert WorkspaceSymbols.symbols("work", server)
61+
|> elem(1)
62+
|> Enum.any?(&(&1.name == "ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols"))
7463
end
7564

7665
test "returns functions", %{server: server} do
77-
assert {
78-
:ok,
79-
[
80-
%{
81-
kind: 12,
82-
location: %{
83-
range: %{end: %{character: 0, line: 1}, start: %{character: 0, line: 0}},
84-
uri: uri
85-
},
86-
name: "f ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols.module_info/1"
87-
},
88-
%{
89-
kind: 12,
90-
location: %{
91-
range: %{end: %{character: 0, line: 1}, start: %{character: 0, line: 0}}
92-
},
93-
name: "f ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols.module_info/0"
94-
},
95-
%{
96-
kind: 12,
97-
location: %{
98-
range: %{end: %{character: 0, line: 1}, start: %{character: 0, line: 0}}
99-
},
100-
name: "f ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols.behaviour_info/1"
101-
},
102-
%{
103-
kind: 12,
104-
location: %{
105-
range: %{end: %{character: 0, line: 3}, start: %{character: 0, line: 2}}
106-
},
107-
name: "f ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols.some_macro/1"
108-
},
109-
%{
110-
kind: 12,
111-
location: %{
112-
range: %{end: %{character: 0, line: 2}, start: %{character: 0, line: 1}}
113-
},
114-
name: "f ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols.some_function/1"
115-
},
116-
%{
117-
kind: 12,
118-
location: %{
119-
range: %{end: %{character: 0, line: 1}, start: %{character: 0, line: 0}}
120-
},
121-
name: "f ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols.__info__/1"
122-
}
123-
]
124-
} = WorkspaceSymbols.symbols("f ElixirLS.LanguageServer.Fixtures.", server)
125-
126-
assert uri |> String.ends_with?("test/support/fixtures/workspace_symbols.ex")
127-
128-
assert {:ok,
129-
[
130-
%{
131-
kind: 12,
132-
location: %{
133-
range: %{end: %{character: 0, line: 2}, start: %{character: 0, line: 1}},
134-
uri: uri
135-
},
136-
name: "f ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols.some_function/1"
137-
}
138-
]} = WorkspaceSymbols.symbols("f fun", server)
139-
140-
assert uri |> String.ends_with?("test/support/fixtures/workspace_symbols.ex")
66+
assert {:ok, list} = WorkspaceSymbols.symbols("ElixirLS.LanguageServer.Fixtures.", server)
67+
68+
assert some_function =
69+
Enum.find(
70+
list,
71+
&(&1.name == "ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols.some_function/1")
72+
)
73+
74+
assert some_function.kind == 12
75+
76+
assert some_function.location.uri
77+
|> String.ends_with?("test/support/fixtures/workspace_symbols.ex")
78+
79+
assert some_function.location.range == %{
80+
end: %{character: 0, line: 2},
81+
start: %{character: 0, line: 1}
82+
}
83+
84+
assert WorkspaceSymbols.symbols("fun", server)
85+
|> elem(1)
86+
|> Enum.any?(
87+
&(&1.name == "ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols.some_function/1")
88+
)
14189
end
14290

14391
test "returns types", %{server: server} do
144-
assert {
145-
:ok,
146-
[
147-
%{
148-
kind: 5,
149-
location: %{
150-
range: %{end: %{character: 0, line: 8}, start: %{character: 0, line: 7}},
151-
uri: uri
152-
},
153-
name: "t ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols.some_type/0"
154-
},
155-
%{
156-
kind: 5,
157-
location: %{
158-
range: %{end: %{character: 0, line: 9}, start: %{character: 0, line: 8}}
159-
},
160-
name: "t ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols.some_opaque_type/0"
161-
}
162-
]
163-
} = WorkspaceSymbols.symbols("t ElixirLS.LanguageServer.Fixtures.", server)
164-
165-
assert uri |> String.ends_with?("test/support/fixtures/workspace_symbols.ex")
166-
167-
assert {
168-
:ok,
169-
[
170-
%{
171-
kind: 5,
172-
location: %{
173-
range: %{end: %{character: 0, line: 9}, start: %{character: 0, line: 8}},
174-
uri: uri
175-
},
176-
name: "t ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols.some_opaque_type/0"
177-
}
178-
]
179-
} = WorkspaceSymbols.symbols("t opa", server)
180-
181-
assert uri |> String.ends_with?("test/support/fixtures/workspace_symbols.ex")
92+
assert {:ok, list} = WorkspaceSymbols.symbols("ElixirLS.LanguageServer.Fixtures.", server)
93+
94+
assert some_type =
95+
Enum.find(
96+
list,
97+
&(&1.name == "ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols.some_type/0")
98+
)
99+
100+
assert some_type.kind == 5
101+
102+
assert some_type.location.uri
103+
|> String.ends_with?("test/support/fixtures/workspace_symbols.ex")
104+
105+
assert some_type.location.range == %{
106+
end: %{character: 0, line: 8},
107+
start: %{character: 0, line: 7}
108+
}
109+
110+
assert Enum.any?(
111+
list,
112+
&(&1.name == "ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols.some_opaque_type/0")
113+
)
114+
115+
assert WorkspaceSymbols.symbols("opa", server)
116+
|> elem(1)
117+
|> Enum.any?(
118+
&(&1.name == "ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols.some_opaque_type/0")
119+
)
182120
end
183121

184122
test "returns callbacks", %{server: server} do
185-
assert {
186-
:ok,
187-
[
188-
%{
189-
kind: 24,
190-
location: %{
191-
range: %{end: %{character: 0, line: 5}, start: %{character: 0, line: 4}},
192-
uri: uri
193-
},
194-
name: "c ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols.some_callback/1"
195-
},
196-
%{
197-
kind: 24,
198-
location: %{
199-
range: %{end: %{character: 0, line: 6}, start: %{character: 0, line: 5}}
200-
},
201-
name: "c ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols.some_macrocallback/1"
202-
}
203-
]
204-
} = WorkspaceSymbols.symbols("c ElixirLS.LanguageServer.Fixtures.", server)
205-
206-
assert uri |> String.ends_with?("test/support/fixtures/workspace_symbols.ex")
207-
208-
assert {:ok,
209-
[
210-
%{
211-
kind: 24,
212-
location: %{
213-
range: %{end: %{character: 0, line: 6}, start: %{character: 0, line: 5}},
214-
uri: uri
215-
},
216-
name: "c ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols.some_macrocallback/1"
217-
}
218-
]} = WorkspaceSymbols.symbols("c macr", server)
219-
220-
assert uri |> String.ends_with?("test/support/fixtures/workspace_symbols.ex")
123+
assert {:ok, list} = WorkspaceSymbols.symbols("ElixirLS.LanguageServer.Fixtures.", server)
124+
125+
assert some_callback =
126+
Enum.find(
127+
list,
128+
&(&1.name == "ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols.some_callback/1")
129+
)
130+
131+
assert some_callback.kind == 24
132+
133+
assert some_callback.location.uri
134+
|> String.ends_with?("test/support/fixtures/workspace_symbols.ex")
135+
136+
assert some_callback.location.range == %{
137+
end: %{character: 0, line: 5},
138+
start: %{character: 0, line: 4}
139+
}
140+
141+
assert Enum.any?(
142+
list,
143+
&(&1.name == "ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols.some_macrocallback/1")
144+
)
145+
146+
assert WorkspaceSymbols.symbols("macr", server)
147+
|> elem(1)
148+
|> Enum.any?(
149+
&(&1.name == "ElixirLS.LanguageServer.Fixtures.WorkspaceSymbols.some_macrocallback/1")
150+
)
221151
end
222152

223153
defp wait_until_indexed(pid) do

0 commit comments

Comments
 (0)