#compdef mdl
# Completion for mdl (markdownlint) — flat command: mdl [options] [FILE.md|DIR ...]

# Parse `mdl --list-rules` into MD#### candidates with descriptions for -r/--rules.
_mdl_rules() {
  local -a rules
  local line id desc
  rules=(${(f)"$(_call_program rules mdl --list-rules 2>/dev/null)"})
  local -a specs
  for line in $rules; do
    # Lines look like: "MD001 - Header levels should only increment ..."
    if [[ $line == (#b)(MD[0-9]##)" - "(*) ]]; then
      id=$match[1]
      desc=$match[2]
      specs+=( "${id}[${desc}]" )
    fi
  done
  (( ${#specs} )) && _values -s , 'rule' $specs
}

_arguments -s -S \
  '(-c --config)'{-c,--config}'[the configuration file to use]:config file:_files' \
  '(-f --fix)'{-f,--fix}'[automatically fix what can be fixed]' \
  '(-g --git-recurse)'{-g,--git-recurse}'[only process files known to git when given a directory]' \
  '(-i --ignore-front-matter --no-ignore-front-matter)'{-i,--ignore-front-matter}'[ignore YAML front matter]' \
  '(-i --ignore-front-matter --no-ignore-front-matter)--no-ignore-front-matter[do not ignore YAML front matter]' \
  '(-j --json)'{-j,--json}'[JSON output]' \
  '(-l --list-rules)'{-l,--list-rules}"[don't process any files, just list enabled rules]" \
  '(-r --rules)'{-r,--rules}'[only process these rules]:rules:_mdl_rules' \
  '(-u --rulesets)'{-u,--rulesets}'[specify additional ruleset files to load]:ruleset files:_files' \
  '(-S --sarif)'{-S,--sarif}'[SARIF output]' \
  '(-a --show-aliases --no-show-aliases)'{-a,--show-aliases}'[show rule alias instead of rule ID when viewing rules]' \
  '(-a --show-aliases --no-show-aliases)--no-show-aliases[show rule ID instead of alias when viewing rules]' \
  '(-w --warnings --no-warnings)'{-w,--warnings}'[show kramdown warnings]' \
  '(-w --warnings --no-warnings)--no-warnings[do not show kramdown warnings]' \
  '(-d --skip-default-ruleset)'{-d,--skip-default-ruleset}"[don't load the default markdownlint ruleset]" \
  '(-s --style)'{-s,--style}'[load the given style]:style file:_files' \
  '(-t --tags)'{-t,--tags}'[only process rules with these tags]:tags:_values -s , tag' \
  '(-v --verbose --no-verbose)'{-v,--verbose}'[increase verbosity]' \
  '(-v --verbose --no-verbose)--no-verbose[decrease verbosity]' \
  '(- *)'{-h,--help}'[show this message]' \
  '(- *)'{-V,--version}'[show version]' \
  '*:markdown file or directory:_files'
