Skip to content

Commit 4faf0e3

Browse files
committed
Provide option to force update when doing async calls
1 parent ffc2d76 commit 4faf0e3

File tree

1 file changed

+39
-20
lines changed

1 file changed

+39
-20
lines changed

lsp-treemacs.el

Lines changed: 39 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,7 @@
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)
@@ -918,31 +918,46 @@
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
@@ -1132,17 +1147,21 @@
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.
11481167
This 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

Comments
 (0)