diff --git a/apps/expert/lib/expert.ex b/apps/expert/lib/expert.ex index 9eb45a43..24bf504b 100644 --- a/apps/expert/lib/expert.ex +++ b/apps/expert/lib/expert.ex @@ -1,8 +1,8 @@ defmodule Expert do - alias Expert.Provider.Handlers - alias Expert.State alias Expert.Protocol.Convert alias Expert.Protocol.Id + alias Expert.Provider.Handlers + alias Expert.State alias GenLSP.Requests alias GenLSP.Structures diff --git a/apps/expert/lib/expert/configuration.ex b/apps/expert/lib/expert/configuration.ex index edb9f0b2..9322bc49 100644 --- a/apps/expert/lib/expert/configuration.ex +++ b/apps/expert/lib/expert/configuration.ex @@ -5,8 +5,8 @@ defmodule Expert.Configuration do alias Expert.Configuration.Support alias Expert.Dialyzer - alias Forge.Project alias Expert.Protocol.Id + alias Forge.Project alias GenLSP.Notifications.WorkspaceDidChangeConfiguration alias GenLSP.Requests alias GenLSP.Structures diff --git a/apps/expert/lib/expert/project/progress/state.ex b/apps/expert/lib/expert/project/progress/state.ex index 7006afc0..ee03aea5 100644 --- a/apps/expert/lib/expert/project/progress/state.ex +++ b/apps/expert/lib/expert/project/progress/state.ex @@ -2,8 +2,8 @@ defmodule Expert.Project.Progress.State do alias Expert.Configuration alias Expert.Project.Progress.Percentage alias Expert.Project.Progress.Value - alias Forge.Project alias Expert.Protocol.Id + alias Forge.Project alias GenLSP.Requests alias GenLSP.Structures diff --git a/apps/expert/lib/expert/project/search_listener.ex b/apps/expert/lib/expert/project/search_listener.ex index b1c72222..66a13a1e 100644 --- a/apps/expert/lib/expert/project/search_listener.ex +++ b/apps/expert/lib/expert/project/search_listener.ex @@ -1,8 +1,8 @@ defmodule Expert.Project.SearchListener do alias Expert.EngineApi + alias Expert.Protocol.Id alias Forge.Formats alias Forge.Project - alias Expert.Protocol.Id alias GenLSP.Requests import Forge.EngineApi.Messages diff --git a/apps/expert/test/conversions_test.exs b/apps/expert/test/conversions_test.exs index cd7d6800..852959dd 100644 --- a/apps/expert/test/conversions_test.exs +++ b/apps/expert/test/conversions_test.exs @@ -1,7 +1,7 @@ defmodule Expert.Protocol.ConversionsTest do + alias Expert.Protocol.Conversions alias Forge.Document alias Forge.Document.Position, as: ExPosition - alias Expert.Protocol.Conversions alias GenLSP.Structures.Position, as: LSPosition use ExUnit.Case diff --git a/apps/expert/test/expert/provider/handlers/code_action_test.exs b/apps/expert/test/expert/provider/handlers/code_action_test.exs new file mode 100644 index 00000000..f8882475 --- /dev/null +++ b/apps/expert/test/expert/provider/handlers/code_action_test.exs @@ -0,0 +1,76 @@ +defmodule Expert.Provider.Handlers.CodeActionTest do + alias Expert.EngineApi + alias Expert.Protocol.Convert + alias Expert.Provider.Handlers + alias Forge.Document + alias GenLSP.Requests.TextDocumentCodeAction + alias GenLSP.Structures + + import Forge.EngineApi.Messages + import Forge.Test.Fixtures + + use ExUnit.Case, async: false + + setup_all do + start_supervised!({Document.Store, derive: [analysis: &Forge.Ast.analyze/1]}) + project = project(:navigations) + + start_supervised!({DynamicSupervisor, Expert.Project.DynamicSupervisor.options()}) + start_supervised!({Expert.Project.Supervisor, project}) + + EngineApi.register_listener(project, self(), [project_compiled()]) + EngineApi.schedule_compile(project, true) + + assert_receive project_compiled(), 5000 + + {:ok, project: project} + end + + def build_request(path, {start_line, start_char}, {end_line, end_char}) do + uri = Document.Path.ensure_uri(path) + + with {:ok, _} <- Document.Store.open_temporary(uri) do + req = %TextDocumentCodeAction{ + id: Expert.Protocol.Id.next(), + params: %Structures.CodeActionParams{ + text_document: %Structures.TextDocumentIdentifier{uri: uri}, + context: %Structures.CodeActionContext{ + trigger_kind: 1, + only: nil, + diagnostics: [ + %Structures.Diagnostic{ + range: %Structures.Range{ + start: %Structures.Position{line: start_line, character: start_char}, + end: %Structures.Position{line: end_line, character: end_char} + }, + message: "Test diagnostic", + severity: 1, + source: "TestSource" + } + ] + }, + range: %Structures.Range{ + start: %Structures.Position{line: start_line, character: start_char}, + end: %Structures.Position{line: end_line, character: end_char} + } + } + } + + Convert.to_native(req) + end + end + + def handle(request, project) do + config = Expert.Configuration.new(project: project) + Handlers.CodeAction.handle(request, config) + end + + describe "handle code actions" do + test "returns code actions for a given range", %{project: project} do + uses_file_path = file_path(project, Path.join("lib", "uses.ex")) + {:ok, request} = build_request(uses_file_path, {4, 4}, {4, 31}) + + assert {:ok, _actions} = handle(request, project) + end + end +end diff --git a/apps/expert/test/expert/provider/handlers/code_lens_test.exs b/apps/expert/test/expert/provider/handlers/code_lens_test.exs index d06b0219..d17cd605 100644 --- a/apps/expert/test/expert/provider/handlers/code_lens_test.exs +++ b/apps/expert/test/expert/provider/handlers/code_lens_test.exs @@ -1,10 +1,10 @@ defmodule Expert.Provider.Handlers.CodeLensTest do alias Expert.EngineApi + alias Expert.Protocol.Convert + alias Expert.Protocol.Id alias Expert.Provider.Handlers alias Forge.Document alias Forge.Project - alias Expert.Protocol.Convert - alias Expert.Protocol.Id alias GenLSP.Requests.TextDocumentCodeLens alias GenLSP.Structures diff --git a/apps/expert/test/expert/provider/handlers/find_references_test.exs b/apps/expert/test/expert/provider/handlers/find_references_test.exs index 8492d2a3..697194b8 100644 --- a/apps/expert/test/expert/provider/handlers/find_references_test.exs +++ b/apps/expert/test/expert/provider/handlers/find_references_test.exs @@ -1,10 +1,10 @@ defmodule Expert.Provider.Handlers.FindReferencesTest do alias Expert.EngineApi + alias Expert.Protocol.Convert alias Expert.Provider.Handlers alias Forge.Ast.Analysis alias Forge.Document alias Forge.Document.Location - alias Expert.Protocol.Convert alias GenLSP.Requests.TextDocumentReferences alias GenLSP.Structures diff --git a/apps/expert/test/expert/provider/handlers/go_to_definition_test.exs b/apps/expert/test/expert/provider/handlers/go_to_definition_test.exs index 212a4c88..e46184cb 100644 --- a/apps/expert/test/expert/provider/handlers/go_to_definition_test.exs +++ b/apps/expert/test/expert/provider/handlers/go_to_definition_test.exs @@ -1,9 +1,9 @@ defmodule Expert.Provider.Handlers.GoToDefinitionTest do alias Expert.EngineApi + alias Expert.Protocol.Convert alias Expert.Provider.Handlers alias Forge.Document alias Forge.Document.Location - alias Expert.Protocol.Convert alias GenLSP.Requests.TextDocumentDefinition alias GenLSP.Structures diff --git a/apps/expert/test/expert/provider/handlers/hover_test.exs b/apps/expert/test/expert/provider/handlers/hover_test.exs index c3b80160..a4927e83 100644 --- a/apps/expert/test/expert/provider/handlers/hover_test.exs +++ b/apps/expert/test/expert/provider/handlers/hover_test.exs @@ -1,10 +1,10 @@ defmodule Expert.Provider.Handlers.HoverTest do alias Expert.EngineApi + alias Expert.Protocol.Convert alias Expert.Provider.Handlers alias Forge.Document alias Forge.Document.Position alias Forge.EngineApi.Messages - alias Expert.Protocol.Convert alias Forge.Test.Fixtures alias GenLSP.Requests alias GenLSP.Structures