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

Reply via email to