Skip to content

Commit d9b2abe

Browse files
committed
Apply the remaining suggestions
1 parent f4a35fc commit d9b2abe

File tree

4 files changed

+43
-51
lines changed

4 files changed

+43
-51
lines changed

apps/language_server/lib/language_server/experimental/code_mod/location.ex

Lines changed: 0 additions & 28 deletions
This file was deleted.
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
defmodule ElixirLS.LanguageServer.Experimental.Provider.Handlers.GotoDefinition do
22
alias ElixirLS.LanguageServer.Experimental.Protocol.Requests.GotoDefinition
33
alias ElixirLS.LanguageServer.Experimental.Protocol.Responses
4-
alias ElixirLS.LanguageServer.Experimental.CodeMod.Location, as: CodeModLocation
54
alias ElixirLS.LanguageServer.Experimental.SourceFile
5+
alias ElixirLS.LanguageServer.Experimental.SourceFile.Conversions
66
require Logger
77

88
def handle(%GotoDefinition{} = request, _) do
@@ -13,15 +13,15 @@ defmodule ElixirLS.LanguageServer.Experimental.Provider.Handlers.GotoDefinition
1313

1414
with %ElixirSense.Location{} = location <-
1515
ElixirSense.definition(source_file_string, pos.line, pos.character + 1),
16-
{:ok, lsp_location} <- CodeModLocation.to_lsp(location, source_file) do
16+
{:ok, lsp_location} <- Conversions.to_lsp(location, source_file) do
1717
{:reply, Responses.GotoDefinition.new(request.id, lsp_location)}
1818
else
1919
nil ->
2020
{:reply, Responses.GotoDefinition.new(request.id, nil)}
2121

2222
{:error, reason} ->
2323
Logger.error("GotoDefinition failed: #{inspect(reason)}")
24-
{:error, Responses.GotoDefinition.error(request.id, :request_failed, reason)}
24+
{:error, Responses.GotoDefinition.error(request.id, :request_failed, inspect(reason))}
2525
end
2626
end
2727
end

apps/language_server/lib/language_server/experimental/source_file/conversions.ex

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ defmodule ElixirLS.LanguageServer.Experimental.SourceFile.Conversions do
1515
alias ElixirLS.LanguageServer.Experimental.SourceFile.Position, as: ElixirPosition
1616
alias ElixirLS.LanguageServer.Experimental.Protocol.Types.Position, as: LSPosition
1717
alias ElixirLS.LanguageServer.Experimental.Protocol.Types.Range, as: LSRange
18+
alias ElixirLS.LanguageServer.Experimental.Protocol.Types.Location, as: LSLocation
1819
alias ElixirLS.LanguageServer.Protocol
1920

2021
import Line
@@ -102,6 +103,19 @@ defmodule ElixirLS.LanguageServer.Experimental.SourceFile.Conversions do
102103
{:ok, range}
103104
end
104105

106+
def to_lsp(
107+
%ElixirSense.Location{line: line, column: column} = elixir_sense_location,
108+
%SourceFile{} = source_file
109+
) do
110+
position = SourceFile.Position.new(line, column - 1)
111+
112+
with {:ok, source_file} <- fetch_source_file(elixir_sense_location, source_file),
113+
{:ok, ls_position} <- to_lsp(position, source_file) do
114+
ls_range = %LSRange{start: ls_position, end: ls_position}
115+
{:ok, LSLocation.new(uri: source_file.uri, range: ls_range)}
116+
end
117+
end
118+
105119
def to_lsp(%ElixirRange{} = ex_range, %SourceFile{} = source) do
106120
with {:ok, start_pos} <- to_lsp(ex_range.start, source.document),
107121
{:ok, end_pos} <- to_lsp(ex_range.end, source.document) do
@@ -128,6 +142,13 @@ defmodule ElixirLS.LanguageServer.Experimental.SourceFile.Conversions do
128142
end
129143

130144
# Private
145+
defp fetch_source_file(%{file: nil}, source_file) do
146+
{:ok, source_file}
147+
end
148+
149+
defp fetch_source_file(%{file: path}, _) do
150+
SourceFile.Store.open_temporary(path)
151+
end
131152

132153
defp extract_lsp_character(%ElixirPosition{} = position, line(ascii?: true, text: text)) do
133154
character = min(position.character, byte_size(text))

apps/language_server/test/experimental/provider/handlers/goto_definition_test.exs

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ defmodule ElixirLS.Experimental.Provider.Handlers.GotoDefinitionTest do
2929

3030
with {:ok, contents} <- File.read(file_path),
3131
:ok <- SourceFile.Store.open(uri, contents, 1),
32-
{:ok, _source_file} <- SourceFile.Store.fetch(uri),
3332
{:ok, req} <- build(GotoDefinition, params) do
3433
GotoDefinition.to_elixir(req)
3534
end
@@ -40,13 +39,13 @@ defmodule ElixirLS.Experimental.Provider.Handlers.GotoDefinitionTest do
4039
end
4140

4241
defp arrange_referenced_file do
43-
file_path = FixtureHelpers.get_path("references_referenced.ex")
44-
uri = Conversions.ensure_uri(file_path)
45-
%{uri: uri}
42+
"references_referenced.ex"
43+
|> FixtureHelpers.get_path()
44+
|> Conversions.ensure_uri()
4645
end
4746

4847
test "find definition remote function call" do
49-
b_file = arrange_referenced_file()
48+
referenced_uri = arrange_referenced_file()
5049
file_path = FixtureHelpers.get_path("references_remote.ex")
5150
{line, char} = {4, 28}
5251

@@ -59,15 +58,15 @@ defmodule ElixirLS.Experimental.Provider.Handlers.GotoDefinitionTest do
5958

