ExOKF.Diagnostics (ex_okf v0.1.0)

Copy Markdown View Source

A collection of ExOKF.Diagnostic entries with aggregation helpers.

Fields

FieldTypeDescription
entries[ExOKF.Diagnostic.t()]Ordered list of diagnostics.

Example

%ExOKF.Diagnostics{
  entries: [
    %ExOKF.Diagnostic{severity: :error, code: :missing_type, message: "missing required type field", path: "x.md"},
    %ExOKF.Diagnostic{severity: :warning, code: :broken_internal_link, message: "broken internal link", path: "y.md"}
  ]
}

Summary

Types

t()

A diagnostics collection.

Functions

Appends a single diagnostic.

Returns diagnostics of the given severity.

Appends many diagnostics from another collection or a list.

Counts diagnostics by severity.

Returns true when any :error diagnostic is present.

Formats all diagnostics, one per line.

Creates an empty diagnostics collection.

Creates a diagnostics collection from a list of entries.

Types

t()

@type t() :: %ExOKF.Diagnostics{entries: [ExOKF.Diagnostic.t()]}

A diagnostics collection.

See the module documentation for the entries field.

Functions

add(diags, entry)

@spec add(t(), ExOKF.Diagnostic.t()) :: t()

Appends a single diagnostic.

Parameters

  • diags (t/0) — existing collection
  • entry (ExOKF.Diagnostic.t()) — diagnostic to append

Examples

iex> d = %ExOKF.Diagnostic{severity: :warning, code: :w, message: "warn"}
iex> ExOKF.Diagnostics.add(ExOKF.Diagnostics.new(), d).entries
[d]

by_severity(diagnostics, severity)

@spec by_severity(t(), ExOKF.Diagnostic.severity()) :: [ExOKF.Diagnostic.t()]

Returns diagnostics of the given severity.

Parameters

  • diags (t/0) — collection to filter
  • severity (ExOKF.Diagnostic.severity()) — :error, :warning, or :info

Examples

iex> w = %ExOKF.Diagnostic{severity: :warning, code: :w, message: "w"}
iex> e = %ExOKF.Diagnostic{severity: :error, code: :e, message: "e"}
iex> ExOKF.Diagnostics.by_severity(ExOKF.Diagnostics.new([w, e]), :warning)
[w]

concat(left, entries)

@spec concat(t(), t() | [ExOKF.Diagnostic.t()]) :: t()

Appends many diagnostics from another collection or a list.

Parameters

  • left (t/0) — existing collection
  • right (t:t/0 \| [ExOKF.Diagnostic.t()]) — diagnostics to append

Examples

iex> a = %ExOKF.Diagnostic{severity: :info, code: :a, message: "a"}
iex> b = %ExOKF.Diagnostic{severity: :info, code: :b, message: "b"}
iex> result = ExOKF.Diagnostics.concat(ExOKF.Diagnostics.new([a]), [b])
iex> Enum.map(result.entries, & &1.code)
[:a, :b]

counts(diagnostics)

@spec counts(t()) :: %{
  error: non_neg_integer(),
  warning: non_neg_integer(),
  info: non_neg_integer()
}

Counts diagnostics by severity.

Parameters

  • diags (t/0) — collection to summarize

Examples

iex> w = %ExOKF.Diagnostic{severity: :warning, code: :w, message: "w"}
iex> ExOKF.Diagnostics.counts(ExOKF.Diagnostics.new([w]))
%{error: 0, warning: 1, info: 0}

errors?(diagnostics)

@spec errors?(t()) :: boolean()

Returns true when any :error diagnostic is present.

Parameters

  • diags (t/0) — collection to inspect

Examples

iex> ExOKF.Diagnostics.errors?(ExOKF.Diagnostics.new())
false

iex> d = %ExOKF.Diagnostic{severity: :error, code: :e, message: "e"}
iex> ExOKF.Diagnostics.errors?(ExOKF.Diagnostics.new([d]))
true

format(diagnostics)

@spec format(t()) :: String.t()

Formats all diagnostics, one per line.

Parameters

  • diags (t/0) — collection to format

Examples

iex> d = %ExOKF.Diagnostic{severity: :error, code: :e, message: "boom", path: "x.md"}
iex> ExOKF.Diagnostics.format(ExOKF.Diagnostics.new([d]))
"error: boom (x.md)"

new()

@spec new() :: t()

Creates an empty diagnostics collection.

Examples

iex> ExOKF.Diagnostics.new()
%ExOKF.Diagnostics{entries: []}

new(entries)

@spec new([ExOKF.Diagnostic.t()]) :: t()

Creates a diagnostics collection from a list of entries.

Parameters

  • entries ([ExOKF.Diagnostic.t()]) — initial diagnostics

Examples

iex> d = %ExOKF.Diagnostic{severity: :info, code: :note, message: "hi"}
iex> ExOKF.Diagnostics.new([d]).entries
[d]