Function: cider-stacktrace-render-cause

cider-stacktrace-render-cause is a byte-compiled function defined in cider-stacktrace.el.

Signature

(cider-stacktrace-render-cause BUFFER CAUSE NUM NOTE &optional INSPECT-INDEX)

Documentation

Emit into BUFFER the CAUSE NUM, exception class, message, data, and NOTE, make INSPECT-INDEX actionable if present.

Source Code

;; Defined in ~/.emacs.d/elpa/cider-20260414.1619/cider-stacktrace.el
(defun cider-stacktrace-render-cause (buffer cause num note &optional inspect-index)
  "Emit into BUFFER the CAUSE NUM, exception class, message, data, and NOTE,
make INSPECT-INDEX actionable if present."
  (with-current-buffer buffer
    (nrepl-dbind-response cause (class message data spec triage stacktrace)
      (let ((indent "   ")
            (class-face 'cider-stacktrace-error-class-face)
            (message-face 'cider-stacktrace-error-message-face))
        (cider-propertize-region `(cause ,num)
          ;; Detail level 0: exception class
          (cider-propertize-region `(detail
                                     0

                                     inspect-index
                                     ,inspect-index

                                     keymap
                                     ,cider-stacktrace-exception-map)
            (insert (format "%d. " num)
                    (propertize note 'font-lock-face 'font-lock-comment-face) " "
                    (propertize class 'font-lock-face class-face 'mouse-face 'highlight)
                    "\n"))
          ;; Detail level 1: message + ex-data
          (cider-propertize-region '(detail 1)
            (if (equal class "clojure.lang.Compiler$CompilerException")
                (cider-stacktrace-render-compile-error buffer cause)
              (cider-stacktrace-emit-indented
               (propertize (or message "(No message)")
                           'font-lock-face  message-face)
               indent t))
            (when triage
              (insert "\n")
              (cider-stacktrace-emit-indented
               (propertize (string-trim triage) 'font-lock-face  message-face)
               indent nil))
            (when spec
              (insert "\n")
              (cider-stacktrace--emit-spec-problems spec (concat indent "  ")))
            (when data
              (insert "\n")
              (cider-propertize-region `(inspect-index
                                         ,inspect-index
                                         keymap
                                         ,cider-stacktrace-ex-data-map
                                         mouse-face
                                         highlight)
                (cider-stacktrace-emit-indented data indent nil t)))
            (insert "\n"))
          ;; Detail level 2: stacktrace
          (cider-propertize-region '(detail 2)
            (let ((beg (point))
                  (bg `(:background ,cider-stacktrace-frames-background-color :extend t)))
              (dolist (frame stacktrace)
                (cider-stacktrace-render-frame buffer frame)
                (insert "\n"))
              (overlay-put (make-overlay beg (point)) 'font-lock-face bg)))
          ;; Add line break between causes, even when collapsed.
          (cider-propertize-region '(detail 0)
            (insert "\n")))))))