Function: eglot-imenu
eglot-imenu is a byte-compiled function defined in eglot.el.gz.
Signature
(eglot-imenu)
Documentation
Eglot's imenu-create-index-function.
Returns a list as described in docstring of imenu--index-alist.
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/eglot.el.gz
(defun eglot-imenu ()
"Eglot's `imenu-create-index-function'.
Returns a list as described in docstring of `imenu--index-alist'."
(cl-labels
((unfurl (obj)
(eglot--dcase obj
(((SymbolInformation)) (list obj))
(((DocumentSymbol) name children)
(cons obj
(mapcar
(lambda (c)
(plist-put
c :containerName
(let ((existing (plist-get c :containerName)))
(if existing (format "%s::%s" name existing)
name))))
(mapcan #'unfurl children)))))))
(mapcar
(pcase-lambda (`(,kind . ,objs))
(cons
(alist-get kind eglot--symbol-kind-names "Unknown")
(mapcan (pcase-lambda (`(,container . ,objs))
(let ((elems (mapcar
(lambda (obj)
(cons (plist-get obj :name)
(car (eglot--range-region
(eglot--dcase obj
(((SymbolInformation) location)
(plist-get location :range))
(((DocumentSymbol) selectionRange)
selectionRange))))))
objs)))
(if container (list (cons container elems)) elems)))
(seq-group-by
(lambda (e) (plist-get e :containerName)) objs))))
(seq-group-by
(lambda (obj) (plist-get obj :kind))
(mapcan #'unfurl
(jsonrpc-request (eglot--current-server-or-lose)
:textDocument/documentSymbol
`(:textDocument
,(eglot--TextDocumentIdentifier))
:cancel-on-input non-essential))))))