diff --git a/apps/language_server/lib/language_server/providers/rename.ex b/apps/language_server/lib/language_server/providers/rename.ex index 225efd060..98d8bc732 100644 --- a/apps/language_server/lib/language_server/providers/rename.ex +++ b/apps/language_server/lib/language_server/providers/rename.ex @@ -8,12 +8,14 @@ defmodule ElixirLS.LanguageServer.Providers.Rename do alias ElixirLS.LanguageServer.SourceFile def rename(%SourceFile{} = source_file, start_uri, line, character, new_name) do + trace = ElixirLS.LanguageServer.Tracer.get_trace() + edits = with char_ident when not is_nil(char_ident) <- get_char_ident(source_file.text, line, character), %ElixirSense.Location{} = definition <- ElixirSense.definition(source_file.text, line, character), - references <- ElixirSense.references(source_file.text, line, character) do + references <- ElixirSense.references(source_file.text, line, character, trace) do length_old = length(char_ident) definition_references = @@ -26,7 +28,7 @@ defmodule ElixirLS.LanguageServer.Providers.Rename do %{file: separate_file_path, type: :function} -> parse_definition_source_code(definition) |> get_all_fn_header_positions(char_ident) - |> positions_to_references(SourceFile.path_to_uri(separate_file_path), length_old) + |> positions_to_references(SourceFile.Path.to_uri(separate_file_path), length_old) _ -> positions_to_references( @@ -85,7 +87,7 @@ defmodule ElixirLS.LanguageServer.Providers.Rename do defp repack_references(references, start_uri) do for reference <- references do - uri = if reference.uri, do: SourceFile.path_to_uri(reference.uri), else: start_uri + uri = if reference.uri, do: SourceFile.Path.to_uri(reference.uri), else: start_uri %{ uri: uri, diff --git a/apps/language_server/test/providers/rename_test.exs b/apps/language_server/test/providers/rename_test.exs index 14f4983f5..8f63d26f7 100644 --- a/apps/language_server/test/providers/rename_test.exs +++ b/apps/language_server/test/providers/rename_test.exs @@ -1,13 +1,39 @@ defmodule ElixirLS.LanguageServer.Providers.RenameTest do use ExUnit.Case, async: true + alias ElixirLS.LanguageServer.Build alias ElixirLS.LanguageServer.Providers.Rename alias ElixirLS.LanguageServer.SourceFile alias ElixirLS.LanguageServer.Test.FixtureHelpers + alias ElixirLS.LanguageServer.Tracer # mix cmd --app language_server mix test test/providers/rename_test.exs @fake_uri "file:///World/Netherlands/Amsterdam/supercomputer/amazing.ex" + setup_all context do + File.rm_rf!(FixtureHelpers.get_path(".elixir_ls/calls.dets")) + {:ok, pid} = Tracer.start_link([]) + Tracer.set_project_dir(FixtureHelpers.get_path("")) + + compiler_options = Code.compiler_options() + Build.set_compiler_options(ignore_module_conflict: true) + + on_exit(fn -> + Process.monitor(pid) + Process.unlink(pid) + GenServer.stop(pid) + + receive do + {:DOWN, _, _, _, _} -> :ok + end + end) + + Code.compile_file(FixtureHelpers.get_path("rename_example.ex")) + Code.compile_file(FixtureHelpers.get_path("rename_example_b.ex")) + + {:ok, context} + end + test "rename blank space" do text = """ defmodule MyModule do