@@ -212,23 +212,29 @@ defmodule ElixirLS.LanguageServer.Parser do
212
212
{ :parse_file , uri } ,
213
213
% { files: files , debounce_refs: debounce_refs } = state
214
214
) do
215
- file = Map . fetch! ( files , uri )
216
- version = file . source_file . version
215
+ state =
216
+ case files [ uri ] do
217
+ nil ->
218
+ # file got closed, no need to do anything
219
+ state
220
+ file ->
221
+ version = file . source_file . version
217
222
218
- parent = self ( )
223
+ parent = self ( )
219
224
220
- { pid , ref } =
221
- spawn_monitor ( fn ->
222
- updated_file = do_parse ( file )
223
- send ( parent , { :parse_file_done , uri , updated_file , nil } )
224
- end )
225
+ { pid , ref } =
226
+ spawn_monitor ( fn ->
227
+ updated_file = do_parse ( file )
228
+ send ( parent , { :parse_file_done , uri , updated_file , nil } )
229
+ end )
225
230
226
- state = % {
227
- state
228
- | debounce_refs: Map . delete ( debounce_refs , uri ) ,
229
- parse_pids: put_nested ( state . parse_pids , { uri , version } , ref , { pid , nil } ) ,
230
- parse_uris: Map . put ( state . parse_uris , ref , { uri , version } )
231
- }
231
+ % {
232
+ state
233
+ | debounce_refs: Map . delete ( debounce_refs , uri ) ,
234
+ parse_pids: put_nested ( state . parse_pids , { uri , version } , ref , { pid , nil } ) ,
235
+ parse_uris: Map . put ( state . parse_uris , ref , { uri , version } )
236
+ }
237
+ end
232
238
233
239
{ :noreply , state }
234
240
end
0 commit comments