ExQuality.Config (ExQuality v0.5.0)

View Source

Loads and merges configuration from multiple sources.

Configuration is resolved in the following order (later wins):

  1. Defaults
  2. Auto-detected tool availability
  3. Project config file (.quality.exs)
  4. CLI arguments

Example .quality.exs

[
  # Global options
  quick: false,

  # Override auto-detection: force disable dialyzer
  dialyzer: [enabled: false],

  # Credo options (enabled: :auto by default)
  credo: [
    strict: true,
    all: false
  ],

  # Doctor options
  doctor: [
    summary_only: true
  ]
]

Configuration Options

Global Options

  • quick - Quick mode: skip dialyzer and coverage enforcement (default: false)

Stage Options

Each stage supports:

  • enabled - :auto (use auto-detection) | true (force enable) | false (force disable)

Stage-specific options:

  • compile.warnings_as_errors - Treat warnings as errors (default: true)
  • credo.strict - Use strict mode (default: true)
  • credo.all - Check all files (default: false)
  • dependencies.check_unused - Check for unused dependencies (default: true)
  • dependencies.audit - Run security audit if available (default: :auto)
  • doctor.summary_only - Show only summary (default: false)

Summary

Functions

Loads configuration with auto-detection and overrides.

Determines if a stage should run based on config.

Functions

load(cli_opts \\ [])

@spec load(keyword()) :: keyword()

Loads configuration with auto-detection and overrides.

Resolution order (later wins):

  1. Defaults
  2. Auto-detected tool availability
  3. .quality.exs file
  4. CLI arguments

Examples

# Load with CLI options
config = ExQuality.Config.load(quick: true, skip_dialyzer: true)

# Load with defaults only
config = ExQuality.Config.load()

stage_enabled?(config, stage)

@spec stage_enabled?(
  keyword(),
  atom()
) :: boolean()

Determines if a stage should run based on config.

  • enabled: :auto → use detected availability
  • enabled: true → force enable (will error if tool missing)
  • enabled: false → force disable

Examples

config = ExQuality.Config.load()
ExQuality.Config.stage_enabled?(config, :credo)
#=> true (if credo is installed)

config = ExQuality.Config.load(skip_credo: true)
ExQuality.Config.stage_enabled?(config, :credo)
#=> false