Tag / as an operator in fragments, closes #14643

This commit is contained in:
José Valim
2025-07-11 11:12:24 +02:00
parent 2350e83f5b
commit c1c8ebaa8f
2 changed files with 12 additions and 1 deletions
+2 -1
View File
@@ -302,7 +302,8 @@ defmodule Code.Fragment do
{{:local_or_var, acc}, count} -> {{:local_arity, acc}, count}
{{:dot, base, acc}, count} -> {{:dot_arity, base, acc}, count}
{{:operator, acc}, count} -> {{:operator_arity, acc}, count}
{_, _} -> {:none, 0}
{{:sigil, _}, _} -> {:none, 0}
{_, _} -> {{:operator, ~c"/"}, 1}
end
end
@@ -302,6 +302,7 @@ defmodule CodeFragmentTest do
end
test "operators" do
assert CF.cursor_context("/") == {:operator, ~c"/"}
assert CF.cursor_context("+") == {:operator, ~c"+"}
assert CF.cursor_context("++") == {:operator, ~c"++"}
assert CF.cursor_context("!") == {:operator, ~c"!"}
@@ -361,6 +362,15 @@ defmodule CodeFragmentTest do
assert CF.cursor_context("~r/") == :none
assert CF.cursor_context("~r<") == :none
assert CF.cursor_context("~r''") == :none
assert CF.cursor_context("~r' '") == :none
assert CF.cursor_context("~r'foo'") == :none
# The slash is used in sigils, arities, and operators, so there is ambiguity
assert CF.cursor_context("~r//") == {:operator, ~c"/"}
assert CF.cursor_context("~r/ /") == {:operator, ~c"/"}
assert CF.cursor_context("~r/foo/") == {:local_arity, ~c"foo"}
assert CF.cursor_context("~R") == {:sigil, ~c"R"}
assert CF.cursor_context("~R/") == :none
assert CF.cursor_context("~R<") == :none