Skip to content

Commit 607691e

Browse files
author
Étienne Lévesque
authored
Adds a "projectDir" arg to test code lenses (#477)
* Adds a "projectDir" arg to test code lenses * Add tests
1 parent 0e932ca commit 607691e

File tree

5 files changed

+33
-24
lines changed

5 files changed

+33
-24
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ defmodule ElixirLS.LanguageServer.Providers.CodeLens do
1313
def spec_code_lens(server_instance_id, uri, text),
1414
do: CodeLens.TypeSpec.code_lens(server_instance_id, uri, text)
1515

16-
def test_code_lens(uri, text), do: CodeLens.Test.code_lens(uri, text)
16+
def test_code_lens(uri, text, project_dir), do: CodeLens.Test.code_lens(uri, text, project_dir)
1717

1818
def build_code_lens(line, title, command, argument) do
1919
%{

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

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ defmodule ElixirLS.LanguageServer.Providers.CodeLens.Test do
1616

1717
@run_test_command "elixir.lens.test.run"
1818

19-
def code_lens(uri = "file:" <> _, text) do
19+
def code_lens(uri = "file:" <> _, text, project_dir) do
2020
with {:ok, buffer_file_metadata} <- parse_source(text) do
2121
source_lines = SourceFile.lines(text)
2222

@@ -32,29 +32,30 @@ defmodule ElixirLS.LanguageServer.Providers.CodeLens.Test do
3232
|> Enum.sort_by(&elem(&1, 0))
3333

3434
describe_blocks = find_describe_blocks(lines_to_env_list, calls_list, source_lines)
35-
describe_lenses = get_describe_lenses(describe_blocks, file_path)
35+
describe_lenses = get_describe_lenses(describe_blocks, file_path, project_dir)
3636

3737
test_lenses =
3838
lines_to_env_list
3939
|> find_test_blocks(calls_list, describe_blocks, source_lines)
40-
|> get_test_lenses(file_path)
40+
|> get_test_lenses(file_path, project_dir)
4141

4242
module_lenses =
4343
lines_to_env_list
4444
|> get_test_modules()
45-
|> get_module_lenses(file_path)
45+
|> get_module_lenses(file_path, project_dir)
4646

4747
{:ok, test_lenses ++ describe_lenses ++ module_lenses}
4848
end
4949
end
5050

5151
def code_lens(_uri, _text), do: {:ok, []}
5252

53-
defp get_test_lenses(test_blocks, file_path) do
53+
defp get_test_lenses(test_blocks, file_path, project_dir) do
5454
args = fn block ->
5555
%{
5656
"filePath" => file_path,
57-
"testName" => block.name
57+
"testName" => block.name,
58+
"projectDir" => project_dir
5859
}
5960
|> Map.merge(if block.describe != nil, do: %{"describe" => block.describe.name}, else: %{})
6061
end
@@ -65,12 +66,13 @@ defmodule ElixirLS.LanguageServer.Providers.CodeLens.Test do
6566
end)
6667
end
6768

68-
defp get_describe_lenses(describe_blocks, file_path) do
69+
defp get_describe_lenses(describe_blocks, file_path, project_dir) do
6970
describe_blocks
7071
|> Enum.map(fn block ->
7172
CodeLens.build_code_lens(block.line, "Run tests", @run_test_command, %{
7273
"filePath" => file_path,
73-
"describe" => block.name
74+
"describe" => block.name,
75+
"projectDir" => project_dir
7476
})
7577
end)
7678
end
@@ -112,12 +114,13 @@ defmodule ElixirLS.LanguageServer.Providers.CodeLens.Test do
112114
end
113115
end
114116

115-
defp get_module_lenses(test_modules, file_path) do
117+
defp get_module_lenses(test_modules, file_path, project_dir) do
116118
test_modules
117119
|> Enum.map(fn {module, line} ->
118120
CodeLens.build_code_lens(line, "Run tests in module", @run_test_command, %{
119121
"filePath" => file_path,
120-
"module" => module
122+
"module" => module,
123+
"projectDir" => project_dir
121124
})
122125
end)
123126
end

apps/language_server/lib/language_server/server.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -796,7 +796,7 @@ defmodule ElixirLS.LanguageServer.Server do
796796

797797
defp get_test_code_lenses(state, uri, source_file) do
798798
if state.settings["enableTestLenses"] == true do
799-
CodeLens.test_code_lens(uri, source_file.text)
799+
CodeLens.test_code_lens(uri, source_file.text, state.project_dir)
800800
else
801801
{:ok, []}
802802
end

apps/language_server/test/providers/code_lens/test_test.exs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ defmodule ElixirLS.LanguageServer.Providers.CodeLens.TestTest do
44
import ElixirLS.LanguageServer.Test.PlatformTestHelpers
55
alias ElixirLS.LanguageServer.Providers.CodeLens
66

7+
@project_dir "/project"
8+
79
setup context do
810
ElixirLS.LanguageServer.Build.load_all_modules()
911

@@ -29,7 +31,7 @@ defmodule ElixirLS.LanguageServer.Providers.CodeLens.TestTest do
2931
end
3032
"""
3133

32-
{:ok, lenses} = CodeLens.Test.code_lens(uri, text)
34+
{:ok, lenses} = CodeLens.Test.code_lens(uri, text, @project_dir)
3335

3436
assert lenses ==
3537
[
@@ -55,7 +57,7 @@ defmodule ElixirLS.LanguageServer.Providers.CodeLens.TestTest do
5557
end
5658
"""
5759

58-
{:ok, lenses} = CodeLens.Test.code_lens(uri, text)
60+
{:ok, lenses} = CodeLens.Test.code_lens(uri, text, @project_dir)
5961

6062
assert lenses ==
6163
[
@@ -76,7 +78,7 @@ defmodule ElixirLS.LanguageServer.Providers.CodeLens.TestTest do
7678
end
7779
"""
7880

79-
{:ok, lenses} = CodeLens.Test.code_lens(uri, text)
81+
{:ok, lenses} = CodeLens.Test.code_lens(uri, text, @project_dir)
8082

8183
assert lenses == []
8284
end
@@ -96,7 +98,7 @@ defmodule ElixirLS.LanguageServer.Providers.CodeLens.TestTest do
9698
end
9799
"""
98100

99-
{:ok, lenses} = CodeLens.Test.code_lens(uri, text)
101+
{:ok, lenses} = CodeLens.Test.code_lens(uri, text, @project_dir)
100102

101103
assert Enum.member?(
102104
lenses,
@@ -128,7 +130,7 @@ defmodule ElixirLS.LanguageServer.Providers.CodeLens.TestTest do
128130
end
129131
"""
130132

131-
{:ok, lenses} = CodeLens.Test.code_lens(uri, text)
133+
{:ok, lenses} = CodeLens.Test.code_lens(uri, text, @project_dir)
132134

133135
assert Enum.member?(
134136
lenses,
@@ -159,7 +161,7 @@ defmodule ElixirLS.LanguageServer.Providers.CodeLens.TestTest do
159161
end
160162
"""
161163

162-
{:ok, lenses} = CodeLens.Test.code_lens(uri, text)
164+
{:ok, lenses} = CodeLens.Test.code_lens(uri, text, @project_dir)
163165

164166
assert Enum.member?(
165167
lenses,
@@ -300,7 +302,7 @@ defmodule ElixirLS.LanguageServer.Providers.CodeLens.TestTest do
300302
test "returns module lens on the module declaration line", %{text: text} do
301303
uri = "file:///project/file.ex"
302304

303-
{:ok, lenses} = CodeLens.Test.code_lens(uri, text)
305+
{:ok, lenses} = CodeLens.Test.code_lens(uri, text, @project_dir)
304306

305307
assert Enum.member?(
306308
lenses,
@@ -313,7 +315,7 @@ defmodule ElixirLS.LanguageServer.Providers.CodeLens.TestTest do
313315
test "returns test lenses with describe info", %{text: text} do
314316
uri = "file:///project/file.ex"
315317

316-
{:ok, lenses} = CodeLens.Test.code_lens(uri, text)
318+
{:ok, lenses} = CodeLens.Test.code_lens(uri, text, @project_dir)
317319

318320
assert Enum.member?(
319321
lenses,
@@ -328,7 +330,8 @@ defmodule ElixirLS.LanguageServer.Providers.CodeLens.TestTest do
328330
defp build_code_lens(line, target, file_path, args) do
329331
arguments =
330332
%{
331-
"filePath" => file_path
333+
"filePath" => file_path,
334+
"projectDir" => @project_dir
332335
}
333336
|> Map.merge(args)
334337

apps/language_server/test/server_test.exs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1161,8 +1161,9 @@ defmodule ElixirLS.LanguageServer.ServerTest do
11611161
file_uri = SourceFile.path_to_uri(file_path)
11621162
file_absolute_path = SourceFile.path_from_uri(file_uri)
11631163
text = File.read!(file_path)
1164+
project_dir = SourceFile.path_from_uri(root_uri())
11641165

1165-
fake_initialize(server)
1166+
initialize(server)
11661167

11671168
Server.receive_packet(
11681169
server,
@@ -1184,7 +1185,8 @@ defmodule ElixirLS.LanguageServer.ServerTest do
11841185
"arguments" => [
11851186
%{
11861187
"filePath" => ^file_absolute_path,
1187-
"testName" => "fixture test"
1188+
"testName" => "fixture test",
1189+
"projectDir" => ^project_dir
11881190
}
11891191
],
11901192
"command" => "elixir.lens.test.run",
@@ -1200,7 +1202,8 @@ defmodule ElixirLS.LanguageServer.ServerTest do
12001202
"arguments" => [
12011203
%{
12021204
"filePath" => ^file_absolute_path,
1203-
"module" => "Elixir.TestCodeLensTest"
1205+
"module" => "Elixir.TestCodeLensTest",
1206+
"projectDir" => ^project_dir
12041207
}
12051208
],
12061209
"command" => "elixir.lens.test.run",

0 commit comments

Comments
 (0)