Dmitry Gutov writes: > Hi Damien, thanks for the report. > > On 20/10/2023 14:48, Damien Cassou wrote: >> the documentation of `project-remember-projects-under' is: >> "Index all projects below a directory DIR. If RECURSIVE is >> non-nil, recurse into all subdirectories to find more projects. >> After finishing, a message is printed summarizing the progress. The >> function returns the number of detected projects." >> Regardless of the value of RECURSIVE, I understand from the above >> that >> all child directories of the DIR argument will be investigated. The doc >> doesn't say anything about investigating if DIR is itself a project or >> not so I think it would make sense if the function wasn't. >> But the code says otherwise (as far as I understand it): >> (defun project-remember-projects-under (dir &optional recursive) >> (let ((queue (list dir))) >> ;; … >> (while queue >> (when-let ((subdir (pop queue)) >> ((file-directory-p subdir))) >> ;; maybe register `subdir' as a project >> ;; … >> (when (and recursive (file-directory-p subdir)) >> (setq queue (nconc (directory-files subdir …) queue))))))) >> The code above seems to investigate DIR first and, if RECURSIVE is >> non-nil, look at the directories below it. >> Also, the second check (file-directory-p subdir) seems unnecessary >> because of the first one. >> There is a part of the code I don't understand: >> (unless (eq recursive 'in-progress) >> It seems nowhere in the code nor in the documentation do we say >> anything >> about this 'in-progress special value. Is it a left over from a previous >> (recursive) version of the algorithm? > > Philip, could you look into this? One idea would be to just simplify the entire implementation by relying on directory-files and directory-files-recursively. Say something like this: