Skip to content

Commit 481acc4

Browse files
authored
fix: only purge references when actually recompiling (#187)
Closes #154
1 parent 08313a2 commit 481acc4

File tree

4 files changed

+33
-11
lines changed

4 files changed

+33
-11
lines changed

lib/next_ls.ex

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -454,21 +454,12 @@ defmodule NextLS do
454454

455455
refresh_refs =
456456
dispatch(lsp.assigns.registry, :runtimes, fn entries ->
457-
for {pid, %{name: name, uri: wuri, db: db}} <- entries, String.starts_with?(uri, wuri), into: %{} do
457+
for {pid, %{name: name, uri: wuri}} <- entries, String.starts_with?(uri, wuri), into: %{} do
458458
token = Progress.token()
459459
Progress.start(lsp, token, "Compiling #{name}...")
460460

461461
task =
462462
Task.Supervisor.async_nolink(lsp.assigns.task_supervisor, fn ->
463-
DB.query(
464-
db,
465-
~Q"""
466-
DELETE FROM 'references'
467-
WHERE file = ?;
468-
""",
469-
[URI.parse(uri).path]
470-
)
471-
472463
{name, Runtime.compile(pid)}
473464
end)
474465

lib/next_ls/db.ex

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ defmodule NextLS.DB do
1919
@spec insert_reference(pid(), map()) :: :ok
2020
def insert_reference(server, payload), do: GenServer.cast(server, {:insert_reference, payload})
2121

22+
@spec clean_references(pid(), String.t()) :: :ok
23+
def clean_references(server, filename), do: GenServer.cast(server, {:clean_references, filename})
24+
2225
def init(args) do
2326
file = Keyword.fetch!(args, :file)
2427
registry = Keyword.fetch!(args, :registry)
@@ -137,6 +140,22 @@ defmodule NextLS.DB do
137140
{:noreply, s}
138141
end
139142

143+
def handle_cast({:clean_references, filename}, %{conn: conn} = s) do
144+
{:message_queue_len, count} = Process.info(self(), :message_queue_len)
145+
NextLS.DB.Activity.update(s.activity, count)
146+
147+
__query__(
148+
{conn, s.logger},
149+
~Q"""
150+
DELETE FROM 'references'
151+
WHERE file = ?;
152+
""",
153+
[filename]
154+
)
155+
156+
{:noreply, s}
157+
end
158+
140159
def __query__({conn, logger}, query, args) do
141160
args = Enum.map(args, &cast/1)
142161

lib/next_ls/runtime/sidecar.ex

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,10 @@ defmodule NextLS.Runtime.Sidecar do
2525

2626
{:noreply, state}
2727
end
28+
29+
def handle_info({{:tracer, :start}, filename}, state) do
30+
DB.clean_references(state.db, filename)
31+
32+
{:noreply, state}
33+
end
2834
end

priv/monkey/_next_ls_private_compiler.ex

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,13 @@ defmodule NextLSPrivate.Tracer do
5252

5353
@source "user"
5454

55-
def trace(:start, _env) do
55+
def trace(:start, env) do
56+
Process.send(
57+
parent_pid(),
58+
{{:tracer, :start}, env.file},
59+
[]
60+
)
61+
5662
:ok
5763
end
5864

0 commit comments

Comments
 (0)