[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/inspector b63e68fb50 08/39: tree-inspector: lazy childr
From: |
ELPA Syncer |
Subject: |
[elpa] externals/inspector b63e68fb50 08/39: tree-inspector: lazy children |
Date: |
Sat, 10 Sep 2022 17:57:47 -0400 (EDT) |
branch: externals/inspector
commit b63e68fb501fb4790a5183998741d64552829a09
Author: Mariano Montone <marianomontone@gmail.com>
Commit: Mariano Montone <marianomontone@gmail.com>
tree-inspector: lazy children
---
tree-inspector.el | 156 ++++++++++++++++++++++++++++++++++++++----------------
1 file changed, 109 insertions(+), 47 deletions(-)
diff --git a/tree-inspector.el b/tree-inspector.el
index 16abd3c69b..0cc3350412 100644
--- a/tree-inspector.el
+++ b/tree-inspector.el
@@ -46,6 +46,54 @@
(prin1-to-string object)
30 nil nil "..."))
+(defun tree-inspector--set-node-children (node children)
+ (mapc (lambda (child)
+ (treeview-set-node-parent child node))
+ children)
+ (treeview-set-node-children node children))
+
+(defun tree-inspector--update-node-children (node)
+ (let ((object (treeview-get-node-prop node 'object)))
+ (when object
+ (let ((children (tree-inspector--node-children object)))
+ (when children
+ (tree-inspector--set-node-children node children))))))
+
+(cl-defgeneric tree-inspector--node-children (node))
+
+(cl-defmethod tree-inspector--node-children ((object cons))
+ (cond
+ ;; alists
+ ((and tree-inspector-use-specialized-inspectors-for-lists
+ (tree-inspector--alistp object))
+ (mapcar (lambda (cons)
+ (let ((child (treeview-new-node)))
+ (treeview-set-node-name
+ child (format "(%s . %s)"
+ (tree-inspector--print-object (car cons))
+ (tree-inspector--print-object (cdr cons))))
+ (tree-inspector--set-node-children
+ child (list (tree-inspector--make-node (car cons))
+ (tree-inspector--make-node (cdr cons))))
+ child))
+ object))
+ ;; proper lists
+ ((tree-inspector--proper-list-p object)
+ (mapcar (lambda (item)
+ (let ((child (tree-inspector--make-node item)))
+ ;;(treeview-set-node-parent child object)
+ child))
+ object))
+ (t (error "Implement children for: %s" object))))
+
+(cl-defmethod tree-inspector--node-children ((object vector))
+ (cl-map 'list
+ (lambda (item)
+ (let ((child (tree-inspector--make-node item)))
+ (treeview-set-node-parent child node)
+ child))
+ object))
+
(cl-defgeneric tree-inspector--make-node (object)
(:documentation "Create treeview node for Emacs Lisp OBJECT."))
@@ -88,31 +136,33 @@
(treeview-set-node-name
node
(tree-inspector--print-object object))
- (treeview-set-node-children
- node
- (mapcar (lambda (cons)
- (let ((child (treeview-new-node)))
- (treeview-set-node-name
- child (format "(%s . %s)"
- (tree-inspector--print-object (car cons))
- (tree-inspector--print-object (cdr cons))))
- (treeview-set-node-children
- child (list (tree-inspector--make-node (car cons))
- (tree-inspector--make-node (cdr cons))))
- child))
- object))
+ (treeview-set-node-prop node 'object object)
+ ;; (treeview-set-node-children
+ ;; node
+ ;; (mapcar (lambda (cons)
+ ;; (let ((child (treeview-new-node)))
+ ;; (treeview-set-node-name
+ ;; child (format "(%s . %s)"
+ ;; (tree-inspector--print-object (car cons))
+ ;; (tree-inspector--print-object (cdr
cons))))
+ ;; (treeview-set-node-children
+ ;; child (list (tree-inspector--make-node (car cons))
+ ;; (tree-inspector--make-node (cdr cons))))
+ ;; child))
+ ;; object))
node))
;; proper lists
((tree-inspector--proper-list-p object)
(let ((node (treeview-new-node)))
(treeview-set-node-name
node (tree-inspector--print-object object))
- (treeview-set-node-children
- node (mapcar (lambda (item)
- (let ((child (tree-inspector--make-node item)))
- (treeview-set-node-parent child node)
- child))
- object))
+ (treeview-set-node-prop node 'object object)
+ ;; (treeview-set-node-children
+ ;; node (mapcar (lambda (item)
+ ;; (let ((child (tree-inspector--make-node item)))
+ ;; (treeview-set-node-parent child node)
+ ;; child))
+ ;; object))
node))
(t (error "Implement inspector for: %s" object))))
@@ -120,14 +170,15 @@
(let ((node (treeview-new-node)))
(treeview-set-node-name
node (tree-inspector--print-object object))
- (treeview-set-node-children
- node
- (cl-map 'list
- (lambda (item)
- (let ((child (tree-inspector--make-node item)))
- (treeview-set-node-parent child node)
- child))
- object))
+ (treeview-set-node-prop node 'object object)
+ ;; (treeview-set-node-children
+ ;; node
+ ;; (cl-map 'list
+ ;; (lambda (item)
+ ;; (let ((child (tree-inspector--make-node item)))
+ ;; (treeview-set-node-parent child node)
+ ;; child))
+ ;; object))
node))
(cl-defmethod tree-inspector--make-node ((object hash-table))
@@ -139,12 +190,11 @@
(let ((child (treeview-new-node))
(value (gethash key object)))
(treeview-set-node-name child (format "%s=%s" key value))
- (treeview-set-node-children child
- (list
- (tree-inspector--make-node key)
- (tree-inspector--make-node value)))
+ (tree-inspector--set-node-children
+ child (list (tree-inspector--make-node key)
+ (tree-inspector--make-node value)))
(push child children)))
- (treeview-set-node-children node children)
+ (tree-inspector--set-node-children node children)
node)))
(defun tree-inspector--get-indent (node)
@@ -152,10 +202,12 @@
(let ((indent ())
(parent nil))
(while (setq parent (treeview-get-node-parent node))
- (setq indent (cons (if (treeview-last-child-p parent)
- dir-treeview-indent-last-unit
- dir-treeview-indent-unit)
- indent)
+ (setq indent (cons
+ ;;(if (treeview-last-child-p parent)
+ ;; dir-treeview-indent-last-unit
+ ;; dir-treeview-indent-unit)
+ tree-inspector-indent-unit
+ indent)
node parent))
indent))
@@ -218,22 +270,26 @@ in a format understood by `kbd'. Commands a names of
Lisp functions."
:type 'string)
(defun tree-inspector-inspect (data)
- (let ((buffer (get-buffer-create (format "*tree-inspector: %s*" data))))
+ (let ((buffer (get-buffer-create (format "*tree-inspector: %s*"
+ (tree-inspector--print-object
data)))))
(with-current-buffer buffer
;; (setq-local treeview-get-root-node-function
;; (lambda () (tree-inspector--make-node data)))
(setq-local treeview-get-indent-function
(lambda (node) (list " ")))
- (setq-local treeview-get-label-function #'first)
+ (setq-local treeview-get-label-function #'cl-first)
(setq-local treeview-get-indent-function #'tree-inspector--get-indent)
(setq-local treeview-get-control-function
(lambda (node)
- (when (treeview-get-node-children node)
- (if (treeview-node-folded-p node)
- tree-inspector-folded-node-control
- tree-inspector-expanded-node-control))))
+ (let ((object (treeview-get-node-prop node 'object)))
+ (when (or (treeview-get-node-children node)
+ (and object (cl-some (lambda (type) (cl-typep
object type))
+ '(vector cons
hash-table))))
+ (if (treeview-node-folded-p node)
+ tree-inspector-folded-node-control
+ tree-inspector-expanded-node-control)))))
(setq-local treeview-update-node-children-function
- (cl-constantly nil))
+ #'tree-inspector--update-node-children)
(setq-local treeview-after-node-expanded-function
(cl-constantly nil))
(setq-local treeview-after-node-folded-function
@@ -252,8 +308,14 @@ in a format understood by `kbd'. Commands a names of Lisp
functions."
;; (tree-inspector-inspect 2)
;; (tree-inspector-inspect (list 1 2 3))
;; (tree-inspector-inspect (list 1 2 3 (list "lala" "sf")))
-;; (tree-inspector-inspect (let ((tab (make-hash-table)))
-;; (puthash 'a 22 tab)
-;; (puthash 'b 44 tab)
-;; tab))
+(tree-inspector-inspect (let ((tab (make-hash-table)))
+ (puthash 'a 22 tab)
+ (puthash 'b 44 tab)
+ tab))
;; (tree-inspector-inspect '((a . 22) (b . "lala")))
+;; (tree-inspector-inspect [1 2 3 4 5 6 6 7 7 7 8 8 8 8 9 9])
+
+;; (request
"https://www.govtrack.us/api/v2/role?current=true&role_type=senator"
+;; :success
+;; (lambda (&rest args)
+;; (tree-inspector-inspect (json-read-from-string (getf args :data)))))
- [elpa] externals/inspector 35fa3fc224 26/39: Housekeeping, (continued)
- [elpa] externals/inspector 35fa3fc224 26/39: Housekeeping, ELPA Syncer, 2022/09/10
- [elpa] externals/inspector 4744b6ef92 28/39: tree-inspector: Use inspector to inspect objects at event and at point., ELPA Syncer, 2022/09/10
- [elpa] externals/inspector b95e058a72 31/39: tree-inspector: docstrings, ELPA Syncer, 2022/09/10
- [elpa] externals/inspector 15da8e2052 32/39: tree-inspector: refactoring, ELPA Syncer, 2022/09/10
- [elpa] externals/inspector cc661085b1 34/39: Adjustments, ELPA Syncer, 2022/09/10
- [elpa] externals/inspector bc762c9359 38/39: tree-inspector: usage, ELPA Syncer, 2022/09/10
- [elpa] externals/inspector f71647ba51 37/39: Long description formatting, ELPA Syncer, 2022/09/10
- [elpa] externals/inspector 744b5e674d 33/39: tree-inspector: fix, ELPA Syncer, 2022/09/10
- [elpa] externals/inspector 54c5b61f2c 35/39: tree-inspector: package requires, ELPA Syncer, 2022/09/10
- [elpa] externals/inspector 0b213e931c 39/39: tree-inspector: adjustments, ELPA Syncer, 2022/09/10
- [elpa] externals/inspector b63e68fb50 08/39: tree-inspector: lazy children,
ELPA Syncer <=
- [elpa] externals/inspector 09e5b1ce83 17/39: tests, ELPA Syncer, 2022/09/10
- [elpa] externals/inspector 2c77eeb416 18/39: tree-inspector: plists, ELPA Syncer, 2022/09/10
- [elpa] externals/inspector 2b7721c678 25/39: tree-inspector: clos objects and structures inspectors, ELPA Syncer, 2022/09/10
- [elpa] externals/inspector e0905a94d3 29/39: tree-inspector: housekeeping, ELPA Syncer, 2022/09/10