109109 " Severity level for `lsp-treemacs-error-list-mode' . 1 (highest) to 3 (lowest)"
110110 :type 'number )
111111
112+ (defcustom lsp-treemacs-error-list-current-project-only t
113+ " List the error list of the current project only if available.
114+ Fallback to list all workspaces if no project root is found."
115+ :type 'boolean
116+ :group 'lsp-treemacs )
117+
112118(defun lsp-treemacs--open-file-in-mru (file )
113119 (select-window (get-mru-window (selected-frame ) nil :not-selected ))
114120 (find-file file))
@@ -1202,35 +1208,48 @@ With prefix 2 show both."
12021208 count)))
12031209 (seq-some #'identity )))
12041210
1211+ (defun lsp-treemacs--build-error-list (folders )
1212+ (-keep
1213+ (lambda (folder )
1214+ (when-let ((diags (append (lsp-diagnostics-stats-for folder) ())))
1215+ (when (lsp-treemacs-errors--diags? diags)
1216+ (list :label (format
1217+ (propertize " %s %s %s" 'face 'default )
1218+ (f-filename folder)
1219+ (->> diags
1220+ (-map-indexed
1221+ (lambda (index count )
1222+ (when (and (not (zerop count))
1223+ (<= index lsp-treemacs-error-list-severity))
1224+ (propertize
1225+ (number-to-string count)
1226+ 'face (alist-get index lsp-treemacs-file-face-map)))))
1227+ (-filter #'identity )
1228+ (s-join " /" ))
1229+ (propertize (f-dirname folder)
1230+ 'face 'lsp-lens-face ))
1231+ :id folder
1232+ :icon 'root
1233+ :children (-partial #'lsp-treemacs-errors--list-files folder)
1234+ :ret-action (lambda (&rest _ )
1235+ (interactive )
1236+ (lsp-treemacs--open-file-in-mru folder))))))
1237+ folders))
1238+
1239+
1240+ (defvar lsp-treemacs--current-project-root nil )
1241+
12051242(defun lsp-treemacs-errors-list--refresh ()
12061243 (lsp-treemacs-render
1207- (->> (lsp-session)
1208- (lsp-session-folders)
1209- (-keep
1210- (lambda (folder )
1211- (when-let ((diags (append (lsp-diagnostics-stats-for folder) ())))
1212- (when (lsp-treemacs-errors--diags? diags)
1213- (list :label (format
1214- (propertize " %s %s %s" 'face 'default )
1215- (f-filename folder)
1216- (->> diags
1217- (-map-indexed
1218- (lambda (index count )
1219- (when (and (not (zerop count))
1220- (<= index lsp-treemacs-error-list-severity))
1221- (propertize
1222- (number-to-string count)
1223- 'face (alist-get index lsp-treemacs-file-face-map)))))
1224- (-filter #'identity )
1225- (s-join " /" ))
1226- (propertize (f-dirname folder)
1227- 'face 'lsp-lens-face ))
1228- :id folder
1229- :icon 'root
1230- :children (-partial #'lsp-treemacs-errors--list-files folder)
1231- :ret-action (lambda (&rest _ )
1232- (interactive )
1233- (lsp-treemacs--open-file-in-mru folder))))))))
1244+ (if (and lsp-treemacs--current-project-root
1245+ lsp-treemacs-error-list-current-project-only)
1246+ (->> (lsp-session)
1247+ (lsp-session-folders)
1248+ (--filter (f-equal-p lsp-treemacs--current-project-root it))
1249+ (lsp-treemacs--build-error-list))
1250+ (->> (lsp-session)
1251+ (lsp-session-folders)
1252+ (lsp-treemacs--build-error-list)))
12341253 " Errors List"
12351254 nil
12361255 lsp-treemacs-errors-buffer-name
@@ -1239,6 +1258,9 @@ With prefix 2 show both."
12391258;;;### autoload
12401259(defun lsp-treemacs-errors-list ()
12411260 (interactive )
1261+ (setq lsp-treemacs--current-project-root (-some-> (lsp-workspaces)
1262+ cl-first
1263+ (lsp--workspace-root)))
12421264 (-if-let (buffer (get-buffer lsp-treemacs-errors-buffer-name))
12431265 (progn
12441266 (select-window (display-buffer-in-side-window buffer '((side . bottom))))
0 commit comments