Skip to content

Commit 68dd9fa

Browse files
authored
Skip non file: URI scheme notifications (#475)
file watcher receives them in some cases those notifications should not trigger build we are also unable to update dirty flag Fixes #474
1 parent 51a4966 commit 68dd9fa

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

apps/language_server/lib/language_server/server.ex

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -390,9 +390,13 @@ defmodule ElixirLS.LanguageServer.Server do
390390
end
391391

392392
defp handle_notification(did_change_watched_files(changes), state) do
393+
changes = Enum.filter(changes, &match?(%{"uri" => "file:" <> _}, &1))
394+
393395
needs_build =
394-
Enum.any?(changes, fn %{"uri" => uri, "type" => type} ->
395-
Path.extname(uri) in @watched_extensions and
396+
Enum.any?(changes, fn %{"uri" => uri = "file:" <> _, "type" => type} ->
397+
path = SourceFile.path_from_uri(uri)
398+
399+
Path.extname(path) in @watched_extensions and
396400
(type in [1, 3] or not Map.has_key?(state.source_files, uri) or
397401
state.source_files[uri].dirty?)
398402
end)
@@ -422,6 +426,7 @@ defmodule ElixirLS.LanguageServer.Server do
422426
end
423427

424428
_ ->
429+
# file not open or not dirty
425430
acc
426431
end
427432
end)

apps/language_server/test/server_test.exs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -629,6 +629,18 @@ defmodule ElixirLS.LanguageServer.ServerTest do
629629
state = :sys.get_state(server)
630630
assert state.needs_build?
631631
end
632+
633+
test "gracefully skip not supported URI scheme", %{server: server} do
634+
uri = "git://github.com/user/repo.git"
635+
fake_initialize(server)
636+
637+
Server.receive_packet(
638+
server,
639+
did_change_watched_files([%{"uri" => uri, "type" => 2}])
640+
)
641+
642+
:sys.get_state(server)
643+
end
632644
end
633645

634646
test "hover", %{server: server} do

0 commit comments

Comments
 (0)