diff --git a/apps/remote_control/lib/lexical/remote_control/code_intelligence/rename.ex b/apps/remote_control/lib/lexical/remote_control/code_intelligence/rename.ex index 24a97f7bd..5f5f1dffd 100644 --- a/apps/remote_control/lib/lexical/remote_control/code_intelligence/rename.ex +++ b/apps/remote_control/lib/lexical/remote_control/code_intelligence/rename.ex @@ -26,7 +26,7 @@ defmodule Lexical.RemoteControl.CodeIntelligence.Rename do defp resolve_module(analysis, position) do case Entity.resolve(analysis, position) do - {:ok, {:module, module}, range} -> + {:ok, {module_or_struct, module}, range} when module_or_struct in [:struct, :module] -> {:ok, module, range} {:ok, other, _} -> diff --git a/apps/remote_control/test/lexical/remote_control/code_intelligence/rename_test.exs b/apps/remote_control/test/lexical/remote_control/code_intelligence/rename_test.exs index 4bc510556..dd4f4b46e 100644 --- a/apps/remote_control/test/lexical/remote_control/code_intelligence/rename_test.exs +++ b/apps/remote_control/test/lexical/remote_control/code_intelligence/rename_test.exs @@ -234,6 +234,45 @@ defmodule Lexical.RemoteControl.CodeIntelligence.RenameTest do end end + describe "rename struct" do + test "succeeds when the cursor on the definition" do + {:ok, result} = + ~q[ + defmodule |Foo do + defstruct bar: 1 + end + + defmodule Bar do + def foo do + %Foo{} + end + end + ] |> rename("Renamed") + + assert result =~ ~S[defmodule Renamed do] + assert result =~ ~S[%Renamed{}] + end + + test "succeeds when the cursor on the reference" do + {:ok, result} = + ~q[ + defmodule Foo do + defstruct bar: 1 + end + + defmodule Bar do + def foo do + %Fo|o{} + end + end + ] |> rename("Renamed") + + assert result =~ ~S[defmodule Renamed do] + assert result =~ ~S[defmodule Bar do] + assert result =~ ~S[%Renamed{}] + end + end + describe "unsupported" do test "rename a function" do assert {:error, {:unsupported, {:local_or_var, ~c"bar"}}} ==