Skip to content

Commit 8db226c

Browse files
committed
Fix rename issue with duplicate entries when renaming var definition
1 parent 70b5bb5 commit 8db226c

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ defmodule ElixirLS.LanguageServer.Providers.Rename do
3636
)
3737
end
3838

39-
definition_references ++ repack_references(references, start_uri)
39+
Enum.uniq(definition_references ++ repack_references(references, start_uri))
4040
else
4141
_ ->
4242
[]

apps/language_server/test/providers/rename_test.exs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,39 @@ defmodule ElixirLS.LanguageServer.Providers.RenameTest do
8181

8282
assert sort_edit_by_start_line(edits) == expected_edits
8383
end
84+
85+
test "renaming a variable definition works original -> new_original" do
86+
text = """
87+
defmodule MyModule do
88+
def hello do
89+
original = "original"
90+
new = original <> " new stuff"
91+
end
92+
end
93+
"""
94+
95+
# new = "#{original} + new stuff!"
96+
{line, char} = {3, 6}
97+
98+
edits =
99+
Rename.rename(
100+
%SourceFile{text: text, version: 0},
101+
@fake_uri,
102+
line,
103+
char,
104+
"new_original"
105+
)
106+
|> assert_return_structure_and_get_edits(@fake_uri, nil)
107+
108+
expected_edits =
109+
[
110+
%{line: 2, start_char: 4, end_char: 12},
111+
%{line: 3, start_char: 10, end_char: 18}
112+
]
113+
|> get_expected_edits("new_original")
114+
115+
assert sort_edit_by_start_line(edits) == expected_edits
116+
end
84117
end
85118

86119
describe "renaming local function" do

0 commit comments

Comments
 (0)