Function: transient--expand-define-args

transient--expand-define-args is a function defined in transient.el.

Signature

(transient--expand-define-args ARGS ARGLIST FORM &optional NOBODY)

Source Code

;; Defined in ~/.emacs.d/elpa/transient-20260414.1009/transient.el
(eval-and-compile ;transient--expand-define-args
  (defun transient--expand-define-args (args &optional arglist form nobody)
    ;; ARGLIST and FORM are only optional for backward compatibility.
    ;; This is necessary because "emoji.el" from Emacs 29 calls this
    ;; function directly, with just one argument.
    (declare (advertised-calling-convention
              (args arglist form &optional nobody) "0.7.1"))
    (unless (listp arglist)
      (error "Mandatory ARGLIST is missing"))
    (let (class keys suffixes docstr declare (interactive-only t))
      (when (stringp (car args))
        (setq docstr (pop args)))
      (while (keywordp (car args))
        (let ((k (pop args))
              (v (pop args)))
          (if (eq k :class)
              (setq class v)
            (push k keys)
            (push v keys))))
      (while-let*
          ((arg (car args))
           (arg (cond
                  ;; Inline group definition.
                  ((vectorp arg)
                   (pop args))
                  ;; Quoted include, as one would expect.
                  ((eq (car-safe arg) 'quote)
                   (cadr (pop args)))
                  ;; Unquoted include, for compatibility.
                  ((and arg (symbolp arg))
                   (pop args)))))
        (push arg suffixes))
      (when (eq (car-safe (car args)) 'declare)
        (setq declare (car args))
        (setq args (cdr args))
        (when-let ((int (assq 'interactive-only declare)))
          (setq interactive-only (cadr int))
          (delq int declare))
        (unless (cdr declare)
          (setq declare nil)))
      (cond
        ((not args))
        (nobody
         (error "%s: No function body allowed" form))
        ((not (eq (car-safe (nth (if declare 1 0) args)) 'interactive))
         (error "%s: Interactive form missing" form)))
      (list (if (eq (car-safe class) 'quote)
                (cadr class)
              class)
            (nreverse keys)
            (nreverse suffixes)
            docstr
            (if declare (cons declare args) args)
            interactive-only))))