Skip to content

Commit 39190a3

Browse files
committed
Rename the test file and move the duplicated logic to code_mod folder
1 parent e398488 commit 39190a3

File tree

3 files changed

+31
-26
lines changed

3 files changed

+31
-26
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
defmodule ElixirLS.LanguageServer.Experimental.CodeMod.Location do
2+
@moduledoc """
3+
A module that converts ElixirSense location to LSP location.
4+
"""
5+
alias ElixirLS.LanguageServer.Experimental.Protocol.Types.Location, as: LSLocation
6+
alias ElixirLS.LanguageServer.Experimental.Protocol.Types.Range, as: LSRange
7+
alias ElixirLS.LanguageServer.Experimental.SourceFile
8+
alias ElixirLS.LanguageServer.Experimental.SourceFile.Conversions
9+
10+
def to_lsp(%{line: line, column: column} = elixir_sense_definition, current_source_file) do
11+
{:ok, current_source_file}
12+
position = SourceFile.Position.new(line, column - 1)
13+
14+
with {:ok, source_file} <- fetch_source_file(elixir_sense_definition, current_source_file),
15+
{:ok, ls_position} <- Conversions.to_lsp(position, source_file) do
16+
ls_range = %LSRange{start: ls_position, end: ls_position}
17+
{:ok, LSLocation.new(uri: source_file.uri, range: ls_range)}
18+
end
19+
end
20+
21+
defp fetch_source_file(%{file: nil}, current_source_file) do
22+
{:ok, current_source_file}
23+
end
24+
25+
defp fetch_source_file(%{file: path}, _) do
26+
SourceFile.Store.open_temporary(path)
27+
end
28+
end
Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +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.Protocol.Types.Location
5-
alias ElixirLS.LanguageServer.Experimental.Protocol.Types.Range, as: LSRange
4+
alias ElixirLS.LanguageServer.Experimental.CodeMod.Location, as: CodeModLocation
65
alias ElixirLS.LanguageServer.Experimental.SourceFile
7-
alias ElixirLS.LanguageServer.Experimental.SourceFile.Conversions
86
require Logger
97

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

1614
with %ElixirSense.Location{} = location <-
1715
ElixirSense.definition(source_file_string, pos.line, pos.character + 1),
18-
{:ok, definition} <- build_definition(location, source_file) do
16+
{:ok, definition} <- CodeModLocation.to_lsp(location, source_file) do
1917
{:reply, Responses.GotoDefinition.new(request.id, definition)}
2018
else
2119
nil ->
@@ -26,25 +24,4 @@ defmodule ElixirLS.LanguageServer.Experimental.Provider.Handlers.GotoDefinition
2624
{:error, Responses.GotoDefinition.error(request.id, :request_failed, reason)}
2725
end
2826
end
29-
30-
defp build_definition(
31-
%{line: line, column: column} = elixir_sense_definition,
32-
current_source_file
33-
) do
34-
position = SourceFile.Position.new(line, column - 1)
35-
36-
with {:ok, source_file} <- get_source_file(elixir_sense_definition, current_source_file),
37-
{:ok, ls_position} <- Conversions.to_lsp(position, source_file) do
38-
ls_range = %LSRange{start: ls_position, end: ls_position}
39-
{:ok, Location.new(uri: source_file.uri, range: ls_range)}
40-
end
41-
end
42-
43-
defp get_source_file(%{file: nil}, current_source_file) do
44-
{:ok, current_source_file}
45-
end
46-
47-
defp get_source_file(%{file: path}, _) do
48-
SourceFile.Store.open_temporary(path)
49-
end
5027
end
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
defmodule ElixirLS.LanguageServer.Experimental.Provider.Handlers.GotoDefinitionTest do
1+
defmodule ElixirLS.Experimental.Provider.Handlers.GotoDefinitionTest do
22
use ExUnit.Case, async: true
33

44
alias ElixirLS.LanguageServer.Experimental.Protocol.Requests.GotoDefinition

0 commit comments

Comments
 (0)