@@ -155,9 +155,11 @@ defmodule ElixirLS.LanguageServer.Server do
155155
156156 Logger . error ( "Terminating #{ __MODULE__ } : #{ message } " )
157157
158- unless Application . get_env ( :language_server , :test_mode ) do
158+ unless :persistent_term . get ( :language_server_test_mode , false ) do
159159 Process . sleep ( 2000 )
160160 System . halt ( 1 )
161+ else
162+ IO . warn ( "Terminating #{ __MODULE__ } : #{ message } " )
161163 end
162164 end
163165
@@ -326,8 +328,13 @@ defmodule ElixirLS.LanguageServer.Server do
326328
327329 Logger . error ( message )
328330 JsonRpc . show_message ( :error , message )
329- Process . sleep ( 2000 )
330- System . halt ( 1 )
331+
332+ unless :persistent_term . get ( :language_server_test_mode , false ) do
333+ Process . sleep ( 2000 )
334+ System . halt ( 1 )
335+ else
336+ IO . warn ( message )
337+ end
331338 end
332339
333340 state =
@@ -545,10 +552,10 @@ defmodule ElixirLS.LanguageServer.Server do
545552 defp handle_notification ( notification ( "exit" ) , state = % __MODULE__ { } ) do
546553 code = if state . received_shutdown? , do: 0 , else: 1
547554
548- unless Application . get_env ( :language_server , :test_mode ) do
555+ unless :persistent_term . get ( :language_server_test_mode , false ) do
549556 System . stop ( code )
550557 else
551- Process . exit ( self ( ) , { :exit_code , code } )
558+ Logger . info ( "Received exit with code #{ code } " )
552559 end
553560
554561 state
@@ -1358,8 +1365,13 @@ defmodule ElixirLS.LanguageServer.Server do
13581365
13591366 Logger . error ( message )
13601367 JsonRpc . show_message ( :error , message )
1361- Process . sleep ( 2000 )
1362- System . halt ( 1 )
1368+
1369+ unless :persistent_term . get ( :language_server_test_mode , false ) do
1370+ Process . sleep ( 2000 )
1371+ System . halt ( 1 )
1372+ else
1373+ IO . warn ( message )
1374+ end
13631375 end
13641376 end
13651377
@@ -1618,8 +1630,12 @@ defmodule ElixirLS.LanguageServer.Server do
16181630 "Invalid `dialyzerWarnOpts` in configuration. Expected list of strings or nil, got #{ inspect ( dialyzer_warn_opts ) } ."
16191631 )
16201632
1621- Process . sleep ( 2000 )
1622- System . halt ( 1 )
1633+ unless :persistent_term . get ( :language_server_test_mode , false ) do
1634+ Process . sleep ( 2000 )
1635+ System . halt ( 1 )
1636+ else
1637+ IO . warn ( "Invalid `dialyzerWarnOpts` #{ inspect ( dialyzer_warn_opts ) } " )
1638+ end
16231639 end
16241640
16251641 dialyzer_formats = [
@@ -1638,8 +1654,12 @@ defmodule ElixirLS.LanguageServer.Server do
16381654 "Invalid `dialyzerFormat` in configuration. Expected one of #{ Enum . join ( dialyzer_formats , ", " ) } or nil, got #{ inspect ( dialyzer_format ) } ."
16391655 )
16401656
1641- Process . sleep ( 2000 )
1642- System . halt ( 1 )
1657+ unless :persistent_term . get ( :language_server_test_mode , false ) do
1658+ Process . sleep ( 2000 )
1659+ System . halt ( 1 )
1660+ else
1661+ IO . warn ( "Invalid `dialyzerFormat` #{ inspect ( dialyzer_format ) } " )
1662+ end
16431663 end
16441664 end
16451665
@@ -1711,8 +1731,12 @@ defmodule ElixirLS.LanguageServer.Server do
17111731 "Invalid `additionalWatchedExtensions` in configuration. Expected list of extensions starting with `.` or nil, got #{ inspect ( exts ) } ."
17121732 )
17131733
1714- Process . sleep ( 2000 )
1715- System . halt ( 1 )
1734+ unless :persistent_term . get ( :language_server_test_mode , false ) do
1735+ Process . sleep ( 2000 )
1736+ System . halt ( 1 )
1737+ else
1738+ IO . warn ( "Invalid `additionalWatchedExtensions`: #{ inspect ( exts ) } " )
1739+ end
17161740 end
17171741
17181742 case JsonRpc . register_capability_request (
@@ -1800,8 +1824,14 @@ defmodule ElixirLS.LanguageServer.Server do
18001824 "Invalid `envVariables` in configuration. Expected a map with string key value pairs, got #{ inspect ( env ) } ."
18011825 )
18021826
1803- Process . sleep ( 2000 )
1804- System . halt ( 1 )
1827+ unless :persistent_term . get ( :language_server_test_mode , false ) do
1828+ Process . sleep ( 2000 )
1829+ System . halt ( 1 )
1830+ else
1831+ IO . warn (
1832+ "Cannot set environment variables to #{ inspect ( env ) } : #{ Exception . message ( e ) } "
1833+ )
1834+ end
18051835 end
18061836 else
18071837 JsonRpc . show_message (
@@ -1849,8 +1879,12 @@ defmodule ElixirLS.LanguageServer.Server do
18491879 "Invalid `mixEnv` in configuration. Expected a string or nil, got #{ inspect ( env ) } ."
18501880 )
18511881
1852- Process . sleep ( 2000 )
1853- System . halt ( 1 )
1882+ unless :persistent_term . get ( :language_server_test_mode , false ) do
1883+ Process . sleep ( 2000 )
1884+ System . halt ( 1 )
1885+ else
1886+ IO . warn ( "Cannot set mix env to #{ inspect ( env ) } : #{ Exception . message ( e ) } " )
1887+ end
18541888 end
18551889 else
18561890 JsonRpc . show_message ( :warning , "Mix env change detected. ElixirLS will restart." )
@@ -1892,8 +1926,12 @@ defmodule ElixirLS.LanguageServer.Server do
18921926 "Invalid `mixTarget` in configuration. Expected a string or nil, got #{ inspect ( target ) } ."
18931927 )
18941928
1895- Process . sleep ( 2000 )
1896- System . halt ( 1 )
1929+ unless :persistent_term . get ( :language_server_test_mode , false ) do
1930+ Process . sleep ( 2000 )
1931+ System . halt ( 1 )
1932+ else
1933+ IO . warn ( "Cannot set mix target to #{ inspect ( target ) } : #{ Exception . message ( e ) } " )
1934+ end
18971935 end
18981936 else
18991937 JsonRpc . show_message ( :warning , "Mix target change detected. ElixirLS will restart" )
@@ -1934,17 +1972,26 @@ defmodule ElixirLS.LanguageServer.Server do
19341972 "Invalid `projectDir` in configuration. Expected a string or nil, got #{ inspect ( project_dir_config ) } ."
19351973 )
19361974
1937- Process . sleep ( 2000 )
1938- System . halt ( 1 )
1975+ unless :persistent_term . get ( :language_server_test_mode , false ) do
1976+ Process . sleep ( 2000 )
1977+ System . halt ( 1 )
1978+ else
1979+ IO . warn ( "Invalid `projectDir`: #{ inspect ( project_dir_config ) } " )
1980+ end
19391981 end
19401982 end
19411983
19421984 cond do
19431985 not File . dir? ( project_dir ) ->
19441986 Logger . error ( "Project directory #{ project_dir } does not exist" )
19451987 JsonRpc . show_message ( :error , "Project directory #{ project_dir } does not exist" )
1946- Process . sleep ( 2000 )
1947- System . halt ( 1 )
1988+
1989+ unless :persistent_term . get ( :language_server_test_mode , false ) do
1990+ Process . sleep ( 2000 )
1991+ System . halt ( 1 )
1992+ else
1993+ IO . warn ( "Project directory #{ project_dir } does not exist" )
1994+ end
19481995
19491996 is_nil ( prev_project_dir ) ->
19501997 with :ok <- File . cd ( project_dir ) ,
@@ -1964,8 +2011,12 @@ defmodule ElixirLS.LanguageServer.Server do
19642011 "Please make sure the directory exists and you have necessary permissions"
19652012 )
19662013
1967- Process . sleep ( 2000 )
1968- System . halt ( 1 )
2014+ unless :persistent_term . get ( :language_server_test_mode , false ) do
2015+ Process . sleep ( 2000 )
2016+ System . halt ( 1 )
2017+ else
2018+ IO . warn ( "Unable to change directory into #{ project_dir } : #{ inspect ( reason ) } " )
2019+ end
19692020 end
19702021
19712022 prev_project_dir != project_dir ->
@@ -2015,8 +2066,12 @@ defmodule ElixirLS.LanguageServer.Server do
20152066 "Cannot create .elixir_ls/.gitignore"
20162067 )
20172068
2018- Process . sleep ( 2000 )
2019- System . halt ( 1 )
2069+ unless :persistent_term . get ( :language_server_test_mode , false ) do
2070+ Process . sleep ( 2000 )
2071+ System . halt ( 1 )
2072+ else
2073+ IO . warn ( "Cannot create .elixir_ls/.gitignore, cause: #{ Atom . to_string ( err ) } " )
2074+ end
20202075 end
20212076 end
20222077
@@ -2062,8 +2117,12 @@ defmodule ElixirLS.LanguageServer.Server do
20622117 message
20632118 )
20642119
2065- Process . sleep ( 2000 )
2066- System . halt ( 1 )
2120+ unless :persistent_term . get ( :language_server_test_mode , false ) do
2121+ Process . sleep ( 2000 )
2122+ System . halt ( 1 )
2123+ else
2124+ IO . warn ( message )
2125+ end
20672126 end
20682127
20692128 case File . cwd ( ) do
@@ -2092,8 +2151,12 @@ defmodule ElixirLS.LanguageServer.Server do
20922151 message
20932152 )
20942153
2095- Process . sleep ( 2000 )
2096- System . halt ( 1 )
2154+ unless :persistent_term . get ( :language_server_test_mode , false ) do
2155+ Process . sleep ( 2000 )
2156+ System . halt ( 1 )
2157+ else
2158+ IO . warn ( message )
2159+ end
20972160 end
20982161 else
20992162 message =
@@ -2106,8 +2169,12 @@ defmodule ElixirLS.LanguageServer.Server do
21062169 message
21072170 )
21082171
2109- Process . sleep ( 2000 )
2110- System . halt ( 1 )
2172+ unless :persistent_term . get ( :language_server_test_mode , false ) do
2173+ Process . sleep ( 2000 )
2174+ System . halt ( 1 )
2175+ else
2176+ IO . warn ( message )
2177+ end
21112178 end
21122179
21132180 { :error , reason } ->
@@ -2119,8 +2186,12 @@ defmodule ElixirLS.LanguageServer.Server do
21192186 message
21202187 )
21212188
2122- Process . sleep ( 2000 )
2123- System . halt ( 1 )
2189+ unless :persistent_term . get ( :language_server_test_mode , false ) do
2190+ Process . sleep ( 2000 )
2191+ System . halt ( 1 )
2192+ else
2193+ IO . warn ( message )
2194+ end
21242195 end
21252196 end
21262197 end
@@ -2255,25 +2326,25 @@ defmodule ElixirLS.LanguageServer.Server do
22552326
22562327 defp do_sanity_check ( _state ) do
22572328 try do
2258- unless function_exported? ( ElixirSense , :module_info , 1 ) and
2259- :persistent_term . get ( :language_server_lib_dir ) ==
2260- ElixirLS.LanguageServer . module_info ( :compile ) [ :source ] do
2261- raise "sanity check failed"
2262- end
2329+ unless :persistent_term . get ( :language_server_test_mode , false ) do
2330+ unless function_exported? ( ElixirSense , :module_info , 1 ) and
2331+ :persistent_term . get ( :language_server_lib_dir ) ==
2332+ ElixirLS.LanguageServer . module_info ( :compile ) [ :source ] do
2333+ raise "sanity check failed"
2334+ end
22632335
2264- unless function_exported? ( ElixirLS.LanguageServer , :module_info , 1 ) and
2265- :persistent_term . get ( :language_server_elixir_sense_lib_dir ) ==
2266- ElixirSense . module_info ( :compile ) [ :source ] do
2267- raise "sanity check failed"
2336+ unless function_exported? ( ElixirLS.LanguageServer , :module_info , 1 ) and
2337+ :persistent_term . get ( :language_server_elixir_sense_lib_dir ) ==
2338+ ElixirSense . module_info ( :compile ) [ :source ] do
2339+ raise "sanity check failed"
2340+ end
22682341 end
22692342 rescue
22702343 _ ->
22712344 Logger . error ( "Sanity check failed. ElixirLS needs to restart." )
22722345
2273- unless Application . get_env ( :language_server , :test_mode ) do
2274- Process . sleep ( 2000 )
2275- System . halt ( 1 )
2276- end
2346+ Process . sleep ( 2000 )
2347+ System . halt ( 1 )
22772348 end
22782349 end
22792350end
0 commit comments