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