Function: clojure--unused-pattern-edits
clojure--unused-pattern-edits is a byte-compiled function defined in
clojure-mode.el.
Signature
(clojure--unused-pattern-edits PATTERN USED-P)
Documentation
Return how to remove what PATTERN binds from maps but doesn't use.
USED-P tells if a name is used. The value is a list of (remove COLL
FORM...) and (replace FORM TEXT) edits, or empty for a map with
nothing left, which it's for the caller to replace or remove. Comments
and discarded forms count as something left, but an empty :keys and an
:or with nothing but defaults don't, as they bind nothing.
Source Code
;; Defined in ~/.emacs.d/elpa/clojure-mode-20261103.1226/clojure-mode.el
(defun clojure--unused-pattern-edits (pattern used-p)
"Return how to remove what PATTERN binds from maps but doesn't use.
USED-P tells if a name is used. The value is a list of (remove COLL
FORM...) and (replace FORM TEXT) edits, or `empty' for a map with
nothing left, which it's for the caller to replace or remove. Comments
and discarded forms count as something left, but an empty :keys and an
:or with nothing but defaults don't, as they bind nothing."
(pcase pattern
(`(vec ,_ . ,subs)
(mapcan (lambda (sub)
(let ((edits (clojure--unused-pattern-edits sub used-p)))
(if (eq edits 'empty) `((replace ,(cadr sub) "_")) edits)))
subs))
(`(map ,map . ,units)
(let ((droppable 0) removed edits)
(dolist (unit units)
(pcase unit
(`(keys ,key ,vec ,elems)
(let ((unused (seq-filter (lambda (elem)
(and (car elem) (not (funcall used-p (car elem)))))
elems))
(children (clojure--form-children vec)))
(cond
((null children) (setq droppable (+ droppable 2)))
((null unused))
((= (length unused) (length children))
(setq removed `(,key ,vec ,@removed)))
(t (push `(remove ,vec ,@(mapcar #'cdr unused)) edits)))))
((or `(as ,key ,val ,name) `(pair ,key ,val ,name))
(unless (funcall used-p name)
(setq removed `(,key ,val ,@removed))))
(`(nested ,key ,val ,sub)
(let ((sub-edits (clojure--unused-pattern-edits sub used-p)))
(if (eq sub-edits 'empty)
(setq removed `(,key ,val ,@removed))
(setq edits (append sub-edits edits)))))
;; The :or defaults of the names removed go with them.
(`(or ,key ,val ,entries)
(let ((unused (seq-remove (lambda (entry) (funcall used-p (car entry)))
entries))
(children (clojure--form-children val)))
(if (and unused (= (length children) (* 2 (length unused))))
(setq removed `(,key ,val ,@removed))
(when unused
(push `(remove ,val ,@(seq-mapcat #'cdr unused)) edits))
(when (= (length children) (length (clojure--form-values val)))
(setq droppable (+ droppable 2))))))))
(cond
((and removed
(= (length (clojure--form-children map)) (+ (length removed) droppable)))
'empty)
(removed (cons `(remove ,map ,@removed) edits))
(t edits))))))