aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBozhidar Batsov <bozhidar@batsov.dev>2026-02-28 10:08:48 +0200
committerBozhidar Batsov <bozhidar@batsov.dev>2026-02-28 10:22:31 +0200
commitb9840f09bea90933accea9252a16d66b1df9d8d4 (patch)
tree430f4b7b664e9c72c431e098628748cc662d660a
parent1b8a0f809450c8cbb5dcacf9234970983b83b729 (diff)
Use hash set for deleted file removal in projectile-dir-files-alien
The deleted file check used member inside seq-remove, which is O(n*m) where n is total files and m is deleted files. Convert the deleted list to a hash set for O(1) lookups, making the overall operation O(n).
-rw-r--r--projectile.el4
1 files changed, 3 insertions, 1 deletions
diff --git a/projectile.el b/projectile.el
index b1c7c18..a7f7de3 100644
--- a/projectile.el
+++ b/projectile.el
@@ -1579,7 +1579,9 @@ IGNORED-DIRECTORIES may optionally be provided."
(deleted (unless (and projectile-git-use-fd projectile-fd-executable)
(projectile-git-deleted-files directory))))
(if deleted
- (seq-remove (lambda (f) (member f deleted)) files)
+ (let ((deleted-set (make-hash-table :test 'equal :size (length deleted))))
+ (dolist (f deleted) (puthash f t deleted-set))
+ (seq-remove (lambda (f) (gethash f deleted-set)) files))
files)))
(t (projectile-files-via-ext-command directory (projectile-get-ext-command vcs))))))