Skip to content

Commit e5cbf69

Browse files
committed
fix crash when message diagnostic is not a string
older elixir versions can return chardata
1 parent 8e8ded0 commit e5cbf69

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

apps/language_server/lib/language_server/diagnostics.ex

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ defmodule ElixirLS.LanguageServer.Diagnostics do
88
@enforce_keys [:file, :severity, :message, :position, :compiler_name]
99
defstruct [
1010
:file,
11+
:source,
1112
:severity,
1213
:message,
1314
:position,
@@ -23,7 +24,7 @@ defmodule ElixirLS.LanguageServer.Diagnostics do
2324
root_path
2425
) do
2526
diagnostic_fields = diagnostic |> Map.from_struct() |> Map.delete(:__struct__)
26-
normalized = struct(__MODULE__, diagnostic_fields)
27+
normalized = struct(__MODULE__, diagnostic_fields) |> normalize_message()
2728

2829
if Version.match?(System.version(), ">= 1.16.0-dev") do
2930
# don't include stacktrace in exceptions with position
@@ -206,6 +207,7 @@ defmodule ElixirLS.LanguageServer.Diagnostics do
206207
message: message,
207208
severity: severity
208209
}
210+
|> normalize_message()
209211
end
210212

211213
def from_code_diagnostic(
@@ -235,10 +237,13 @@ defmodule ElixirLS.LanguageServer.Diagnostics do
235237
span: diagnostic[:span],
236238
# elixir >= 1.16
237239
details: diagnostic[:details],
240+
# elixir >= 1.16
241+
source: diagnostic[:source],
238242
stacktrace: stacktrace,
239243
message: message,
240244
severity: severity
241245
}
246+
|> normalize_message()
242247
end
243248

244249
def from_error(kind, payload, stacktrace, file, project_dir) do
@@ -307,14 +312,8 @@ defmodule ElixirLS.LanguageServer.Diagnostics do
307312
:hint -> 4
308313
end
309314

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-
316315
%{
317-
"message" => message,
316+
"message" => diagnostic.message,
318317
"severity" => severity,
319318
"range" => range(normalize_position(diagnostic), source_file),
320319
"source" => diagnostic.compiler_name,
@@ -740,4 +739,8 @@ defmodule ElixirLS.LanguageServer.Diagnostics do
740739
) do
741740
{file, position}
742741
end
742+
743+
defp normalize_message(%__MODULE__{message: message} = diagnostic) do
744+
%__MODULE__{diagnostic | message: IO.chardata_to_string(message)}
745+
end
743746
end

0 commit comments

Comments
 (0)