DprintMarkdownFormatter.Config (dprint_markdown_formatter v0.7.1)

Copy Markdown View Source

Configuration 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

t()

@type t() :: %DprintMarkdownFormatter.Config{
  emphasis_kind: emphasis_kind_option(),
  format_module_attributes: module_attributes_option(),
  heading_kind: heading_kind_option(),
  line_width: pos_integer(),
  list_indent_kind: list_indent_kind_option(),
  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

default()

@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,
  heading_kind: :atx,
  list_indent_kind: :common_mark,
  format_module_attributes: nil
}

default_doc_attributes()

@spec default_doc_attributes() :: [atom()]

Returns the default list of module attributes that are formatted when format_module_attributes: true.

from_keyword(opts)

@spec from_keyword(keyword()) :: t()

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}

iex> DprintMarkdownFormatter.Config.from_keyword([heading_kind: :setext]).heading_kind
:setext

iex> DprintMarkdownFormatter.Config.from_keyword([heading_kind: "setext"]).heading_kind
:setext

iex> DprintMarkdownFormatter.Config.from_keyword([heading_kind: "atx"]).heading_kind
:atx

iex> DprintMarkdownFormatter.Config.from_keyword([heading_kind: :invalid]).heading_kind
:atx

load()

@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
DprintMarkdownFormatter.Config.load()
#=> %DprintMarkdownFormatter.Config{line_width: 80, text_wrap: :always}

merge(config, opts)

@spec merge(
  t(),
  keyword()
) :: t()

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}

iex> config = %DprintMarkdownFormatter.Config{heading_kind: :atx}
iex> DprintMarkdownFormatter.Config.merge(config, [heading_kind: :setext]).heading_kind
:setext

resolve_module_attributes(config)

@spec resolve_module_attributes(t()) :: [atom()]

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)
[]

to_nif_config(config)

@spec to_nif_config(t()) :: nif_config_map()

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,
  strong_kind: :asterisks,
  new_line_kind: :auto,
  unordered_list_kind: :dashes,
  heading_kind: :atx,
  list_indent_kind: :common_mark
}