branch: elpa/projectile
commit 136a1e6918a4d937e054e3fc06569c989cb013f3
Author: Bozhidar Batsov <[email protected]>
Commit: Bozhidar Batsov <[email protected]>
Fix compilation-find-file advice for dirs without direct files
Fixes #1923
When compilation output references a file via a relative path, the
advice now also checks if the file exists relative to the project root
and adds its parent directory to the search path. This handles the
edge case where a directory only contains subdirectories (no files
directly) and therefore was not included in the file-derived directory
list from projectile-current-project-dirs.
---
projectile.el | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/projectile.el b/projectile.el
index 2dca9ae375..16536a58d8 100644
--- a/projectile.el
+++ b/projectile.el
@@ -5683,16 +5683,25 @@ We enhance its functionality by appending the current
project's directories
to its search path. This way when filenames in compilation buffers can't be
found by compilation's normal logic they are searched for in project
directories."
- ; If the file already exists, don't bother running the extra logic as the
project directories might be massive (i.e. Unreal-sized).
+ ;; If the file already exists, don't bother running the extra logic as the
+ ;; project directories might be massive (i.e. Unreal-sized).
(if (file-exists-p filename)
(apply orig-fun `(,marker ,filename ,directory ,@formats))
(let* ((root (projectile-project-root))
(compilation-search-path
(if (projectile-project-p)
- (append compilation-search-path (list root)
- (mapcar (lambda (f) (expand-file-name f root))
- (projectile-current-project-dirs)))
+ (let ((dirs (append compilation-search-path (list root)
+ (mapcar (lambda (f) (expand-file-name f
root))
+
(projectile-current-project-dirs)))))
+ ;; If the file can be found relative to the project root,
+ ;; add its parent directory to the search path. This
+ ;; handles directories that contain only subdirectories
+ ;; and no files directly.
+ (let ((candidate (expand-file-name filename root)))
+ (when (file-exists-p candidate)
+ (push (file-name-directory candidate) dirs)))
+ dirs)
compilation-search-path)))
(apply orig-fun `(,marker ,filename ,directory ,@formats)))))