Function: clojure--add-arity-internal

clojure--add-arity-internal is a byte-compiled function defined in clojure-mode.el.

Signature

(clojure--add-arity-internal)

Documentation

Add an arity to a function.

Assumes cursor is at beginning of function.

Source Code

;; Defined in ~/.emacs.d/elpa/clojure-mode-20260325.811/clojure-mode.el
(defun clojure--add-arity-internal ()
  "Add an arity to a function.

Assumes cursor is at beginning of function."
  (let ((beg-line (line-number-at-pos))
        (end (save-excursion (forward-sexp)
                             (point))))
    (down-list 2)
    (when (looking-back "{" 1) ;; skip metadata if present
      (up-list)
      (down-list))
    (cond
     ((looking-back "(" 1) ;; multi-arity fn
      (insert "[")
      (save-excursion (insert "])\n(")))
     ((looking-back "\\[" 1)  ;; single-arity fn
      (let* ((same-line (= beg-line (line-number-at-pos)))
             (bracket-pos (1- (point)))
             (meta-start (clojure--find-arglist-metadata-start bracket-pos)))
        (save-excursion
          (goto-char end)
          (insert ")"))
        (if (< meta-start bracket-pos)
            ;; Has metadata before arglist — move it inside the arity
            ;; wrapper so it stays associated with the original arglist.
            ;; E.g. (defn foo ^String [x] ...) becomes:
            ;;   (defn foo ([]) (^String [x] ...))
            (let ((meta-text (replace-regexp-in-string
                              "[ \t\n\r]+" " "
                              (string-trim
                               (buffer-substring meta-start bracket-pos)))))
              (goto-char meta-start)
              (skip-chars-backward " \t\n")
              (delete-region (point) (1+ bracket-pos))
              (insert "\n([")
              (save-excursion
                (insert "])\n(" meta-text " [")))
          ;; No metadata — original behavior
          (let ((new-arity-text (concat (when same-line "\n") "([")))
            (re-search-backward " +\\[")
            (replace-match new-arity-text)
            (save-excursion (insert "])\n([")))))))))