Skip to content

Commit b61628b

Browse files
committed
fix: preserve diagnostics across perspective switches
1 parent 2495abd commit b61628b

File tree

1 file changed

+27
-7
lines changed

1 file changed

+27
-7
lines changed

lsp-treemacs.el

+27-7
Original file line numberDiff line numberDiff line change
@@ -557,13 +557,33 @@ will be rendered an empty line between them."
557557
(lsp-workspace-folders-add (treemacs-project->path project)))
558558

559559
(defun lsp-treemacs--treemacs->lsp ()
560-
(let ((lsp-folders (lsp-session-folders (lsp-session)))
561-
(treemacs-folders (->> (treemacs-current-workspace)
562-
(treemacs-workspace->projects)
563-
(-map #'treemacs-project->path)
564-
(-map #'lsp-canonical-file-name))))
565-
(seq-do #'lsp-workspace-folders-remove (-difference lsp-folders treemacs-folders))
566-
(seq-do #'lsp-workspace-folders-add (-difference treemacs-folders lsp-folders))))
560+
"Synchronize treemacs projects with lsp workspace folders
561+
but maintain diagnostics across perspective switches."
562+
(let* ((lsp-folders (lsp-session-folders (lsp-session)))
563+
(treemacs-folders (->> (treemacs-current-workspace)
564+
(treemacs-workspace->projects)
565+
(-map #'treemacs-project->path)
566+
(-map #'lsp-canonical-file-name)))
567+
(to-remove (-difference lsp-folders treemacs-folders))
568+
(to-add (-difference treemacs-folders lsp-folders)))
569+
570+
;; Modify folders without shutting down workspaces
571+
(cl-flet ((lsp-workspace-folders-remove (folder)
572+
(let ((session (lsp-session)))
573+
(setf (lsp-session-folders session)
574+
(-remove-item folder (lsp-session-folders session)))
575+
(lsp--persist-session session)
576+
(run-hook-with-args 'lsp-workspace-folders-changed-functions
577+
nil (list folder)))))
578+
;; Remove folders not in current treemacs workspace
579+
(seq-do #'lsp-workspace-folders-remove to-remove))
580+
581+
;; Add folders from current treemacs workspace
582+
(seq-do #'lsp-workspace-folders-add to-add)
583+
584+
;; Refresh errors list to show only current workspace errors
585+
(when (get-buffer lsp-treemacs-errors-buffer-name)
586+
(lsp-treemacs-errors-list--refresh))))
567587

568588
(defun lsp-treemacs--sync-folders (added removed)
569589
(when-let (treemacs-workspace (treemacs-current-workspace))

0 commit comments

Comments
 (0)