Function: python--imenu-treesit-create-index-1
python--imenu-treesit-create-index-1 is a byte-compiled function
defined in python.el.gz.
Signature
(python--imenu-treesit-create-index-1 NODE)
Documentation
Given a sparse tree, create an imenu alist.
NODE is the root node of the tree returned by
treesit-induce-sparse-tree (not a tree-sitter node, its car is
a tree-sitter node). Walk that tree and return an imenu alist.
Return a list of ENTRY where
ENTRY := (NAME . MARKER)
| (NAME . ((JUMP-LABEL . MARKER)
ENTRY
...)
NAME is the function/class's name, JUMP-LABEL is like "*function definition*".
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/python.el.gz
(defun python--imenu-treesit-create-index-1 (node)
"Given a sparse tree, create an imenu alist.
NODE is the root node of the tree returned by
`treesit-induce-sparse-tree' (not a tree-sitter node, its car is
a tree-sitter node). Walk that tree and return an imenu alist.
Return a list of ENTRY where
ENTRY := (NAME . MARKER)
| (NAME . ((JUMP-LABEL . MARKER)
ENTRY
...)
NAME is the function/class's name, JUMP-LABEL is like \"*function
definition*\"."
(let* ((ts-node (car node))
(children (cdr node))
(subtrees (mapcan #'python--imenu-treesit-create-index-1
children))
(type (pcase (treesit-node-type ts-node)
("function_definition" 'def)
("class_definition" 'class)))
;; The root of the tree could have a nil ts-node.
(name (when ts-node
(or (treesit-defun-name ts-node)
"Anonymous")))
(marker (when ts-node
(set-marker (make-marker)
(treesit-node-start ts-node)))))
(cond
((null ts-node)
subtrees)
(subtrees
(let ((parent-label
(funcall python-imenu-format-parent-item-label-function
type name))
(jump-label
(funcall
python-imenu-format-parent-item-jump-label-function
type name)))
`((,parent-label
,(cons jump-label marker)
,@subtrees))))
(t (let ((label
(funcall python-imenu-format-item-label-function
type name)))
(list (cons label marker)))))))