Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 89216a0

Browse files
committedJun 2, 2024·
Always treat ranges as exclusive in Range.contains?/2
1 parent 4665cc6 commit 89216a0

File tree

5 files changed

+92
-85
lines changed

5 files changed

+92
-85
lines changed
 

‎apps/common/lib/lexical/ast/detection/string.ex

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ defmodule Lexical.Ast.Detection.String do
4141
# a string literal
4242
defp do_detect({:__block__, _, [literal]} = ast, %Position{} = position)
4343
when is_binary(literal) do
44-
case fetch_range(ast, 0, -1) do
44+
case fetch_range(ast) do
4545
{:ok, range} -> Range.contains?(range, position)
4646
:error -> false
4747
end
@@ -56,7 +56,7 @@ defmodule Lexical.Ast.Detection.String do
5656
# String sigils
5757
defp do_detect({sigil, _, _} = ast, %Position{} = position)
5858
when sigil in @string_sigils do
59-
case fetch_range(ast, 0, 0) do
59+
case fetch_range(ast) do
6060
{:ok, range} -> Range.contains?(range, position)
6161
_ -> false
6262
end
@@ -75,7 +75,7 @@ defmodule Lexical.Ast.Detection.String do
7575
|> Keyword.get(:delimiter, "\"")
7676
|> String.length()
7777

78-
with {:ok, string_range} <- fetch_range(ast, delimiter_length, -1),
78+
with {:ok, string_range} <- fetch_range(ast, delimiter_length, 0),
7979
{:ok, interpolation_ranges} <- collect_interpolation_ranges(interpolations) do
8080
Range.contains?(string_range, position) and
8181
not Enum.any?(interpolation_ranges, &Range.contains?(&1, position))
@@ -92,7 +92,7 @@ defmodule Lexical.Ast.Detection.String do
9292
{ast, :error}
9393

9494
{:"::", _, _} = interpolation, {:ok, acc} ->
95-
case fetch_range(interpolation, 1, -1) do
95+
case fetch_range(interpolation, 1, 0) do
9696
{:ok, range} ->
9797
{interpolation, {:ok, [range | acc]}}
9898

‎apps/remote_control/test/lexical/remote_control/code_intelligence/references_test.exs

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ defmodule Lexical.RemoteControl.CodeIntelligence.ReferencesTest do
5959
def func(x), do: Enum.map(x, & &1 + 1)
6060
end
6161
/
62-
assert [%Location{} = location] = references(project, "Enum.map|(a, b)", code)
62+
assert [%Location{} = location] = references(project, "Enum.|map(a, b)", code)
6363
assert decorate(code, location.range) =~ "def func(x), do: «Enum.map(x, & &1 + 1)»"
6464
end
6565

@@ -69,7 +69,7 @@ defmodule Lexical.RemoteControl.CodeIntelligence.ReferencesTest do
6969
defp func(x), do: Enum.map(x, & &1 + 1)
7070
end
7171
/
72-
assert [%Location{} = location] = references(project, "Enum.map|(a, b)", code)
72+
assert [%Location{} = location] = references(project, "Enum.|map(a, b)", code)
7373
assert decorate(code, location.range) =~ "defp func(x), do: «Enum.map(x, & &1 + 1)»"
7474
end
7575

@@ -80,7 +80,7 @@ defmodule Lexical.RemoteControl.CodeIntelligence.ReferencesTest do
8080
defp func(x), do: E.map(x, & &1 + 1)
8181
end
8282
/
83-
assert [%Location{} = location] = references(project, "Enum.map|(a, b)", code)
83+
assert [%Location{} = location] = references(project, "Enum.|map(a, b)", code)
8484
assert decorate(code, location.range) =~ "defp func(x), do: «E.map(x, & &1 + 1)»"
8585
end
8686

@@ -91,7 +91,7 @@ defmodule Lexical.RemoteControl.CodeIntelligence.ReferencesTest do
9191
defp func(x), do: map(x, & &1 + 1)
9292
end
9393
/
94-
assert [%Location{} = location] = references(project, "Enum.map|(a, b)", code)
94+
assert [%Location{} = location] = references(project, "Enum.|map(a, b)", code)
9595
assert decorate(code, location.range) =~ "defp func(x), do: «map(x, & &1 + 1)»"
9696
end
9797

@@ -104,7 +104,7 @@ defmodule Lexical.RemoteControl.CodeIntelligence.ReferencesTest do
104104
105105
end
106106
/
107-
assert [%Location{} = location] = references(project, "Functions.do_map|(a, b)", code)
107+
assert [%Location{} = location] = references(project, "Functions.|do_map(a, b)", code)
108108
assert decorate(code, location.range) =~ "def func(x), do: «do_map(x, & &1 + 1)»"
109109
end
110110
end
@@ -118,7 +118,7 @@ defmodule Lexical.RemoteControl.CodeIntelligence.ReferencesTest do
118118
end
119119
]
120120

