@@ -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