6059
{:reply, %Responses.GotoDefinition{result: definition}} = handle(request)
6160

62-
assert definition.uri == b_file.uri
61+
assert definition.uri == referenced_uri
6362
assert definition.range.start.line == 1
6463
assert definition.range.start.character == 6
6564
assert definition.range.end.line == 1
6665
assert definition.range.end.character == 6
6766
end
6867

6968
test "find definition remote macro call" do
70-
b_file = arrange_referenced_file()
69+
referenced_uri = arrange_referenced_file()
7170
file_path = FixtureHelpers.get_path("references_remote.ex")
7271
{line, char} = {8, 28}
7372

@@ -80,15 +79,15 @@ defmodule ElixirLS.Experimental.Provider.Handlers.GotoDefinitionTest do
8079

8180
{:reply, %Responses.GotoDefinition{result: definition}} = handle(request)
8281

83-
assert definition.uri == b_file.uri
82+
assert definition.uri == referenced_uri
8483
assert definition.range.start.line == 8
8584
assert definition.range.start.character == 11
8685
assert definition.range.end.line == 8
8786
assert definition.range.end.character == 11
8887
end
8988

9089
test "find definition imported function call" do
91-
b_file = arrange_referenced_file()
90+
referenced_uri = arrange_referenced_file()
9291
file_path = FixtureHelpers.get_path("references_imported.ex")
9392
{line, char} = {4, 5}
9493

@@ -101,15 +100,15 @@ defmodule ElixirLS.Experimental.Provider.Handlers.GotoDefinitionTest do
101100

102101
{:reply, %Responses.GotoDefinition{result: definition}} = handle(request)
103102

104-
assert definition.uri == b_file.uri
103+
assert definition.uri == referenced_uri
105104
assert definition.range.start.line == 1
106105
assert definition.range.start.character == 6
107106
assert definition.range.end.line == 1
108107
assert definition.range.end.character == 6
109108
end
110109

111110
test "find definition imported macro call" do
112-
b_file = arrange_referenced_file()
111+
referenced_uri = arrange_referenced_file()
113112
file_path = FixtureHelpers.get_path("references_imported.ex")
114113
{line, char} = {8, 5}
115114

@@ -122,15 +121,15 @@ defmodule ElixirLS.Experimental.Provider.Handlers.GotoDefinitionTest do
122121

123122
{:reply, %Responses.GotoDefinition{result: definition}} = handle(request)
124123

125-
assert definition.uri == b_file.uri
124+
assert definition.uri == referenced_uri
126125
assert definition.range.start.line == 8
127126
assert definition.range.start.character == 11
128127
assert definition.range.end.line == 8
129128
assert definition.range.end.character == 11
130129
end
131130

132131
test "find definition local function call" do
133-
b_file = arrange_referenced_file()
132+
referenced_uri = arrange_referenced_file()
134133
file_path = FixtureHelpers.get_path("references_referenced.ex")
135134
{line, char} = {15, 5}
136135

@@ -143,15 +142,15 @@ defmodule ElixirLS.Experimental.Provider.Handlers.GotoDefinitionTest do
143142

144143
{:reply, %Responses.GotoDefinition{result: definition}} = handle(request)
145144

146-
assert definition.uri == b_file.uri
145+
assert definition.uri == referenced_uri
147146
assert definition.range.start.line == 1
148147
assert definition.range.start.character == 6
149148
assert definition.range.end.line == 1
150149
assert definition.range.end.character == 6
151150
end
152151

153152
test "find definition local macro call" do
154-
b_file = arrange_referenced_file()
153+
referenced_uri = arrange_referenced_file()
155154
file_path = FixtureHelpers.get_path("references_referenced.ex")
156155
{line, char} = {19, 5}
157156

@@ -164,15 +163,15 @@ defmodule ElixirLS.Experimental.Provider.Handlers.GotoDefinitionTest do
164163

165164
{:reply, %Responses.GotoDefinition{result: definition}} = handle(request)
166165

167-
assert definition.uri == b_file.uri
166+
assert definition.uri == referenced_uri
168167
assert definition.range.start.line == 8
169168
assert definition.range.start.character == 11
170169
assert definition.range.end.line == 8
171170
assert definition.range.end.character == 11
172171
end
173172

174173
test "find definition variable" do
175-
b_file = arrange_referenced_file()
174+
referenced_uri = arrange_referenced_file()
176175
file_path = FixtureHelpers.get_path("references_referenced.ex")
177176
{line, char} = {4, 13}
178177

@@ -185,15 +184,15 @@ defmodule ElixirLS.Experimental.Provider.Handlers.GotoDefinitionTest do
185184

186185
{:reply, %Responses.GotoDefinition{result: definition}} = handle(request)
187186

188-
assert definition.uri == b_file.uri
187+
assert definition.uri == referenced_uri
189188
assert definition.range.start.line == 2
190189
assert definition.range.start.character == 4
191190
assert definition.range.end.line == 2
192191
assert definition.range.end.character == 4
193192
end
194193

195194
test "find definition attribute" do
196-
b_file = arrange_referenced_file()
195+
referenced_uri = arrange_referenced_file()
197196
file_path = FixtureHelpers.get_path("references_referenced.ex")
198197
{line, char} = {27, 5}
199198

@@ -206,7 +205,7 @@ defmodule ElixirLS.Experimental.Provider.Handlers.GotoDefinitionTest do
206205

207206
{:reply, %Responses.GotoDefinition{result: definition}} = handle(request)
208207

209-
assert definition.uri == b_file.uri
208+
assert definition.uri == referenced_uri
210209
assert definition.range.start.line == 24
211210
assert definition.range.start.character == 2
212211
assert definition.range.end.line == 24

0 commit comments

Comments
 (0)