121-
assert [%Location{} = location] = references(project, "ReferencedModule|", code)
121+
assert [%Location{} = location] = references(project, "|ReferencedModule", code)
122122
assert decorate(code, location.range) =~ ~s[alias «ReferencedModule»]
123123
end
124124

@@ -129,7 +129,7 @@ defmodule Lexical.RemoteControl.CodeIntelligence.ReferencesTest do
129129
end
130130
]
131131

132-
assert [%Location{} = location] = references(project, "ReferencedModule|", code)
132+
assert [%Location{} = location] = references(project, "|ReferencedModule", code)
133133
assert decorate(code, location.range) =~ ~s[@attr «ReferencedModule»]
134134
end
135135

@@ -138,7 +138,7 @@ defmodule Lexical.RemoteControl.CodeIntelligence.ReferencesTest do
138138
some_module = ReferencedModule
139139
]
140140

141-
assert [%Location{} = location] = references(project, "ReferencedModule|", code)
141+
assert [%Location{} = location] = references(project, "|ReferencedModule", code)
142142
assert decorate(code, location.range) =~ ~s[some_module = «ReferencedModule»]
143143
end
144144

@@ -148,7 +148,7 @@ defmodule Lexical.RemoteControl.CodeIntelligence.ReferencesTest do
148148
end
149149
]
150150

151-
assert [%Location{} = location] = references(project, "ReferencedModule|", code)
151+
assert [%Location{} = location] = references(project, "|ReferencedModule", code)
152152
assert decorate(code, location.range) =~ ~s[def some_fn(«ReferencedModule») do]
153153
end
154154

@@ -157,7 +157,7 @@ defmodule Lexical.RemoteControl.CodeIntelligence.ReferencesTest do
157157
%ReferencedModule{} = something_else
158158
]
159159

160-
assert [%Location{} = location] = references(project, "ReferencedModule|", code)
160+
assert [%Location{} = location] = references(project, "|ReferencedModule", code)
161161
assert decorate(code, location.range) =~ ~s[%«ReferencedModule»{} = something_else]
162162
end
163163

@@ -171,7 +171,7 @@ defmodule Lexical.RemoteControl.CodeIntelligence.ReferencesTest do
171171
end
172172
]
173173

174-
assert [location_1, location_2] = references(project, "DefinedModule|", code, true)
174+
assert [location_1, location_2] = references(project, "|DefinedModule", code, true)
175175
assert decorate(code, location_1.range) =~ ~s[defmodule «DefinedModule» do]
176176
assert decorate(code, location_2.range) =~ ~s[@attr «DefinedModule»]
177177
end
@@ -185,7 +185,7 @@ defmodule Lexical.RemoteControl.CodeIntelligence.ReferencesTest do
185185
end
186186
)
187187

188-
assert [location] = references(project, "%Struct|{}", code, true)
188+
assert [location] = references(project, "%|Struct{}", code, true)
189189
assert decorate(code, location.range) =~ "«defstruct [:field]»"
190190
end
191191

@@ -198,22 +198,23 @@ defmodule Lexical.RemoteControl.CodeIntelligence.ReferencesTest do
198198
]
199199

200200
selector = ~q(
201-
defmodule Struct do
202-
defstruc|t [:name, :value]
203-
end
201+
defmodule Struct do
202+
defstruc|t [:name, :value]
203+
end
204204
)
205+
205206
assert [location] = references(project, selector, code)
206207
assert decorate(code, location.range) =~ "def something(«%Struct{}») do"
207208
end
208209

209210
test "excludes their definition", %{project: project} do
210211
code = ~q(
211-
defmodule Struct do
212-
defstruct [:field]
213-
end
212+
defmodule Struct do
213+
defstruct [:field]
214+
end
214215
)
215216

216-
assert [] = references(project, "%Struct|{}", code)
217+
assert [] = references(project, "%|Struct{}", code)
217218
end
218219
end
219220

@@ -264,7 +265,7 @@ defmodule Lexical.RemoteControl.CodeIntelligence.ReferencesTest do
264265
test "are found in a function body", %{project: project} do
265266
query = ~S[
266267
def my_fun do
267-
first| = 4
268+
|first = 4
268269
y = first * 2
269270
z = y * 3 + first
270271
end
@@ -282,7 +283,7 @@ defmodule Lexical.RemoteControl.CodeIntelligence.ReferencesTest do
282283
query = ~S[
283284
def my_fun do
284285
first = 4
285-
y = first| * 2
286+
y = |first * 2
286287
z = y * 3 + first
287288
end
288289
]

0 commit comments

Comments
 (0)
Please sign in to comment.