dialyxir.ex (2254B)
1 defmodule Dialyxir.Formatter.Dialyxir do 2 @moduledoc false 3 4 @behaviour Dialyxir.Formatter 5 6 @impl Dialyxir.Formatter 7 def format(dialyzer_warning = {_tag, {file, line}, message}) do 8 {warning_name, arguments} = message 9 base_name = Path.relative_to_cwd(file) 10 11 formatted = 12 try do 13 warning = warning(warning_name) 14 string = warning.format_long(arguments) 15 16 """ 17 #{base_name}:#{line}:#{warning_name} 18 #{string} 19 """ 20 rescue 21 e -> 22 message = """ 23 Unknown error occurred: #{inspect(e)} 24 """ 25 26 wrap_error_message(message, dialyzer_warning) 27 catch 28 {:error, :unknown_warning, warning_name} -> 29 message = """ 30 Unknown warning: 31 #{inspect(warning_name)} 32 """ 33 34 wrap_error_message(message, dialyzer_warning) 35 36 {:error, :lexing, warning} -> 37 message = """ 38 Failed to lex warning: 39 #{inspect(warning)} 40 """ 41 42 wrap_error_message(message, dialyzer_warning) 43 44 {:error, :parsing, failing_string} -> 45 message = """ 46 Failed to parse warning: 47 #{inspect(failing_string)} 48 """ 49 50 wrap_error_message(message, dialyzer_warning) 51 52 {:error, :pretty_printing, failing_string} -> 53 message = """ 54 Failed to pretty print warning: 55 #{inspect(failing_string)} 56 """ 57 58 wrap_error_message(message, dialyzer_warning) 59 60 {:error, :formatting, code} -> 61 message = """ 62 Failed to format warning: 63 #{inspect(code)} 64 """ 65 66 wrap_error_message(message, dialyzer_warning) 67 end 68 69 formatted <> String.duplicate("_", 80) 70 end 71 72 defp wrap_error_message(message, warning) do 73 """ 74 Please file a bug in https://github.com/jeremyjh/dialyxir/issues with this message. 75 76 #{message} 77 78 Legacy warning: 79 #{Dialyxir.Formatter.Dialyzer.format(warning)} 80 """ 81 end 82 83 defp warning(warning_name) do 84 warnings = Dialyxir.Warnings.warnings() 85 86 if Map.has_key?(warnings, warning_name) do 87 Map.get(warnings, warning_name) 88 else 89 throw({:error, :unknown_warning, warning_name}) 90 end 91 end 92 end