@@ -8,6 +8,7 @@ defmodule ElixirLS.LanguageServer.Diagnostics do
8
8
@ enforce_keys [ :file , :severity , :message , :position , :compiler_name ]
9
9
defstruct [
10
10
:file ,
11
+ :source ,
11
12
:severity ,
12
13
:message ,
13
14
:position ,
@@ -23,7 +24,7 @@ defmodule ElixirLS.LanguageServer.Diagnostics do
23
24
root_path
24
25
) do
25
26
diagnostic_fields = diagnostic |> Map . from_struct ( ) |> Map . delete ( :__struct__ )
26
- normalized = struct ( __MODULE__ , diagnostic_fields )
27
+ normalized = struct ( __MODULE__ , diagnostic_fields ) |> normalize_message ( )
27
28
28
29
if Version . match? ( System . version ( ) , ">= 1.16.0-dev" ) do
29
30
# don't include stacktrace in exceptions with position
@@ -206,6 +207,7 @@ defmodule ElixirLS.LanguageServer.Diagnostics do
206
207
message: message ,
207
208
severity: severity
208
209
}
210
+ |> normalize_message ( )
209
211
end
210
212
211
213
def from_code_diagnostic (
@@ -235,10 +237,13 @@ defmodule ElixirLS.LanguageServer.Diagnostics do
235
237
span: diagnostic [ :span ] ,
236
238
# elixir >= 1.16
237
239
details: diagnostic [ :details ] ,
240
+ # elixir >= 1.16
241
+ source: diagnostic [ :source ] ,
238
242
stacktrace: stacktrace ,
239
243
message: message ,
240
244
severity: severity
241
245
}
246
+ |> normalize_message ( )
242
247
end
243
248
244
249
def from_error ( kind , payload , stacktrace , file , project_dir ) do
@@ -307,14 +312,8 @@ defmodule ElixirLS.LanguageServer.Diagnostics do
307
312
:hint -> 4
308
313
end
309
314
310
- message =
311
- case diagnostic . message do
312
- m when is_binary ( m ) -> m
313
- m when is_list ( m ) -> m |> Enum . join ( "\n " )
314
- end
315
-
316
315
% {
317
- "message" => message ,
316
+ "message" => diagnostic . message ,
318
317
"severity" => severity ,
319
318
"range" => range ( normalize_position ( diagnostic ) , source_file ) ,
320
319
"source" => diagnostic . compiler_name ,
@@ -740,4 +739,8 @@ defmodule ElixirLS.LanguageServer.Diagnostics do
740
739
) do
741
740
{ file , position }
742
741
end
742
+
743
+ defp normalize_message ( % __MODULE__ { message: message } = diagnostic ) do
744
+ % __MODULE__ { diagnostic | message: IO . chardata_to_string ( message ) }
745
+ end
743
746
end
0 commit comments