Skip to content

Commit 63d10b3

Browse files
Do not insert end after do: (#426)
* do not insert end after do: Fixes #424 * Add a couple more tests Co-authored-by: Jason Axelson <[email protected]>
1 parent f08f5ab commit 63d10b3

File tree

2 files changed

+61
-1
lines changed

2 files changed

+61
-1
lines changed

apps/language_server/lib/language_server/providers/on_type_formatting.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ defmodule ElixirLS.LanguageServer.Providers.OnTypeFormatting do
5656
end
5757

5858
defp tokens(line) do
59-
Regex.scan(Regex.recompile!(~r/(?:->)|(?:\w+)/), line) |> List.flatten()
59+
Regex.scan(Regex.recompile!(~r/(?:->)|(?:[\w\:]+)/), line) |> List.flatten()
6060
end
6161

6262
defp indentation(line) do
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
defmodule ElixirLS.LanguageServer.Providers.OnTypeFormattingTest do
2+
use ExUnit.Case, async: true
3+
4+
alias ElixirLS.LanguageServer.Providers.OnTypeFormatting
5+
alias ElixirLS.LanguageServer.SourceFile
6+
7+
test "insert `end` after `do`" do
8+
text = """
9+
for a <- b do
10+
"""
11+
12+
assert {:ok,
13+
[
14+
%{
15+
"newText" => "\nend",
16+
"range" => %{
17+
"start" => %{"character" => 0, "line" => 1},
18+
"end" => %{"character" => 0, "line" => 1}
19+
}
20+
}
21+
]} = OnTypeFormatting.format(%SourceFile{text: text}, 1, 0, "\n", [])
22+
end
23+
24+
test "insert `end` after def `do`" do
25+
text = """
26+
defmodule TestA do
27+
def myfun(a) do
28+
end
29+
"""
30+
31+
assert {:ok,
32+
[
33+
%{
34+
"newText" => "\n end",
35+
"range" => %{
36+
"start" => %{"character" => 0, "line" => 2},
37+
"end" => %{"character" => 0, "line" => 2}
38+
}
39+
}
40+
]} = OnTypeFormatting.format(%SourceFile{text: text}, 2, 0, "\n", [])
41+
end
42+
43+
test "don't insert `end` after `do:`" do
44+
text = """
45+
for a <- b, do:
46+
"""
47+
48+
assert {:ok, nil} = OnTypeFormatting.format(%SourceFile{text: text}, 1, 0, "\n", [])
49+
end
50+
51+
test "don't insert `end` after def `do: a`" do
52+
text = """
53+
defmodule TestA do
54+
def myfun(a), do: a
55+
end
56+
"""
57+
58+
assert {:ok, nil} = OnTypeFormatting.format(%SourceFile{text: text}, 2, 0, "\n", [])
59+
end
60+
end

0 commit comments

Comments
 (0)