@@ -557,13 +557,33 @@ will be rendered an empty line between them."
557
557
(lsp-workspace-folders-add (treemacs-project->path project)))
558
558
559
559
(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))))
567
587
568
588
(defun lsp-treemacs--sync-folders (added removed )
569
589
(when-let (treemacs-workspace (treemacs-current-workspace))
0 commit comments