Skip to content

Commit b52042c

Browse files
committed
Rename to only rename fn headers of correct arity
1 parent 73f8178 commit b52042c

File tree

3 files changed

+16
-8
lines changed

3 files changed

+16
-8
lines changed

apps/language_server/lib/language_server/providers/rename.ex

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ defmodule ElixirLS.LanguageServer.Providers.Rename do
2222
case definition do
2323
%{file: nil, type: :function} ->
2424
parse_definition_source_code(source_file.text)
25-
|> get_all_fn_header_positions(char_ident)
25+
|> get_all_fn_header_positions(char_ident, definition)
2626
|> positions_to_references(start_uri, length_old)
2727

2828
%{file: separate_file_path, type: :function} ->
2929
parse_definition_source_code(definition)
30-
|> get_all_fn_header_positions(char_ident)
30+
|> get_all_fn_header_positions(char_ident, definition)
3131
|> positions_to_references(SourceFile.Path.to_uri(separate_file_path), length_old)
3232

3333
_ ->
@@ -78,15 +78,15 @@ defmodule ElixirLS.LanguageServer.Providers.Rename do
7878
}
7979
else
8080
_ ->
81-
# Not a variable or local call, skipping for now
81+
# Not a variable or function call, skipping
8282
nil
8383
end
8484

8585
{:ok, result}
8686
end
8787

8888
defp repack_references(references, start_uri) do
89-
for reference <- references do
89+
Enum.map(references, fn reference ->
9090
uri = if reference.uri, do: SourceFile.Path.to_uri(reference.uri), else: start_uri
9191

9292
%{
@@ -99,7 +99,7 @@ defmodule ElixirLS.LanguageServer.Providers.Rename do
9999
}
100100
}
101101
}
102-
end
102+
end)
103103
end
104104

105105
defp parse_definition_source_code(%{file: file}) do
@@ -110,10 +110,16 @@ defmodule ElixirLS.LanguageServer.Providers.Rename do
110110
ElixirSense.Core.Parser.parse_string(source_text, true, true, nil)
111111
end
112112

113-
defp get_all_fn_header_positions(parsed_source, char_ident) do
113+
defp get_all_fn_header_positions(
114+
parsed_source,
115+
definition_name,
116+
%{column: column, line: line} = _definition
117+
) do
114118
parsed_source.mods_funs_to_positions
115119
|> Map.filter(fn
116-
{{_, fn_name, _}, _} -> Atom.to_charlist(fn_name) == char_ident
120+
{{_, fn_name, fn_arity}, %{positions: fn_positions}} ->
121+
Atom.to_charlist(fn_name) === definition_name and not is_nil(fn_arity) and
122+
Enum.member?(fn_positions, {line, column})
117123
end)
118124
|> Enum.flat_map(fn {_, %{positions: positions}} -> positions end)
119125
|> Enum.uniq()

apps/language_server/test/providers/rename_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ defmodule ElixirLS.LanguageServer.Providers.RenameTest do
186186
expected_edits =
187187
[
188188
target_range,
189-
%{line: 13, start_char: 7, end_char: 15}
189+
%{line: 15, start_char: 7, end_char: 15}
190190
]
191191
|> get_expected_edits("new_subtract")
192192

apps/language_server/test/support/fixtures/rename_example.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,7 @@ defmodule ElixirLS.Test.RenameExample do
1111
defp add(a, b) when is_integer(a) and is_integer(b), do: a + b
1212
defp add(a, b) when is_binary(a) and is_binary(b), do: a <> b
1313

14+
def add(a, b, c), do: a + b + c
15+
1416
defp subtract(a, b), do: a - b
1517
end

0 commit comments

Comments
 (0)