Function: clojure-match-next-def
clojure-match-next-def is a byte-compiled function defined in
clojure-mode.el.
Signature
(clojure-match-next-def)
Documentation
Scans the buffer backwards for the next "top-level" definition.
Called by imenu--generic-function.
Source Code
;; Defined in ~/.emacs.d/elpa/clojure-mode-20260325.811/clojure-mode.el
;;; General font-locking
(defun clojure-match-next-def ()
"Scans the buffer backwards for the next \"top-level\" definition.
Called by `imenu--generic-function'."
;; we have to take into account namespace-definition forms
;; e.g. s/defn
(when (re-search-backward "^[ \t]*(\\([a-z0-9.-]+/\\)?\\(def\\sw*\\)" nil t)
(save-excursion
(let (found?
(deftype (match-string 2))
(start (point)))
(unless (ppss-comment-or-string-start (syntax-ppss))
(down-list))
(forward-sexp)
(while (not found?)
(ignore-errors
(forward-sexp))
(or (when (char-equal ?\[ (char-after (point)))
(backward-sexp))
(when (char-equal ?\) (char-after (point)))
(backward-sexp)))
(cl-destructuring-bind (def-beg . def-end) (bounds-of-thing-at-point 'sexp)
(when (char-equal ?^ (char-after def-beg))
;; move to the beginning of next sexp
(progn (forward-sexp) (backward-sexp)))
(when (or (not (char-equal ?^ (char-after def-beg)))
(and (char-equal ?^ (char-after (point))) (= def-beg (point))))
(setq found? t)
(when (string= deftype "defmethod")
(setq def-end (progn (goto-char def-end)
(forward-sexp)
(point))))
(set-match-data (list def-beg def-end)))))
(goto-char start)))))