magit / transient

Transient commands

Home Page:https://magit.vc/manual/transient

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Infix macro requires docstring

psionic-k opened this issue · comments

At least with the lisp variable, providing no docstring results in an error during setup. I can probably fix this.

transient-setup: Unbound slot: transient-switch, "#<transient-switch transient-switch-1e660f4>", argument, oref

I don't understand what infix macro and lisp variable you are talking about. The full backtrace would probably help.

So... is there a bug I need to fix?

Reproduction, omit docstring when creating a lisp variable infix via macro, then setup a prefix that uses the infix. Doesn't seem to affect some other classes of infixes. A backtrace:

Debugger entered--Lisp error: (unbound-slot transient-switch "#<transient-switch transient-switch-750952>" argument oref)
  transient--exit-and-debug(error (unbound-slot transient-switch "#<transient-switch transient-switch-750952>" argument oref))
  signal(unbound-slot (transient-switch "#<transient-switch transient-switch-750952>" argument oref))
  #f(compiled-function (object class slot-name fn) "Slot unbound is invoked during an attempt to reference an unbound slot.\nOBJECT is the instance of the object being reference.  CLASS is the\nclass of OBJECT, and SLOT-NAME is the offending slot.  This function\nthrows the signal `unbound-slot'.  You can overload this function and\nreturn the value to use in place of the unbound value.\nArgument FN is the function signaling this error.\nUse `slot-boundp' to determine if a slot is bound or not.\n\nIn CLOS, the argument list is (CLASS OBJECT SLOT-NAME), but\nEIEIO can only dispatch on the first argument, so the first two are swapped." #<bytecode 0x4937b6243f946a8>)(#<transient-switch transient-switch-750952> #s(eieio--class :name transient-switch :docstring "Class used for command-lin..." :parents (#s(eieio--class :name transient-argument :docstring "Abstract superclass for in..." :parents ... :slots ... :index-table #<hash-table eq 36/65 0x7f6805> :children ... :initarg-tuples ... :class-slots ... :class-allocation-values ... :default-object-cache #<transient-argument transient-argument-7f6ade> :options ...)) :slots [#s(cl-slot-descriptor :name level :initform ... :type t :props ...) #s(cl-slot-descriptor :name if :initform nil :type t :props ...) #s(cl-slot-descriptor :name if-not :initform nil :type t :props ...) #s(cl-slot-descriptor :name if-non-nil :initform nil :type t :props ...) #s(cl-slot-descriptor :name if-nil :initform nil :type t :props ...) #s(cl-slot-descriptor :name if-mode :initform nil :type t :props ...) #s(cl-slot-descriptor :name if-not-mode :initform nil :type t :props ...) #s(cl-slot-descriptor :name if-derived :initform nil :type t :props ...) #s(cl-slot-descriptor :name if-not-derived :initform nil :type t :props ...) #s(cl-slot-descriptor :name key :initform ... :type t :props nil) #s(cl-slot-descriptor :name command :initform ... :type t :props nil) #s(cl-slot-descriptor :name transient :initform t :type t :props nil) #s(cl-slot-descriptor :name format :initform " %k %d (%v)" :type t :props nil) #s(cl-slot-descriptor :name description :initform nil :type t :props nil) #s(cl-slot-descriptor :name show-help :initform nil :type t :props nil) #s(cl-slot-descriptor :name inapt :initform nil :type t :props nil) #s(cl-slot-descriptor :name inapt-if :initform nil :type t :props ...) #s(cl-slot-descriptor :name inapt-if-not :initform nil :type t :props ...) #s(cl-slot-descriptor :name inapt-if-non-nil :initform nil :type t :props ...) #s(cl-slot-descriptor :name inapt-if-nil :initform nil :type t :props ...) #s(cl-slot-descriptor :name inapt-if-mode :initform nil :type t :props ...) #s(cl-slot-descriptor :name inapt-if-not-mode :initform nil :type t :props ...) #s(cl-slot-descriptor :name inapt-if-derived :initform nil :type t :props ...) #s(cl-slot-descriptor :name inapt-if-not-derived :initform nil :type t :props ...) #s(cl-slot-descriptor :name argument :initform ... :type t :props nil) #s(cl-slot-descriptor :name shortarg :initform ... :type t :props nil) ...] :index-table #<hash-table eq 36/65 0x7f6dbb> :children nil :initarg-tuples ((:level . level) (:if . if) (:if-not . if-not) (:if-non-nil . if-non-nil) (:if-nil . if-nil) (:if-mode . if-mode) (:if-not-mode . if-not-mode) (:if-derived . if-derived) (:if-not-derived . if-not-derived) (:key . key) (:command . command) (:transient . transient) (:format . format) (:description . description) (:show-help . show-help) (:inapt-if . inapt-if) (:inapt-if-not . inapt-if-not) (:inapt-if-non-nil . inapt-if-non-nil) (:inapt-if-nil . inapt-if-nil) (:inapt-if-mode . inapt-if-mode) (:inapt-if-not-mode . inapt-if-not-mode) (:inapt-if-derived . inapt-if-derived) (:inapt-if-not-derived . inapt-if-not-derived) (:argument . argument) (:shortarg . shortarg) (:init-value . init-value) ...) :class-slots [] :class-allocation-values [] :default-object-cache #<transient-switch transient-switch-7f70b0> :options (:custom-groups nil :documentation "Class used for command-lin...")) argument oref)
  apply(#f(compiled-function (object class slot-name fn) "Slot unbound is invoked during an attempt to reference an unbound slot.\nOBJECT is the instance of the object being reference.  CLASS is the\nclass of OBJECT, and SLOT-NAME is the offending slot.  This function\nthrows the signal `unbound-slot'.  You can overload this function and\nreturn the value to use in place of the unbound value.\nArgument FN is the function signaling this error.\nUse `slot-boundp' to determine if a slot is bound or not.\n\nIn CLOS, the argument list is (CLASS OBJECT SLOT-NAME), but\nEIEIO can only dispatch on the first argument, so the first two are swapped." #<bytecode 0x4937b6243f946a8>) #<transient-switch transient-switch-750952> (#s(eieio--class :name transient-switch :docstring "Class used for command-line argu..." :parents (#s(eieio--class :name transient-argument :docstring "Abstract superclass for infix ar..." :parents ... :slots ... :index-table #<hash-table eq 36/65 0x7f6805> :children ... :initarg-tuples ... :class-slots ... :class-allocation-values ... :default-object-cache #<transient-argument transient-argument-7f6ade> :options ...)) :slots [#s(cl-slot-descriptor :name level :initform ... :type t :props ...) #s(cl-slot-descriptor :name if :initform nil :type t :props ...) #s(cl-slot-descriptor :name if-not :initform nil :type t :props ...) #s(cl-slot-descriptor :name if-non-nil :initform nil :type t :props ...) #s(cl-slot-descriptor :name if-nil :initform nil :type t :props ...) #s(cl-slot-descriptor :name if-mode :initform nil :type t :props ...) #s(cl-slot-descriptor :name if-not-mode :initform nil :type t :props ...) #s(cl-slot-descriptor :name if-derived :initform nil :type t :props ...) #s(cl-slot-descriptor :name if-not-derived :initform nil :type t :props ...) #s(cl-slot-descriptor :name key :initform ... :type t :props nil) #s(cl-slot-descriptor :name command :initform ... :type t :props nil) #s(cl-slot-descriptor :name transient :initform t :type t :props nil) #s(cl-slot-descriptor :name format :initform " %k %d (%v)" :type t :props nil) #s(cl-slot-descriptor :name description :initform nil :type t :props nil) #s(cl-slot-descriptor :name show-help :initform nil :type t :props nil) #s(cl-slot-descriptor :name inapt :initform nil :type t :props nil) #s(cl-slot-descriptor :name inapt-if :initform nil :type t :props ...) #s(cl-slot-descriptor :name inapt-if-not :initform nil :type t :props ...) #s(cl-slot-descriptor :name inapt-if-non-nil :initform nil :type t :props ...) #s(cl-slot-descriptor :name inapt-if-nil :initform nil :type t :props ...) #s(cl-slot-descriptor :name inapt-if-mode :initform nil :type t :props ...) #s(cl-slot-descriptor :name inapt-if-not-mode :initform nil :type t :props ...) #s(cl-slot-descriptor :name inapt-if-derived :initform nil :type t :props ...) #s(cl-slot-descriptor :name inapt-if-not-derived :initform nil :type t :props ...) #s(cl-slot-descriptor :name argument :initform ... :type t :props nil) #s(cl-slot-descriptor :name shortarg :initform ... :type t :props nil) #s(cl-slot-descriptor :name value :initform nil :type t :props nil) #s(cl-slot-descriptor :name init-value :initform ... :type t :props nil) #s(cl-slot-descriptor :name unsavable :initform nil :type t :props nil) #s(cl-slot-descriptor :name multi-value :initform nil :type t :props nil) #s(cl-slot-descriptor :name always-read :initform nil :type t :props nil) #s(cl-slot-descriptor :name allow-empty :initform nil :type t :props nil) ...] :index-table #<hash-table eq 36/65 0x7f6dbb> :children nil :initarg-tuples ((:level . level) (:if . if) (:if-not . if-not) (:if-non-nil . if-non-nil) (:if-nil . if-nil) (:if-mode . if-mode) (:if-not-mode . if-not-mode) (:if-derived . if-derived) (:if-not-derived . if-not-derived) (:key . key) (:command . command) (:transient . transient) (:format . format) (:description . description) (:show-help . show-help) (:inapt-if . inapt-if) (:inapt-if-not . inapt-if-not) (:inapt-if-non-nil . inapt-if-non-nil) (:inapt-if-nil . inapt-if-nil) (:inapt-if-mode . inapt-if-mode) (:inapt-if-not-mode . inapt-if-not-mode) (:inapt-if-derived . inapt-if-derived) (:inapt-if-not-derived . inapt-if-not-derived) (:argument . argument) (:shortarg . shortarg) (:init-value . init-value) (:unsavable . unsavable) (:multi-value . multi-value) (:always-read . always-read) (:allow-empty . allow-empty) (:history-key . history-key) (:reader . reader) ...) :class-slots [] :class-allocation-values [] :default-object-cache #<transient-switch transient-switch-7f70b0> :options (:custom-groups nil :documentation "Class used for command-line argu...")) argument oref))
  slot-unbound(#<transient-switch transient-switch-750952> #s(eieio--class :name transient-switch :docstring "Class used for command-line argu..." :parents (#s(eieio--class :name transient-argument :docstring "Abstract superclass for infix ar..." :parents (...) :slots [... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...] :index-table #<hash-table eq 36/65 0x7f6805> :children (transient-switches transient-option transient-switch) :initarg-tuples (... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...) :class-slots [] :class-allocation-values [] :default-object-cache #<transient-argument transient-argument-7f6ade> :options (:custom-groups nil :documentation "Abstract superclass for infix ar..." :abstract t))) :slots [#s(cl-slot-descriptor :name level :initform (symbol-value ...) :type t :props (...)) #s(cl-slot-descriptor :name if :initform nil :type t :props (...)) #s(cl-slot-descriptor :name if-not :initform nil :type t :props (...)) #s(cl-slot-descriptor :name if-non-nil :initform nil :type t :props (...)) #s(cl-slot-descriptor :name if-nil :initform nil :type t :props (...)) #s(cl-slot-descriptor :name if-mode :initform nil :type t :props (...)) #s(cl-slot-descriptor :name if-not-mode :initform nil :type t :props (...)) #s(cl-slot-descriptor :name if-derived :initform nil :type t :props (...)) #s(cl-slot-descriptor :name if-not-derived :initform nil :type t :props (...)) #s(cl-slot-descriptor :name key :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name command :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name transient :initform t :type t :props nil) #s(cl-slot-descriptor :name format :initform " %k %d (%v)" :type t :props nil) #s(cl-slot-descriptor :name description :initform nil :type t :props nil) #s(cl-slot-descriptor :name show-help :initform nil :type t :props nil) #s(cl-slot-descriptor :name inapt :initform nil :type t :props nil) #s(cl-slot-descriptor :name inapt-if :initform nil :type t :props (...)) #s(cl-slot-descriptor :name inapt-if-not :initform nil :type t :props (...)) #s(cl-slot-descriptor :name inapt-if-non-nil :initform nil :type t :props (...)) #s(cl-slot-descriptor :name inapt-if-nil :initform nil :type t :props (...)) #s(cl-slot-descriptor :name inapt-if-mode :initform nil :type t :props (...)) #s(cl-slot-descriptor :name inapt-if-not-mode :initform nil :type t :props (...)) #s(cl-slot-descriptor :name inapt-if-derived :initform nil :type t :props (...)) #s(cl-slot-descriptor :name inapt-if-not-derived :initform nil :type t :props (...)) #s(cl-slot-descriptor :name argument :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name shortarg :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name value :initform nil :type t :props nil) #s(cl-slot-descriptor :name init-value :initform 'eieio--unbound :type t :props nil) #s(cl-slot-descriptor :name unsavable :initform nil :type t :props nil) #s(cl-slot-descriptor :name multi-value :initform nil :type t :props nil) #s(cl-slot-descriptor :name always-read :initform nil :type t :props nil) #s(cl-slot-descriptor :name allow-empty :initform nil :type t :props nil) ...] :index-table #<hash-table eq 36/65 0x7f6dbb> :children nil :initarg-tuples ((:level . level) (:if . if) (:if-not . if-not) (:if-non-nil . if-non-nil) (:if-nil . if-nil) (:if-mode . if-mode) (:if-not-mode . if-not-mode) (:if-derived . if-derived) (:if-not-derived . if-not-derived) (:key . key) (:command . command) (:transient . transient) (:format . format) (:description . description) (:show-help . show-help) (:inapt-if . inapt-if) (:inapt-if-not . inapt-if-not) (:inapt-if-non-nil . inapt-if-non-nil) (:inapt-if-nil . inapt-if-nil) (:inapt-if-mode . inapt-if-mode) (:inapt-if-not-mode . inapt-if-not-mode) (:inapt-if-derived . inapt-if-derived) (:inapt-if-not-derived . inapt-if-not-derived) (:argument . argument) (:shortarg . shortarg) (:init-value . init-value) (:unsavable . unsavable) (:multi-value . multi-value) (:always-read . always-read) (:allow-empty . allow-empty) (:history-key . history-key) (:reader . reader) ...) :class-slots [] :class-allocation-values [] :default-object-cache #<transient-switch transient-switch-7f70b0> :options (:custom-groups nil :documentation "Class used for command-line argu...")) argument oref)
  eieio-barf-if-slot-unbound(eieio--unbound #<transient-switch transient-switch-750952> argument oref)
  eieio-oref(#<transient-switch transient-switch-750952> argument)
  #f(compiled-function (cl--cnm obj) #<bytecode 0x18d31df13d858b24>)(#f(compiled-function (&rest args) #<bytecode -0x10944d629a812341>) #<transient-switch transient-switch-750952>)
  apply(#f(compiled-function (cl--cnm obj) #<bytecode 0x18d31df13d858b24>) #f(compiled-function (&rest args) #<bytecode -0x10944d629a812341>) #<transient-switch transient-switch-750952>)
  #f(compiled-function (obj) #<bytecode -0xedda725f49b4c55>)(#<transient-switch transient-switch-750952>)
  apply(#f(compiled-function (obj) #<bytecode -0xedda725f49b4c55>) #<transient-switch transient-switch-750952> nil)
  transient--init-suffix-key(#<transient-switch transient-switch-750952>)
  transient--init-suffix(nil (1 transient-suffix (:key "l" :description "iteration limit" :command uni-dyn--dispatch-set-limit)))
  transient--init-child(nil (1 transient-suffix (:key "l" :description "iteration limit" :command uni-dyn--dispatch-set-limit)))
  #f(compiled-function (c) #<bytecode -0x142f4556fc47a54e>)((1 transient-suffix (:key "l" :description "iteration limit" :command uni-dyn--dispatch-set-limit)))
  cl-mapcan(#f(compiled-function (c) #<bytecode -0x142f4556fc47a54e>) ((1 transient-suffix (:key "l" :description "iteration limit" :command uni-dyn--dispatch-set-limit)) (1 transient-suffix (:key "p" :description "sampling scale" :command uni-dyn--dispatch-set-sampling-scale)) (1 transient-suffix (:key "P" :description "proposal sampling scale" :command uni-dyn--dispatch-set-proposal-sampling-scale)) "" (1 transient-suffix (:key "e" :description "render escapers only" :command undefined :transient t)) (1 transient-suffix (:key "r" :description "render repeaters only" :command undefined :transient t))))
  transient--init-group(nil [1 transient-column (:description "Update Dynamics\n") ((1 transient-suffix (:key "l" :description "iteration limit" :command uni-dyn--dispatch-set-limit)) (1 transient-suffix (:key "p" :description "sampling scale" :command uni-dyn--dispatch-set-sampling-scale)) (1 transient-suffix (:key "P" :description "proposal sampling scale" :command uni-dyn--dispatch-set-proposal-sampling-scale)) "" (1 transient-suffix (:key "e" :description "render escapers only" :command undefined :transient t)) (1 transient-suffix (:key "r" :description "render repeaters only" :command undefined :transient t)))])
  transient--init-child(nil [1 transient-column (:description "Update Dynamics\n") ((1 transient-suffix (:key "l" :description "iteration limit" :command uni-dyn--dispatch-set-limit)) (1 transient-suffix (:key "p" :description "sampling scale" :command uni-dyn--dispatch-set-sampling-scale)) (1 transient-suffix (:key "P" :description "proposal sampling scale" :command uni-dyn--dispatch-set-proposal-sampling-scale)) "" (1 transient-suffix (:key "e" :description "render escapers only" :command undefined :transient t)) (1 transient-suffix (:key "r" :description "render repeaters only" :command undefined :transient t)))])
  #f(compiled-function (c) #<bytecode -0x142f4556fc47a54e>)([1 transient-column (:description "Update Dynamics\n") ((1 transient-suffix (:key "l" :description "iteration limit" :command uni-dyn--dispatch-set-limit)) (1 transient-suffix (:key "p" :description "sampling scale" :command uni-dyn--dispatch-set-sampling-scale)) (1 transient-suffix (:key "P" :description "proposal sampling scale" :command uni-dyn--dispatch-set-proposal-sampling-scale)) "" (1 transient-suffix (:key "e" :description "render escapers only" :command undefined :transient t)) (1 transient-suffix (:key "r" :description "render repeaters only" :command undefined :transient t)))])
  cl-mapcan(#f(compiled-function (c) #<bytecode -0x142f4556fc47a54e>) ([1 transient-column (:description "Rendering") ((1 transient-suffix (:key "c" :description "create" :command uni-dyn-create :transient t)) (1 transient-suffix (:key "p" :description "pause" :command undefined :transient t)) (1 transient-suffix (:key "k" :description "clear data" :command undefined :transient t)) (1 transient-suffix (:key "g" :description "refresh size" :command undefined :transient t)) (1 transient-suffix (:key "f" :description "fullscreen" :command uni-dyn-fullscreen :transient t)) "" (1 transient-suffix (:key "q" :description "quit" :command undefined)))] [1 transient-column (:description "Update Dynamics\n") ((1 transient-suffix (:key "l" :description "iteration limit" :command uni-dyn--dispatch-set-limit)) (1 transient-suffix (:key "p" :description "sampling scale" :command uni-dyn--dispatch-set-sampling-scale)) (1 transient-suffix (:key "P" :description "proposal sampling scale" :command uni-dyn--dispatch-set-proposal-sampling-scale)) "" (1 transient-suffix (:key "e" :description "render escapers only" :command undefined :transient t)) (1 transient-suffix (:key "r" :description "render repeaters only" :command undefined :transient t)))] [1 transient-column (:description "") ((1 transient-suffix (:key "h" :description "toggle help" :command transient-quit-all)))]))
  transient--init-group(nil [1 transient-columns (:description "Dynaverse\n") ([1 transient-column (:description "Rendering") ((1 transient-suffix (:key "c" :description "create" :command uni-dyn-create :transient t)) (1 transient-suffix (:key "p" :description "pause" :command undefined :transient t)) (1 transient-suffix (:key "k" :description "clear data" :command undefined :transient t)) (1 transient-suffix (:key "g" :description "refresh size" :command undefined :transient t)) (1 transient-suffix (:key "f" :description "fullscreen" :command uni-dyn-fullscreen :transient t)) "" (1 transient-suffix (:key "q" :description "quit" :command undefined)))] [1 transient-column (:description "Update Dynamics\n") ((1 transient-suffix (:key "l" :description "iteration limit" :command uni-dyn--dispatch-set-limit)) (1 transient-suffix (:key "p" :description "sampling scale" :command uni-dyn--dispatch-set-sampling-scale)) (1 transient-suffix (:key "P" :description "proposal sampling scale" :command uni-dyn--dispatch-set-proposal-sampling-scale)) "" (1 transient-suffix (:key "e" :description "render escapers only" :command undefined :transient t)) (1 transient-suffix (:key "r" :description "render repeaters only" :command undefined :transient t)))] [1 transient-column (:description "") ((1 transient-suffix (:key "h" :description "toggle help" :command transient-quit-all)))])])
  transient--init-child(nil [1 transient-columns (:description "Dynaverse\n") ([1 transient-column (:description "Rendering") ((1 transient-suffix (:key "c" :description "create" :command uni-dyn-create :transient t)) (1 transient-suffix (:key "p" :description "pause" :command undefined :transient t)) (1 transient-suffix (:key "k" :description "clear data" :command undefined :transient t)) (1 transient-suffix (:key "g" :description "refresh size" :command undefined :transient t)) (1 transient-suffix (:key "f" :description "fullscreen" :command uni-dyn-fullscreen :transient t)) "" (1 transient-suffix (:key "q" :description "quit" :command undefined)))] [1 transient-column (:description "Update Dynamics\n") ((1 transient-suffix (:key "l" :description "iteration limit" :command uni-dyn--dispatch-set-limit)) (1 transient-suffix (:key "p" :description "sampling scale" :command uni-dyn--dispatch-set-sampling-scale)) (1 transient-suffix (:key "P" :description "proposal sampling scale" :command uni-dyn--dispatch-set-proposal-sampling-scale)) "" (1 transient-suffix (:key "e" :description "render escapers only" :command undefined :transient t)) (1 transient-suffix (:key "r" :description "render repeaters only" :command undefined :transient t)))] [1 transient-column (:description "") ((1 transient-suffix (:key "h" :description "toggle help" :command transient-quit-all)))])])
  #f(compiled-function (c) #<bytecode -0x142f4556fc47a54e>)([1 transient-columns (:description "Dynaverse\n") ([1 transient-column (:description "Rendering") ((1 transient-suffix (:key "c" :description "create" :command uni-dyn-create :transient t)) (1 transient-suffix (:key "p" :description "pause" :command undefined :transient t)) (1 transient-suffix (:key "k" :description "clear data" :command undefined :transient t)) (1 transient-suffix (:key "g" :description "refresh size" :command undefined :transient t)) (1 transient-suffix (:key "f" :description "fullscreen" :command uni-dyn-fullscreen :transient t)) "" (1 transient-suffix (:key "q" :description "quit" :command undefined)))] [1 transient-column (:description "Update Dynamics\n") ((1 transient-suffix (:key "l" :description "iteration limit" :command uni-dyn--dispatch-set-limit)) (1 transient-suffix (:key "p" :description "sampling scale" :command uni-dyn--dispatch-set-sampling-scale)) (1 transient-suffix (:key "P" :description "proposal sampling scale" :command uni-dyn--dispatch-set-proposal-sampling-scale)) "" (1 transient-suffix (:key "e" :description "render escapers only" :command undefined :transient t)) (1 transient-suffix (:key "r" :description "render repeaters only" :command undefined :transient t)))] [1 transient-column (:description "") ((1 transient-suffix (:key "h" :description "toggle help" :command transient-quit-all)))])])
  cl-mapcan(#f(compiled-function (c) #<bytecode -0x142f4556fc47a54e>) ([1 transient-columns (:description "Dynaverse\n") ([1 transient-column (:description "Rendering") ((1 transient-suffix (:key "c" :description "create" :command uni-dyn-create :transient t)) (1 transient-suffix (:key "p" :description "pause" :command undefined :transient t)) (1 transient-suffix (:key "k" :description "clear data" :command undefined :transient t)) (1 transient-suffix (:key "g" :description "refresh size" :command undefined :transient t)) (1 transient-suffix (:key "f" :description "fullscreen" :command uni-dyn-fullscreen :transient t)) "" (1 transient-suffix (:key "q" :description "quit" :command undefined)))] [1 transient-column (:description "Update Dynamics\n") ((1 transient-suffix (:key "l" :description "iteration limit" :command uni-dyn--dispatch-set-limit)) (1 transient-suffix (:key "p" :description "sampling scale" :command uni-dyn--dispatch-set-sampling-scale)) (1 transient-suffix (:key "P" :description "proposal sampling scale" :command uni-dyn--dispatch-set-proposal-sampling-scale)) "" (1 transient-suffix (:key "e" :description "render escapers only" :command undefined :transient t)) (1 transient-suffix (:key "r" :description "render repeaters only" :command undefined :transient t)))] [1 transient-column (:description "") ((1 transient-suffix (:key "h" :description "toggle help" :command transient-quit-all)))])] [1 transient-columns (:hide #f(compiled-function () #<bytecode 0x173b97fa6aec41be>)) ([1 transient-column (:description "Value commands") ((1 transient-suffix (:key "C-x s  " :description "Set" :command transient-set)) (1 transient-suffix (:key "C-x C-s" :description "Save" :command transient-save)) (1 transient-suffix (:key "C-x C-k" :description "Reset" :command transient-reset)) (1 transient-suffix (:key "C-x p  " :description "Previous value" :command transient-history-prev)) (1 transient-suffix (:key "C-x n  " :description "Next value" :command transient-history-next)))] [1 transient-column (:description "Sticky commands") ((1 transient-suffix (:key "C-g" :description "Quit prefix or transient" :command transient-quit-one)) (1 transient-suffix (:key "C-q" :description "Quit transient stack" :command transient-quit-all)) (1 transient-suffix (:key "C-z" :description "Suspend transient stack" :command transient-suspend)))] [1 transient-column (:description "Customize") ((1 transient-suffix (:key "C-x t" :command transient-toggle-common :description #f(compiled-function () #<bytecode 0x1e0d3d83cba81bb5>))) (1 transient-suffix (:key "C-x l" :description "Show/hide suffixes" :command transient-set-level)))])]))
  transient--init-suffixes(uni-dyn-dispatch)
  transient--init-objects(uni-dyn-dispatch nil nil)
  transient-setup(uni-dyn-dispatch)
  uni-dyn-dispatch()
  funcall-interactively(uni-dyn-dispatch)
  command-execute(uni-dyn-dispatch record)

Infix

(transient-define-infix uni-dyn--something
  ;; "Without this docstring, setup fails."
  :variable 'uni-dyn-sampling-scale
  :class 'transient-lisp-variable)

I haven't looked at other classes except the switch, which does not demonstrate the behavior.

The arglist is mandatory, but previously it worked if one did not also omit the docstring. I've fixed it so an error is now raised if the arglist is missing.