DprintMarkdownFormatter.Config (dprint_markdown_formatter v0.3.0)
View SourceConfiguration management for DprintMarkdownFormatter with proper type safety and validation.
Summary
Functions
Returns the default configuration.
Returns the default list of module attributes that are formatted when
format_module_attributes: true
.
Creates a configuration struct from a keyword list with validation.
Loads and validates configuration from Mix.Project.config().
Merges a configuration struct with runtime options.
Resolves module attributes configuration to a list of atoms.
Returns a map with only the dprint-related fields for the NIF.
Types
@type t() :: %DprintMarkdownFormatter.Config{ emphasis_kind: emphasis_kind_option(), format_module_attributes: module_attributes_option(), line_width: pos_integer(), new_line_kind: new_line_kind_option(), strong_kind: strong_kind_option(), text_wrap: text_wrap_option(), unordered_list_kind: unordered_list_kind_option() }
Functions
@spec default() :: t()
Returns the default configuration.
Examples
iex> DprintMarkdownFormatter.Config.default()
%DprintMarkdownFormatter.Config{
line_width: 80,
text_wrap: :always,
emphasis_kind: :asterisks,
strong_kind: :asterisks,
new_line_kind: :auto,
unordered_list_kind: :dashes,
format_module_attributes: nil
}
@spec default_doc_attributes() :: [atom()]
Returns the default list of module attributes that are formatted when
format_module_attributes: true
.
Creates a configuration struct from a keyword list with validation.
Examples
iex> DprintMarkdownFormatter.Config.from_keyword([line_width: 100])
%DprintMarkdownFormatter.Config{line_width: 100}
iex> DprintMarkdownFormatter.Config.from_keyword([text_wrap: :never])
%DprintMarkdownFormatter.Config{text_wrap: :never}
iex> DprintMarkdownFormatter.Config.from_keyword([format_module_attributes: true])
%DprintMarkdownFormatter.Config{format_module_attributes: true}
@spec load() :: t()
Loads and validates configuration from Mix.Project.config().
Returns a validated configuration struct with proper type checking. Invalid values are replaced with defaults and warnings are logged.
Examples
# With valid configuration in mix.exs
iex> DprintMarkdownFormatter.Config.load()
%DprintMarkdownFormatter.Config{line_width: 80, text_wrap: :always}
# With invalid configuration values (logs warnings and uses defaults)
iex> DprintMarkdownFormatter.Config.load()
%DprintMarkdownFormatter.Config{line_width: 80, text_wrap: :always}
Merges a configuration struct with runtime options.
Runtime options take precedence over configuration values. Only valid options are merged; invalid options are ignored with a warning.
Examples
iex> config = %DprintMarkdownFormatter.Config{line_width: 80}
iex> DprintMarkdownFormatter.Config.merge(config, [line_width: 100])
%DprintMarkdownFormatter.Config{line_width: 100}
iex> config = %DprintMarkdownFormatter.Config{text_wrap: :always}
iex> DprintMarkdownFormatter.Config.merge(config, [text_wrap: :never, line_width: 120])
%DprintMarkdownFormatter.Config{text_wrap: :never, line_width: 120}
Resolves module attributes configuration to a list of atoms.
Examples
iex> config = %DprintMarkdownFormatter.Config{format_module_attributes: true}
iex> DprintMarkdownFormatter.Config.resolve_module_attributes(config)
[:moduledoc, :doc, :typedoc, :shortdoc, :deprecated]
iex> config = %DprintMarkdownFormatter.Config{format_module_attributes: [:custom]}
iex> DprintMarkdownFormatter.Config.resolve_module_attributes(config)
[:custom]
iex> config = %DprintMarkdownFormatter.Config{format_module_attributes: nil}
iex> DprintMarkdownFormatter.Config.resolve_module_attributes(config)
[]
@spec to_nif_config(t()) :: %{ line_width: non_neg_integer(), text_wrap: atom(), emphasis_kind: atom(), strong_kind: atom(), new_line_kind: atom(), unordered_list_kind: atom() }
Returns a map with only the dprint-related fields for the NIF.
Excludes format_module_attributes which is only used by Elixir code. This map is passed directly to the Rust NIF for formatting.
Examples
iex> config = %DprintMarkdownFormatter.Config{line_width: 100, text_wrap: :never}
iex> DprintMarkdownFormatter.Config.to_nif_config(config)
%{line_width: 100, text_wrap: :never, emphasis_kind: :asterisks}