Function: cider-ns-edit--merge-libspec

cider-ns-edit--merge-libspec is a byte-compiled function defined in cider-ns.el.

Signature

(cider-ns-edit--merge-libspec POS ALIAS REFER)

Documentation

Give the libspec at POS the ALIAS and REFER it lacks.

Return non-nil if that changed it. Signal an error when the libspec has another alias, since a libspec can't have two.

Source Code

;; Defined in ~/.emacs.d/elpa/cider-20261106.1225/cider-ns.el
(defun cider-ns-edit--merge-libspec (pos alias refer)
  "Give the libspec at POS the ALIAS and REFER it lacks.
Return non-nil if that changed it.  Signal an error when the libspec has
another alias, since a libspec can't have two."
  (if (not (cider-ns-edit--seq-p pos))
      ;; a bare namespace name
      (when (or alias refer)
        (let ((ns (cider-ns-edit--text pos)))
          (delete-region pos (scan-sexps pos 1))
          (goto-char pos)
          (insert (cider-ns-edit--libspec ns alias refer))
          t))
    (let* ((as (cider-ns-edit--libspec-option pos ":as"))
           (referred (cider-ns-edit--libspec-option pos ":refer"))
           (add-as (and alias (not as)))
           (add-refer (and refer
                           (cond
                            ((null referred) t)
                            ((cider-ns-edit--seq-p referred)
                             (not (member refer (cider-ns-edit--referred pos))))))))
      (when (and alias as (not (equal alias (cider-ns-edit--text as))))
        (user-error "%s is already required as %s"
                    (cider-ns-edit--libspec-ns pos) (cider-ns-edit--text as)))
      (when (or add-as add-refer)
        ;; Back to front, so that the positions in front stay valid.
        (when add-refer
          (if-let* ((last-referred (car (last (and referred
                                                   (cider-ns-edit--elements referred))))))
              (progn
                (goto-char (scan-sexps last-referred 1))
                (insert " " refer))
            (if referred
                (progn
                  (goto-char (1+ referred))
                  (delete-region (point) (progn (skip-chars-forward " \t,") (point)))
                  (insert refer))
              (goto-char (scan-sexps (car (last (cider-ns-edit--elements pos))) 1))
              (insert " :refer [" refer "]"))))
        (when add-as
          (goto-char (scan-sexps (car (cider-ns-edit--elements pos)) 1))
          (insert " :as " alias))
        t))))