Skip to content

Commit d2aa3d2

Browse files
committed
validate dialyzer options
invalid options lead unhandled to crashes
1 parent a9a038f commit d2aa3d2

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

apps/language_server/lib/language_server/dialyzer/analyzer.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,8 @@ defmodule ElixirLS.LanguageServer.Dialyzer.Analyzer do
180180
main_loop(state)
181181
end
182182

183+
def all_warns, do: @default_warns ++ @non_default_warns
184+
183185
def matching_tags(warn_opts) do
184186
default_warns =
185187
unless :persistent_term.get(:language_server_test_mode, false) do

apps/language_server/lib/language_server/server.ex

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1787,6 +1787,24 @@ defmodule ElixirLS.LanguageServer.Server do
17871787
else
17881788
IO.warn("Invalid `dialyzerWarnOpts` #{inspect(dialyzer_warn_opts)}")
17891789
end
1790+
1791+
all_warns = ElixirLS.LanguageServer.Dialyzer.Analyzer.all_warns() |> Enum.map(&to_string/1)
1792+
1793+
for opt <- dialyzer_warn_opts, opt not in all_warns do
1794+
Logger.error("Invalid `dialyzerWarnOpts`: unknown warning option `#{opt}`")
1795+
1796+
JsonRpc.show_message(
1797+
:error,
1798+
"Invalid `dialyzerWarnOpts` in configuration. Unknown warning option `#{opt}`."
1799+
)
1800+
1801+
unless :persistent_term.get(:language_server_test_mode, false) do
1802+
Process.sleep(2000)
1803+
System.halt(1)
1804+
else
1805+
IO.warn("Invalid `dialyzerWarnOpts`: unknown warning option `#{opt}`")
1806+
end
1807+
end
17901808
end
17911809

17921810
dialyzer_formats = [

0 commit comments

Comments
 (0)