552552 (setq-local header-line-format
553553 (unless lsp-treemacs--symbols
554554 (propertize " No symbol information." 'face 'shadow )))
555- (lsp-treemacs--show-references
555+ (lsp-treemacs-render
556556 (lsp-treemacs--symbols->tree
557557 lsp-treemacs--symbols
558558 nil )
918918 (funcall-interactively action)
919919 (treemacs-pulse-on-failure " No ret action defined." )))
920920
921- (defmacro lsp-treeemacs -wcb-unless-killed (buffer &rest body )
921+ (defmacro lsp-treemacs -wcb-unless-killed (buffer &rest body )
922922 " `with-current-buffer' unless buffer killed."
923923 (declare (indent 1 ) (debug t ))
924924 `(when (buffer-live-p (get-buffer , buffer ))
925925 (with-current-buffer , buffer
926926 ,@body )))
927927
928+ (defvar lsp-treemacs-use-cache nil )
929+ (defvar-local lsp-treemacs--generic-cache nil )
930+
931+ (defun lsp-treemacs--node-key (node )
932+ (let ((result (list (treemacs-button-get node :key )))
933+ (parent node))
934+ (while (setq parent (treemacs-button-get parent :parent ))
935+ (setq result (cons (treemacs-button-get parent :key ) result)))
936+ result))
937+
928938(treemacs-define-expandable-node node
929939 :icon-open-form (lsp-treemacs--generic-icon (treemacs-button-get node :item ) t )
930940 :icon-closed-form (lsp-treemacs--generic-icon (treemacs-button-get node :item ) nil )
931- :query-function (-let [(item &as &plist :children :children-async :key ) (treemacs-button-get node :item )]
941+ :query-function (-let (((item &as &plist :children :children-async :key :variables-reference ) (treemacs-button-get node :item ))
942+ (node-key (lsp-treemacs--node-key node)))
932943 (cond
933944 ((functionp children) (funcall children item))
934- ((get-text-property 0 :done? key) (get-text-property 0 :async-result key))
935- (children-async (-let [buffer (current-buffer )]
936- (funcall children-async
937- item
938- (lambda (result )
939- (put-text-property 0 1 :done? t key)
940- (put-text-property 0 1 :async-result result key)
941- (lsp-treeemacs-wcb-unless-killed buffer
942- (lsp-treemacs-generic-refresh)))))
943- `((:label ,(propertize " Loading..." 'face 'shadow )
944- :icon-literal " "
945- :key " Loading..." )))
945+ ((and (gethash node-key lsp-treemacs--generic-cache)
946+ lsp-treemacs-use-cache)
947+ (cl-rest (gethash node-key lsp-treemacs--generic-cache)))
948+ (children-async
949+ (-let [buffer (current-buffer )]
950+ (funcall children-async
951+ item
952+ (lambda (result )
953+ (lsp-treemacs-wcb-unless-killed buffer
954+ (puthash node-key (cons t result) lsp-treemacs--generic-cache)
955+ (let ((lsp-treemacs-use-cache t ))
956+ (lsp-treemacs-generic-refresh))))))
957+ (or (cl-rest (gethash node-key lsp-treemacs--generic-cache))
958+ `((:label ,(propertize " Loading..." 'face 'shadow )
959+ :icon-literal " "
960+ :key " Loading..." ))))
946961 (t children)))
947962 :ret-action #'lsp-treemacs-perform-ret-action
948963 :render-action
11321147 (interactive )
11331148 (lsp-treemacs--open-file-in-mru path)))))))
11341149
1135- (defun lsp-treemacs--show-references (tree title expand? &optional buffer-name )
1150+ (defun lsp-treemacs-render (tree title expand? &optional buffer-name )
11361151 (let ((search-buffer (get-buffer-create (or buffer-name " *LSP Lookup*" ))))
11371152 (with-current-buffer search-buffer
11381153 (lsp-treemacs-initialize)
1139- (lsp-treemacs--set-mode-line-format search-buffer title)
1154+ (setq-local treemacs-default-visit-action 'treemacs-RET-action )
1155+ (setq-local lsp-treemacs--generic-cache (or lsp-treemacs--generic-cache (ht)))
11401156 (setq-local lsp-treemacs-tree tree)
11411157 (setq-local face-remapping-alist '((button . default )))
1158+ (lsp-treemacs--set-mode-line-format search-buffer title)
11421159 (lsp-treemacs-generic-refresh)
11431160 (when expand? (lsp-treemacs--expand 'LSP-Generic ))
11441161 (current-buffer ))))
11451162
1163+ (defalias 'lsp-treemacs--show-references 'lsp-treemacs-render )
1164+
11461165(defun lsp-treemacs--set-mode-line-format (buffer title )
11471166 " Set the mode line format of BUFFER to TITLE.
11481167This function sets the `mode-name' or `mode-line-format'
@@ -1168,12 +1187,12 @@ depending on if a custom mode line is detected."
11681187 (lsp-treemacs--set-mode-line-format search-buffer " Rendering results... " )
11691188 (lsp-with-cached-filetrue-name
11701189 (let ((lsp-file-truename-cache (ht)))
1171- (lsp-treemacs--show-references (lsp-treemacs--handle-references refs)
1190+ (lsp-treemacs-render (lsp-treemacs--handle-references refs)
11721191 (format title (length refs))
11731192 expand?) ))
11741193 (lsp--info " Refresh completed!" ))
11751194 :mode 'detached
1176- :cancel-token :treemacs-lookup )
1195+ :cancel-token :treemacs-lookup )
11771196
11781197 (with-current-buffer search-buffer
11791198 (lsp-treemacs-initialize)
@@ -1242,7 +1261,7 @@ With a prefix argument, show the outgoing call hierarchy."
12421261 (let ((buffer (current-buffer )))
12431262 (select-window
12441263 (display-buffer-in-side-window
1245- (lsp-treemacs--show-references
1264+ (lsp-treemacs-render
12461265 (seq-map
12471266 (-lambda ((item &as &hash " name" " kind" " detail" ))
12481267 (list :label (concat name (when detail
0 commit comments