Skip to content

Commit 933c2a3

Browse files
committed
Add support for 1.19 'not in' token
1 parent fe2561b commit 933c2a3

File tree

3 files changed

+43
-0
lines changed

3 files changed

+43
-0
lines changed

apps/language_server/lib/language_server/providers/folding_range/token.ex

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ defmodule ElixirLS.LanguageServer.Providers.FoldingRange.Token do
2929
{a, {b1, b2, b3}, c} ->
3030
{a, {b1 - 1, b2 - 1, b3}, c}
3131

32+
# Handle 'not in' operator token format from Elixir 1.19+
33+
# {:in_op, {start_line, start_col, nil}, :"not in", {end_line, end_col, nil}}
34+
{:in_op, {b1, b2, b3}, :"not in", {_d1, _d2, _d3}} ->
35+
{:in_op, {b1 - 1, b2 - 1, b3}, :"not in"}
36+
3237
{:sigil, {b1, b2, b3}, _, _, _, _, delimiter} ->
3338
{:sigil, {b1 - 1, b2 - 1, b3}, delimiter}
3439

apps/language_server/test/providers/folding_range_test.exs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,24 @@ defmodule ElixirLS.LanguageServer.Providers.FoldingRangeTest do
526526
assert compare_condensed_ranges(ranges, expected, text)
527527
end
528528

529+
@tag text: """
530+
defmodule A do
531+
def check(value) do
532+
if value not in [1, 2, 3] do
533+
:ok
534+
end
535+
end
536+
end
537+
"""
538+
test "handles 'not in' operator from Elixir 1.19+", %{
539+
ranges_result: ranges_result,
540+
text: text
541+
} do
542+
assert {:ok, ranges} = ranges_result
543+
expected = [{0, 5, "region"}, {1, 4, "region"}, {2, 3, "region"}]
544+
assert compare_condensed_ranges(ranges, expected, text)
545+
end
546+
529547
defp fold_text(%{text: _text} = context) do
530548
ranges_result = FoldingRange.provide(context)
531549
{:ok, Map.put(context, :ranges_result, ranges_result)}

apps/language_server/test/providers/selection_ranges_test.exs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1126,4 +1126,24 @@ defmodule ElixirLS.LanguageServer.Providers.SelectionRangesTest do
11261126

11271127
get_ranges(text, 1, 2)
11281128
end
1129+
1130+
test "handles 'not in' operator from Elixir 1.19+" do
1131+
text = """
1132+
defmodule Test do
1133+
def check(value) do
1134+
if value not in [1, 2, 3] do
1135+
:ok
1136+
end
1137+
end
1138+
end
1139+
"""
1140+
1141+
# Test selection range on the 'not in' operator
1142+
ranges = get_ranges(text, 2, 14)
1143+
1144+
# Verify that we get ranges without crashing
1145+
assert length(ranges) > 0
1146+
# Full file range should be present
1147+
assert_range(ranges, range(0, 0, 7, 0))
1148+
end
11291149
end

0 commit comments

Comments
 (0)