Skip to content

Commit 9d4c91b

Browse files
committed
Ensure block_keyword_or_binary_operator is handled in surround context, closes #14590
1 parent cc9a5e7 commit 9d4c91b

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

lib/elixir/lib/code/fragment.ex

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -771,6 +771,12 @@ defmodule Code.Fragment do
771771
{{:local_or_var, acc}, offset} ->
772772
build_surround({:local_or_var, acc}, reversed, line, offset)
773773

774+
{{:block_keyword_or_binary_operator, acc}, offset} when acc in @textual_operators ->
775+
build_surround({:operator, acc}, reversed, line, offset)
776+
777+
{{:block_keyword_or_binary_operator, acc}, offset} when acc in @keywords ->
778+
build_surround({:keyword, acc}, reversed, line, offset)
779+
774780
{{:module_attribute, ~c""}, offset} ->
775781
build_surround({:operator, ~c"@"}, reversed, line, offset)
776782

lib/elixir/test/elixir/code_fragment_test.exs

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -562,14 +562,20 @@ defmodule CodeFragmentTest do
562562
assert CF.surround_context("안녕_세상", {1, 6}) == :none
563563

564564
# Keywords are not local or var
565-
for keyword <- ~w(do end after catch else rescue fn true false nil)c do
566-
keyword_length = length(keyword) + 1
567-
568-
assert %{
569-
context: {:keyword, ^keyword},
565+
for keyword <- ~w(do end after catch else rescue fn true false nil)c,
566+
length = length(keyword),
567+
i <- 1..length do
568+
assert CF.surround_context(keyword, {1, i}) == %{
569+
context: {:keyword, keyword},
570570
begin: {1, 1},
571-
end: {1, ^keyword_length}
572-
} = CF.surround_context(keyword, {1, 1})
571+
end: {1, length + 1}
572+
}
573+
574+
assert CF.surround_context(~c"Foo " ++ keyword, {1, 4 + i}) == %{
575+
context: {:keyword, keyword},
576+
begin: {1, 5},
577+
end: {1, length + 5}
578+
}
573579
end
574580
end
575581

@@ -664,6 +670,12 @@ defmodule CodeFragmentTest do
664670
begin: {1, 1},
665671
end: {1, byte_size(op) + 1}
666672
}
673+
674+
assert CF.surround_context("Foo #{op}", {1, 4 + i}) == %{
675+
context: {:operator, String.to_charlist(op)},
676+
begin: {1, 5},
677+
end: {1, byte_size(op) + 5}
678+
}
667679
end
668680
end
669681

0 commit comments

Comments
 (0)