From ddee60948402f0adc68dba3c8d5798cdc654040d Mon Sep 17 00:00:00 2001 From: crbelaus Date: Wed, 16 Aug 2023 19:41:06 +0200 Subject: [PATCH 1/5] Don't clean references on every file save --- lib/next_ls.ex | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/lib/next_ls.ex b/lib/next_ls.ex index 4b9f1cf0..ee7044e3 100644 --- a/lib/next_ls.ex +++ b/lib/next_ls.ex @@ -454,21 +454,12 @@ defmodule NextLS do refresh_refs = dispatch(lsp.assigns.registry, :runtimes, fn entries -> - for {pid, %{name: name, uri: wuri, db: db}} <- entries, String.starts_with?(uri, wuri), into: %{} do + for {pid, %{name: name, uri: wuri}} <- entries, String.starts_with?(uri, wuri), into: %{} do token = Progress.token() Progress.start(lsp, token, "Compiling #{name}...") task = Task.Supervisor.async_nolink(lsp.assigns.task_supervisor, fn -> - DB.query( - db, - ~Q""" - DELETE FROM 'references' - WHERE file = ?; - """, - [URI.parse(uri).path] - ) - {name, Runtime.compile(pid)} end) From f187af689f9749043872c2d6d633d767f2ae42d6 Mon Sep 17 00:00:00 2001 From: crbelaus Date: Wed, 16 Aug 2023 19:41:42 +0200 Subject: [PATCH 2/5] Clean references when compiling a lexical context --- lib/next_ls/db.ex | 21 +++++++++++++++++++++ lib/next_ls/runtime/sidecar.ex | 6 ++++++ priv/monkey/_next_ls_private_compiler.ex | 8 +++++++- 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/lib/next_ls/db.ex b/lib/next_ls/db.ex index 749069b6..8cbdbc8b 100644 --- a/lib/next_ls/db.ex +++ b/lib/next_ls/db.ex @@ -19,6 +19,9 @@ defmodule NextLS.DB do @spec insert_reference(pid(), map()) :: :ok def insert_reference(server, payload), do: GenServer.cast(server, {:insert_reference, payload}) + @spec insert_reference(pid(), String.t()) :: :ok + def clean_references(server, filename), do: GenServer.cast(server, {:clean_references, filename}) + def init(args) do file = Keyword.fetch!(args, :file) registry = Keyword.fetch!(args, :registry) @@ -137,6 +140,24 @@ defmodule NextLS.DB do {:noreply, s} end + def handle_cast({:clean_references, filename}, %{conn: conn} = s) do + {:message_queue_len, count} = Process.info(self(), :message_queue_len) + NextLS.DB.Activity.update(s.activity, count) + + NextLS.Logger.warning(s.logger, "CLEANING REFERENCES FOR #{filename}") + + __query__( + {conn, s.logger}, + ~Q""" + DELETE FROM 'references' + WHERE file = ?; + """, + [filename] + ) + + {:noreply, s} + end + def __query__({conn, logger}, query, args) do args = Enum.map(args, &cast/1) diff --git a/lib/next_ls/runtime/sidecar.ex b/lib/next_ls/runtime/sidecar.ex index c0b0d062..64ec9626 100644 --- a/lib/next_ls/runtime/sidecar.ex +++ b/lib/next_ls/runtime/sidecar.ex @@ -25,4 +25,10 @@ defmodule NextLS.Runtime.Sidecar do {:noreply, state} end + + def handle_info({{:tracer, :start}, filename}, state) do + DB.clean_references(state.db, filename) + + {:noreply, state} + end end diff --git a/priv/monkey/_next_ls_private_compiler.ex b/priv/monkey/_next_ls_private_compiler.ex index 63e59164..0a4a2148 100644 --- a/priv/monkey/_next_ls_private_compiler.ex +++ b/priv/monkey/_next_ls_private_compiler.ex @@ -52,7 +52,13 @@ defmodule NextLSPrivate.Tracer do @source "user" - def trace(:start, _env) do + def trace(:start, env) do + Process.send( + parent_pid(), + {{:tracer, :start}, URI.parse(env.file).path}, + [] + ) + :ok end From f4f9a7cb0462cee9080eede0a17d9b64f0c3cba5 Mon Sep 17 00:00:00 2001 From: crbelaus Date: Thu, 17 Aug 2023 16:12:32 +0200 Subject: [PATCH 3/5] Remove unneeded URI.parse call --- priv/monkey/_next_ls_private_compiler.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/priv/monkey/_next_ls_private_compiler.ex b/priv/monkey/_next_ls_private_compiler.ex index 0a4a2148..e382a96e 100644 --- a/priv/monkey/_next_ls_private_compiler.ex +++ b/priv/monkey/_next_ls_private_compiler.ex @@ -55,7 +55,7 @@ defmodule NextLSPrivate.Tracer do def trace(:start, env) do Process.send( parent_pid(), - {{:tracer, :start}, URI.parse(env.file).path}, + {{:tracer, :start}, env.file}, [] ) From 6f962489b9104915b1d36aa79c412ee849d3bcc2 Mon Sep 17 00:00:00 2001 From: crbelaus Date: Thu, 17 Aug 2023 16:14:37 +0200 Subject: [PATCH 4/5] Fix incorrect spec --- lib/next_ls/db.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/next_ls/db.ex b/lib/next_ls/db.ex index 8cbdbc8b..bdf665c3 100644 --- a/lib/next_ls/db.ex +++ b/lib/next_ls/db.ex @@ -19,7 +19,7 @@ defmodule NextLS.DB do @spec insert_reference(pid(), map()) :: :ok def insert_reference(server, payload), do: GenServer.cast(server, {:insert_reference, payload}) - @spec insert_reference(pid(), String.t()) :: :ok + @spec clean_references(pid(), String.t()) :: :ok def clean_references(server, filename), do: GenServer.cast(server, {:clean_references, filename}) def init(args) do From 7527bb9cafa44041cd409f3c4787b5b0cad2445c Mon Sep 17 00:00:00 2001 From: Mitchell Hanberg Date: Thu, 17 Aug 2023 11:00:08 -0400 Subject: [PATCH 5/5] Update lib/next_ls/db.ex --- lib/next_ls/db.ex | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/next_ls/db.ex b/lib/next_ls/db.ex index bdf665c3..293e9a00 100644 --- a/lib/next_ls/db.ex +++ b/lib/next_ls/db.ex @@ -144,8 +144,6 @@ defmodule NextLS.DB do {:message_queue_len, count} = Process.info(self(), :message_queue_len) NextLS.DB.Activity.update(s.activity, count) - NextLS.Logger.warning(s.logger, "CLEANING REFERENCES FOR #{filename}") - __query__( {conn, s.logger}, ~Q"""