查看源代码 Mix.Task.Compiler.Diagnostic (Mix v1.16.2)

诊断信息,例如警告或编译错误。

文件和位置与应显示诊断信息的位置相关。如果存在文件和位置,则诊断信息是精确的,您可以使用给定的文件和位置来生成代码片段、IDE 注解等。可以使用可选的跨度,其中包含诊断信息结束的行和列。

否则,可能会给出堆栈跟踪,您可以根据自己的启发式方法提供更好的报告。

source 字段指向编译器跟踪错误的源文件。例如,文件 lib/foo.ex 可能会嵌入来自 lib/foo/bar.eex.eex 模板。EEx 模板上的语法错误将指向文件 lib/foo/bar.eex,但源文件是 lib/foo.ex

总结

类型

诊断信息的严重程度

t()

类型

@type severity() :: :error | :warning | :information | :hint

诊断信息的严重程度

  • :error - 导致编译失败的问题

  • :warning - 没有导致失败但提示程序员可能犯了错误的问题

  • :hint - 关于风格或良好实践的建议,其严重程度不如警告

  • :information - 与编译相关的任何其他信息,不属于上述类别

@type t() :: %Mix.Task.Compiler.Diagnostic{
  compiler_name: String.t(),
  details: term(),
  file: Path.t() | nil,
  message: IO.chardata(),
  position: Code.position(),
  severity: severity(),
  source: Path.t() | nil,
  span: {line :: pos_integer(), column :: pos_integer()} | nil,
  stacktrace: Exception.stacktrace()
}