#compdef chattr

local ret=1
local -a context line state state_descr
local -A opt_args val_args

_arguments -s -S : \
  '-f[suppress most error messages]' \
  "-p+[set file's project number]:project number" \
  '-R[act recursively]' \
  '-V[output verbosely]' \
  "-v+[set file's version/generation number]:version/generation number" \
  '1: :->attrs' \
  '*: :_files' \
&& ret=0

[[ $state == attrs ]] &&
if compset -P '*[=+-]'; then
  # These modes can't be changed with chattr: [EhINXZ]
  _values -S '' attribute \
    'A[no atime updates]' \
    'a[append only]' \
    'C[no copy on write]' \
    'c[compressed]' \
    'D[no synchronous directory updates]' \
    'd[no dump]' \
    'e[extent format]' \
    'i[immutable]' \
    'j[data journalling]' \
    'P[project hierarchy]' \
    'S[synchronous updates]' \
    's[secure deletion]' \
    'T[top of directory hierarchy]' \
    't[no tail-merging]' \
    'u[undeletable]' \
  && ret=0
else
  compset -P '*'
  _values -S '' operator = + - && ret=0
fi

return ret
