Skip to content

Commit d0e0340

Browse files
authored
fix: clear out references when saving a file (#134)
1 parent 1123cf3 commit d0e0340

File tree

5 files changed

+60
-44
lines changed

5 files changed

+60
-44
lines changed

Diff for: lib/next_ls.ex

+10-1
Original file line numberDiff line numberDiff line change
@@ -356,12 +356,21 @@ defmodule NextLS do
356356

357357
refresh_refs =
358358
dispatch(lsp.assigns.registry, :runtimes, fn entries ->
359-
for {pid, %{name: name, uri: wuri}} <- entries, String.starts_with?(uri, wuri), into: %{} do
359+
for {pid, %{name: name, uri: wuri, db: db}} <- entries, String.starts_with?(uri, wuri), into: %{} do
360360
token = token()
361361
Progress.start(lsp, token, "Compiling...")
362362

363363
task =
364364
Task.Supervisor.async_nolink(lsp.assigns.task_supervisor, fn ->
365+
DB.query(
366+
db,
367+
~Q"""
368+
DELETE FROM 'references'
369+
WHERE file = ?;
370+
""",
371+
[URI.parse(uri).path]
372+
)
373+
365374
{name, Runtime.compile(pid)}
366375
end)
367376

Diff for: lib/next_ls/definition.ex

+44-41
Original file line numberDiff line numberDiff line change
@@ -5,54 +5,57 @@ defmodule NextLS.Definition do
55
alias NextLS.DB
66

77
def fetch(file, {line, col}, db) do
8-
[[_pk, identifier, _arity, _file, type, module, _start_l, _start_c, _end_l, _end_c]] =
9-
DB.query(
10-
db,
8+
with [[_pk, identifier, _arity, _file, type, module, _start_l, _start_c, _end_l, _end_c]] <-
9+
DB.query(
10+
db,
11+
~Q"""
12+
SELECT
13+
*
14+
FROM
15+
'references' AS refs
16+
WHERE
17+
refs.file = ?
18+
AND refs.start_line <= ?
19+
AND ? <= refs.end_line
20+
AND refs.start_column <= ?
21+
AND ? <= refs.end_column
22+
ORDER BY refs.id desc
23+
LIMIT 1;
24+
25+
""",
26+
[file, line, line, col, col]
27+
) do
28+
query =
1129
~Q"""
1230
SELECT
1331
*
1432
FROM
15-
'references' AS refs
33+
symbols
1634
WHERE
17-
refs.file = ?
18-
AND refs.start_line <= ?
19-
AND ? <= refs.end_line
20-
AND refs.start_column <= ?
21-
AND ? <= refs.end_column
22-
ORDER BY refs.id desc
23-
LIMIT 1;
24-
25-
""",
26-
[file, line, line, col, col]
27-
)
28-
29-
query =
30-
~Q"""
31-
SELECT
32-
*
33-
FROM
34-
symbols
35-
WHERE
36-
symbols.module = ?
37-
AND symbols.name = ?;
38-
"""
39-
40-
args =
41-
case type do
42-
"alias" ->
43-
[module, module]
44-
45-
"function" ->
46-
[module, identifier]
47-
48-
_ ->
49-
nil
35+
symbols.module = ?
36+
AND symbols.name = ?;
37+
"""
38+
39+
args =
40+
case type do
41+
"alias" ->
42+
[module, module]
43+
44+
"function" ->
45+
[module, identifier]
46+
47+
_ ->
48+
nil
49+
end
50+
51+
if args do
52+
DB.query(db, query, args)
53+
else
54+
nil
5055
end
51-
52-
if args do
53-
DB.query(db, query, args)
5456
else
55-
nil
57+
_ ->
58+
nil
5659
end
5760
end
5861
end

Diff for: lib/next_ls/runtime.ex

+2-1
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,9 @@ defmodule NextLS.Runtime do
5050
task_supervisor = Keyword.fetch!(opts, :task_supervisor)
5151
registry = Keyword.fetch!(opts, :registry)
5252
on_initialized = Keyword.fetch!(opts, :on_initialized)
53+
db = Keyword.fetch!(opts, :db)
5354

54-
Registry.register(registry, :runtimes, %{name: name, uri: uri})
55+
Registry.register(registry, :runtimes, %{name: name, uri: uri, db: db})
5556

5657
pid =
5758
cond do

Diff for: lib/next_ls/runtime/supervisor.ex

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ defmodule NextLS.Runtime.Supervisor do
2525
children = [
2626
{NextLS.DB, logger: logger, file: ~c"#{hidden_folder}/nextls.db", registry: registry, name: db_name},
2727
{NextLS.Runtime.Sidecar, name: sidecar_name, db: db_name, symbol_table: symbol_table_name},
28-
{NextLS.Runtime, init_arg[:runtime] ++ [name: name, registry: registry, parent: sidecar_name]}
28+
{NextLS.Runtime, init_arg[:runtime] ++ [name: name, registry: registry, parent: sidecar_name, db: db_name]}
2929
]
3030

3131
Supervisor.init(children, strategy: :one_for_one)

Diff for: test/next_ls/runtime_test.exs

+3
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ defmodule NextLs.RuntimeTest do
5858
uri: "file://#{cwd}",
5959
parent: self(),
6060
logger: logger,
61+
db: :some_db,
6162
registry: RuntimeTest.Registry}
6263
)
6364

@@ -83,6 +84,7 @@ defmodule NextLs.RuntimeTest do
8384
uri: "file://#{cwd}",
8485
parent: self(),
8586
logger: logger,
87+
db: :some_db,
8688
registry: RuntimeTest.Registry}
8789
)
8890

@@ -107,6 +109,7 @@ defmodule NextLs.RuntimeTest do
107109
uri: "file://#{cwd}",
108110
parent: self(),
109111
logger: logger,
112+
db: :some_db,
110113
registry: RuntimeTest.Registry}
111114
)
112115

0 commit comments

Comments
 (0)