Hi,
The patch is supposed to reset `treesit--explorer-last-node` in the source buffer, just before the `(with-current-buffer treesit--explorer-buffer ...)`.
Upon trying to reproduce it now, I realized it's harder to reproduce than I had thought -- sorry about that.
I noticed the bug (if it is a bug) initially when I was adding a function to jump b/w source and explorer buffers, like the following:
(defun my-treesit-explorer-jump ()
"Pop b/w source and explorer buffers."
(interactive)
(let ((buf
(cond
((eq major-mode 'treesit--explorer-tree-mode)
(when (buffer-live-p treesit--explorer-source-buffer)
treesit--explorer-source-buffer))
(t
(unless (and treesit-explore-mode
(buffer-live-p treesit--explorer-buffer))
;; *** Without the reset here, the explorer buffer doesn't
;; get redrawn the first time, when treesit--explorer-last-node
;; is non-nil in the source buffer ***
;; (setq-local treesit--explorer-last-node nil)
(cl-letf (((symbol-function (function completing-read))
(lambda (&rest _) (symbol-name (treesit-language-at (point))))))
(treesit-explore-mode 1)))
treesit--explorer-buffer))))
(pop-to-buffer buf)))
Let me give a more precise recipe to reproduce:
1. From a c++-ts-mode buffer, call `treesit-explorer-mode`, select `cpp`. Now there should be an explorer buffer.
2. Kill the associated explorer buffer.
3. Now, back in the c++-ts-mode buffer, `treesit--explorer-last-node` should still have a value.
4. From that c++-ts-mode buffer, call `my-treesit-explorer-jump`, and the explorer buffer should be empty, until
switching back to the source buffer.
This seems to me to be caused by `treesit--explorer-post-command` not running until the source
buffer is active again.