branch: elpa/projectile
commit 0484b44ff90e762bbf50894489a4e3c62316caf0
Author: Bozhidar Batsov <[email protected]>
Commit: Bozhidar Batsov <[email protected]>

    Replace cl-lib sequence functions with seq.el equivalents
    
    Migrate cl-remove-if-not → seq-filter, cl-remove-if → seq-remove,
    cl-some → seq-some, cl-every → seq-every-p, cl-find-if → seq-find,
    cl-mapcan → mapcan, cl-union → seq-union, cl-sort → seq-sort,
    cl-case → pcase, and delete projectile-difference in favor of
    seq-difference.  Manual replacements for cl-notany, cl-typep, cl-incf,
    cl-remove, and cl-subst.
    
    cl-lib is still required for cl-defun, cl-defmethod, cl-loop, cl-letf,
    and cl-flet*.
---
 CHANGELOG.md            |   1 +
 projectile.el           | 234 +++++++++++++++++++++++-------------------------
 test/projectile-test.el |   2 +-
 3 files changed, 115 insertions(+), 122 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index ebd73462a4..9beaa59163 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -36,6 +36,7 @@
 
 * **[Breaking]** Bump minimum required Emacs version from 26.1 to 27.1. This 
removes ~30 lines of compatibility code (fileloop fallback, `time-convert` 
fallback, `projectile-flatten` shim) and fixes the `tags-query-replace` FIXME 
in `projectile-replace-regexp`.
 * Add `compat` as a dependency, enabling the use of modern Emacs APIs (e.g. 
`string-replace`) on older Emacs versions.
+* Replace most `cl-lib` sequence functions with `seq.el` equivalents 
(`seq-filter`, `seq-remove`, `seq-some`, `seq-find`, `seq-sort`, `seq-every-p`, 
`seq-difference`, `seq-union`) and convert `cl-case` to `pcase`.
 * [#1958](https://github.com/bbatsov/projectile/issues/1958): Exclude 
`.projectile-cache.eld` from search results (ripgrep/ag/grep) by default.
 * [#1957](https://github.com/bbatsov/projectile/pull/1957): Add `:caller` 
information to calls to `ivy-read` (used by packages like `ivy-rich`).
 * [#1947](https://github.com/bbatsov/projectile/issues/1947): 
`projectile-project-name` should be marked as safe.
diff --git a/projectile.el b/projectile.el
index db6bdbb78b..6c7f66b950 100644
--- a/projectile.el
+++ b/projectile.el
@@ -37,6 +37,7 @@
 
 (require 'cl-lib)
 (require 'compat)
+(require 'seq)
 (require 'thingatpt)
 (require 'ibuffer)
 (require 'ibuf-ext)
@@ -978,14 +979,10 @@ just return nil."
      version)))
 
 ;;; Misc utility functions
-(defun projectile-difference (list1 list2)
-  (cl-remove-if
-   (lambda (x) (member x list2))
-   list1))
 
 (defun projectile-unixy-system-p ()
   "Check to see if unixy text utilities are installed."
-  (cl-every
+  (seq-every-p
    (lambda (x) (executable-find x))
    '("grep" "cut" "uniq")))
 
@@ -1169,7 +1166,7 @@ The cache is created both in memory and on the hard 
drive."
   (let* ((project-root (projectile-project-root))
          (project-cache (gethash project-root projectile-projects-cache)))
     (puthash project-root
-             (cl-remove-if (lambda (str) (string-prefix-p dir str)) 
project-cache)
+             (seq-remove (lambda (str) (string-prefix-p dir str)) 
project-cache)
              projectile-projects-cache)))
 
 (defun projectile-file-cached-p (file project)
@@ -1342,7 +1339,7 @@ Return the first (topmost) matched directory or nil if 
not found."
   (projectile-locate-dominating-file-top-down
    dir
    (lambda (dir)
-     (cl-find-if (lambda (f)
+     (seq-find (lambda (f)
                     (let ((expanded (projectile-expand-file-name-wildcard f 
dir)))
                       (and (projectile-file-exists-p expanded)
                            (not (file-directory-p expanded)))))
@@ -1361,14 +1358,14 @@ Return the first (bottommost) matched directory or nil 
if not found."
    (lambda (directory)
      (let ((files (mapcar (lambda (file) (expand-file-name file directory))
                           (or list projectile-project-root-files-bottom-up))))
-       (cl-some (lambda (file) (and file (file-exists-p file))) files)))))
+       (seq-some (lambda (file) (and file (file-exists-p file))) files)))))
 
 (defun projectile-root-top-down-recurring (dir &optional list)
   "Identify a project root in DIR by recurring top-down search for files in 
LIST.
 If LIST is nil, use `projectile-project-root-files-top-down-recurring'
 instead.  Return the last (bottommost) matched directory in the
 topmost sequence of matched directories.  Nil otherwise."
-  (cl-some
+  (seq-some
    (lambda (f)
      (projectile-locate-dominating-file
       dir
@@ -1388,11 +1385,9 @@ If DIR is not supplied it's set to the current directory 
by default."
                (tramp-archive-file-name-p dir))
       (setq dir (file-name-directory (tramp-archive-file-name-archive dir))))
     ;; the cached value will be 'none in the case of no project root (this is 
to
-    ;; ensure it is not reevaluated each time when not inside a project) so use
-    ;; cl-subst to replace this 'none value with nil so a nil value is used
-    ;; instead
-    (cl-subst nil 'none
-      (or
+    ;; ensure it is not reevaluated each time when not inside a project) so
+    ;; replace this 'none value with nil so a nil value is used instead
+    (let ((result (or
        ;; if we've already failed to find a project dir for this
        ;; dir, and cached that failure, don't recompute
        (let* ((cache-key (format "projectilerootless-%s" dir))
@@ -1412,7 +1407,7 @@ If DIR is not supplied it's set to the current directory 
by default."
            'none))
        ;; if the file is local or we're connected to it via TRAMP, run
        ;; through the project root functions until we find a project dir
-       (cl-some
+       (seq-some
         (lambda (func)
           (let* ((cache-key (format "%s-%s" func dir))
                  (cache-value (gethash cache-key 
projectile-project-root-cache)))
@@ -1427,7 +1422,8 @@ If DIR is not supplied it's set to the current directory 
by default."
        ;; / network related, so cache the failure
        (let ((cache-key (format "projectilerootless-%s" dir)))
          (puthash cache-key 'none projectile-project-root-cache)
-         'none)))))
+         'none))))
+      (unless (eq result 'none) result))))
 
 (defun projectile-ensure-project (dir)
   "Ensure that DIR is non-nil.
@@ -1563,7 +1559,7 @@ IGNORED-DIRECTORIES may optionally be provided."
              (deleted (unless (and projectile-git-use-fd 
projectile-fd-executable)
                         (projectile-git-deleted-files directory))))
         (if deleted
-            (cl-remove-if (lambda (f) (member f deleted)) files)
+            (seq-remove (lambda (f) (member f deleted)) files)
           files)))
      (t (projectile-files-via-ext-command directory 
(projectile-get-ext-command vcs))))))
 
@@ -1643,7 +1639,7 @@ they are excluded from the results of this function."
     ;; If project root is inside of an VCS folder, but not actually an
     ;; VCS root itself, submodules external to the project will be
     ;; included in the VCS get sub-projects result. Let's remove them.
-    (cl-remove-if-not
+    (seq-filter
      (lambda (submodule)
        (string-match-p project-child-folder-regex
                        submodule))
@@ -1705,26 +1701,26 @@ directories/subdirectories with matching filename,
 otherwise operates relative to project root."
   (let ((ignored-files (projectile-ignored-files-rel))
         (ignored-dirs (projectile-ignored-directories-rel)))
-    (cl-remove-if
+    (seq-remove
      (lambda (file)
-       (or (cl-some
+       (or (seq-some
             (lambda (f)
               (string= f (file-name-nondirectory file)))
             ignored-files)
-           (cl-some
+           (seq-some
             (lambda (dir)
               ;; if the directory is prefixed with '*' then ignore all 
directories matching that name
               (if (string-prefix-p "*" dir)
                   ;; remove '*' and trailing slash from ignored directory name
                   (let ((d (substring dir 1 (if (equal (substring dir -1) "/") 
-1 nil))))
-                    (cl-some
+                    (seq-some
                      (lambda (p)
                        (string= d p))
                      ;; split path by '/', remove empty strings, and check if 
any subdirs match name 'd'
                      (delete "" (split-string (or (file-name-directory file) 
"") "/"))))
                 (string-prefix-p dir file)))
             ignored-dirs)
-           (cl-some
+           (seq-some
             (lambda (suf)
               (string-suffix-p suf file t))
             projectile-globally-ignored-file-suffixes)))
@@ -1733,9 +1729,9 @@ otherwise operates relative to project root."
 (defun projectile-keep-ignored-files (project vcs files)
   "Filter FILES to retain only those that are ignored."
   (when files
-    (cl-remove-if-not
+    (seq-filter
      (lambda (file)
-       (cl-some (lambda (f) (string-prefix-p f file)) files))
+       (seq-some (lambda (f) (string-prefix-p f file)) files))
      (projectile-get-repo-ignored-files project vcs))))
 
 (defun projectile-keep-ignored-directories (project vcs directories)
@@ -1765,18 +1761,18 @@ this case unignored files will be absent from FILES."
 
 (defun projectile-buffers-with-file (buffers)
   "Return only those BUFFERS backed by files."
-  (cl-remove-if-not (lambda (b) (buffer-file-name b)) buffers))
+  (seq-filter (lambda (b) (buffer-file-name b)) buffers))
 
 (defun projectile-buffers-with-file-or-process (buffers)
   "Return only those BUFFERS backed by files or processes."
-  (cl-remove-if-not (lambda (b) (or (buffer-file-name b)
+  (seq-filter (lambda (b) (or (buffer-file-name b)
                                     (get-buffer-process b))) buffers))
 
 (defun projectile-project-buffers (&optional project)
   "Get a list of a project's buffers.
 If PROJECT is not specified the command acts on the current project."
   (let* ((project-root (or project (projectile-acquire-root)))
-         (all-buffers (cl-remove-if-not
+         (all-buffers (seq-filter
                        (lambda (buffer)
                          (projectile-project-buffer-p buffer project-root))
                        (buffer-list))))
@@ -1828,12 +1824,12 @@ If PROJECT is not specified the command acts on the 
current project."
   "Check if BUFFER should be ignored."
   (or
    (with-current-buffer buffer
-     (cl-some
+     (seq-some
       (lambda (name)
         (string-match-p name (buffer-name)))
       projectile-globally-ignored-buffers))
    (with-current-buffer buffer
-     (cl-some
+     (seq-some
       (lambda (mode)
         (string-match-p (concat "^" mode "$")
                         (symbol-name major-mode)))
@@ -1846,7 +1842,7 @@ Files are ordered by recently active buffers, and then 
recently
 opened through use of recentf."
   (let ((project-buffer-files (projectile-project-buffer-files)))
     (append project-buffer-files
-            (projectile-difference
+            (seq-difference
              (projectile-recentf-files)
              project-buffer-files))))
 
@@ -1909,7 +1905,7 @@ Only buffers not visible in windows are returned."
 
 (defun projectile-project-buffers-non-visible ()
   "Get a list of non visible project buffers."
-  (cl-remove-if-not
+  (seq-filter
    (lambda (buffer)
      (not (get-buffer-window buffer 'visible)))
    (projectile-project-buffers)))
@@ -1946,7 +1942,7 @@ projectile project root."
 
 (defun projectile-normalise-patterns (patterns)
   "Remove paths from PATTERNS."
-  (cl-remove-if (lambda (pat) (string-prefix-p "/" pat)) patterns))
+  (seq-remove (lambda (pat) (string-prefix-p "/" pat)) patterns))
 
 (defun projectile-make-relative-to-root (files)
   "Make FILES relative to the project root."
@@ -1963,7 +1959,7 @@ and the LOCAL-DIRECTORY name may optionally be provided."
         (globally-ignored-directories (or globally-ignored-directories 
(projectile-globally-ignored-directory-names)))
         (local-directory (or local-directory (file-name-nondirectory 
(directory-file-name directory)))))
     (or (member directory ignored-directories)
-        (cl-some
+        (seq-some
          (lambda (name)
            (string-match-p name directory))
          projectile-global-ignore-file-patterns)
@@ -1975,7 +1971,7 @@ and the LOCAL-DIRECTORY name may optionally be provided."
 A pre-computed list of IGNORED-FILES may optionally be provided."
   (or
    (member file (or ignored-files (projectile-ignored-files)))
-   (cl-some
+   (seq-some
     (lambda (name)
       (string-match-p name file))
     projectile-global-ignore-file-patterns)))
@@ -1990,19 +1986,19 @@ A pre-computed list of IGNORED-FILES may optionally be 
provided."
   "Check if FILE should be ignored relative to DIRECTORY.
 PATTERNS should have the form: (ignored . unignored)"
   (let ((default-directory directory))
-    (and (cl-some
+    (and (seq-some
           (lambda (pat) (projectile-check-pattern-p file pat))
           (car patterns))
-         (cl-notany
-          (lambda (pat) (projectile-check-pattern-p file pat))
-          (cdr patterns)))))
+         (not (seq-some
+               (lambda (pat) (projectile-check-pattern-p file pat))
+               (cdr patterns))))))
 
 (defun projectile-ignored-files ()
   "Return list of ignored files.
 
 That's a combination of the globally ignored files and
 files ignored in a project's dirconfig."
-  (projectile-difference
+  (seq-difference
    (mapcar
     #'projectile-expand-root
     (append
@@ -2012,13 +2008,13 @@ files ignored in a project's dirconfig."
 
 (defun projectile-globally-ignored-directory-names ()
   "Return list of ignored directory names."
-  (projectile-difference
+  (seq-difference
    projectile-globally-ignored-directories
    projectile-globally-unignored-directories))
 
 (defun projectile-ignored-directories ()
   "Return list of ignored directories."
-  (projectile-difference
+  (seq-difference
    (mapcar
     #'file-name-as-directory
     (mapcar
@@ -2039,12 +2035,12 @@ files ignored in a project's dirconfig."
 (defun projectile-project-ignored-files ()
   "Return list of project ignored files.
 Unignored files are not included."
-  (cl-remove-if 'file-directory-p (projectile-project-ignored)))
+  (seq-remove 'file-directory-p (projectile-project-ignored)))
 
 (defun projectile-project-ignored-directories ()
   "Return list of project ignored directories.
 Unignored directories are not included."
-  (cl-remove-if-not 'file-directory-p (projectile-project-ignored)))
+  (seq-filter 'file-directory-p (projectile-project-ignored)))
 
 (defun projectile-paths-to-ignore ()
   "Return a list of ignored project paths."
@@ -2088,11 +2084,11 @@ Unignored files/directories are not included."
 
 (defun projectile-project-unignored-files ()
   "Return list of project unignored files."
-  (cl-remove-if 'file-directory-p (projectile-project-unignored)))
+  (seq-remove 'file-directory-p (projectile-project-unignored)))
 
 (defun projectile-project-unignored-directories ()
   "Return list of project unignored directories."
-  (cl-remove-if-not 'file-directory-p (projectile-project-unignored)))
+  (seq-filter 'file-directory-p (projectile-project-unignored)))
 
 (defun projectile-paths-to-ensure ()
   "Return a list of unignored project paths."
@@ -2255,7 +2251,7 @@ project-root for every file."
               ;; One options would be to pass explicitly the subdirs
               ;; to commands like `git ls-files` which would return
               ;; files paths relative to the project root.
-              (cl-mapcan
+              (mapcan
                (lambda (dir)
                  (mapcar (lambda (f)
                            (file-relative-name (concat dir f)
@@ -2291,7 +2287,7 @@ project-root for every file."
   "Return a list of dirs for PROJECT."
   (delete-dups
    (delq nil
-         (cl-mapcan #'projectile--directory-ancestors
+         (mapcan #'projectile--directory-ancestors
                     (projectile-project-files project)))))
 
 (defun projectile--directory-ancestors (path)
@@ -2418,14 +2414,14 @@ With FLEX-MATCHING, match any file that contains the 
base name of current file"
                                           (concat "\." ext))
                                         "\\'")))
                             file-ext-list))
-         (candidates (cl-remove-if-not
+         (candidates (seq-filter
                       (lambda (project-file)
                         (string-match filename project-file))
                       project-file-list))
          (candidates
           (flatten-tree (mapcar
                                (lambda (file)
-                                 (cl-remove-if-not
+                                 (seq-filter
                                   (lambda (project-file)
                                     (string-match file
                                                   (concat (file-name-base 
project-file)
@@ -2434,14 +2430,14 @@ With FLEX-MATCHING, match any file that contains the 
base name of current file"
                                   candidates))
                                file-list)))
          (candidates
-          (cl-remove-if-not (lambda (file) (not (backup-file-name-p file))) 
candidates))
+          (seq-filter (lambda (file) (not (backup-file-name-p file))) 
candidates))
          (candidates
-          (cl-sort (copy-sequence candidates)
-                   (lambda (file _)
-                     (let ((candidate-dirname (file-name-nondirectory 
(directory-file-name (if (file-name-directory file)
-                                                                               
                (file-name-directory file) "./")))))
-                       (unless (equal fulldirname (file-name-directory file))
-                         (equal dirname candidate-dirname)))))))
+          (seq-sort (lambda (file _)
+                      (let ((candidate-dirname (file-name-nondirectory 
(directory-file-name (if (file-name-directory file)
+                                                                               
                 (file-name-directory file) "./")))))
+                        (unless (equal fulldirname (file-name-directory file))
+                          (equal dirname candidate-dirname))))
+                    candidates)))
     candidates))
 
 (defun projectile-select-files (project-files &optional invalidate-cache)
@@ -2456,7 +2452,7 @@ With a prefix arg INVALIDATE-CACHE invalidates the cache 
first."
                    (file-relative-name (file-truename file) 
(projectile-project-root))
                  file))
          (files (if file
-                    (cl-remove-if-not
+                    (seq-filter
                      (lambda (project-file)
                        (string-match file project-file))
                      project-files)
@@ -2660,44 +2656,42 @@ Parameters MODE VARIABLE VALUE are passed directly to
 ;;;; Sorting project files
 (defun projectile-sort-files (files)
   "Sort FILES according to `projectile-sort-order'."
-  (cl-case projectile-sort-order
-    (default files)
-    (recentf (projectile-sort-by-recentf-first files))
-    (recently-active (projectile-sort-by-recently-active-first files))
-    (modification-time (projectile-sort-by-modification-time files))
-    (access-time (projectile-sort-by-access-time files))))
+  (pcase projectile-sort-order
+    ('default files)
+    ('recentf (projectile-sort-by-recentf-first files))
+    ('recently-active (projectile-sort-by-recently-active-first files))
+    ('modification-time (projectile-sort-by-modification-time files))
+    ('access-time (projectile-sort-by-access-time files))))
 
 (defun projectile-sort-by-recentf-first (files)
   "Sort FILES by a recent first scheme."
   (let ((project-recentf-files (projectile-recentf-files)))
     (append project-recentf-files
-            (projectile-difference files project-recentf-files))))
+            (seq-difference files project-recentf-files))))
 
 (defun projectile-sort-by-recently-active-first (files)
   "Sort FILES by most recently active buffers or opened files."
   (let ((project-recently-active-files (projectile-recently-active-files)))
     (append project-recently-active-files
-            (projectile-difference files project-recently-active-files))))
+            (seq-difference files project-recently-active-files))))
 
 (defun projectile-sort-by-modification-time (files)
   "Sort FILES by modification time."
   (let ((default-directory (projectile-project-root)))
-    (cl-sort
-     (copy-sequence files)
-     (lambda (file1 file2)
-       (let ((file1-mtime (nth 5 (file-attributes file1)))
-             (file2-mtime (nth 5 (file-attributes file2))))
-         (not (time-less-p file1-mtime file2-mtime)))))))
+    (seq-sort (lambda (file1 file2)
+                (let ((file1-mtime (nth 5 (file-attributes file1)))
+                      (file2-mtime (nth 5 (file-attributes file2))))
+                  (not (time-less-p file1-mtime file2-mtime))))
+              files)))
 
 (defun projectile-sort-by-access-time (files)
   "Sort FILES by access time."
   (let ((default-directory (projectile-project-root)))
-    (cl-sort
-     (copy-sequence files)
-     (lambda (file1 file2)
-       (let ((file1-atime (nth 4 (file-attributes file1)))
-             (file2-atime (nth 4 (file-attributes file2))))
-         (not (time-less-p file1-atime file2-atime)))))))
+    (seq-sort (lambda (file1 file2)
+                (let ((file1-atime (nth 4 (file-attributes file1)))
+                      (file2-atime (nth 4 (file-attributes file2))))
+                  (not (time-less-p file1-atime file2-atime))))
+              files)))
 
 
 ;;;; Find directory in project functionality
@@ -2761,7 +2755,7 @@ With a prefix arg INVALIDATE-CACHE invalidates the cache 
first."
 
 (defun projectile-test-files (files)
   "Return only the test FILES."
-  (cl-remove-if-not 'projectile-test-file-p files))
+  (seq-filter 'projectile-test-file-p files))
 
 (defun projectile--merge-related-files-fns (related-files-fns)
   "Merge multiple RELATED-FILES-FNS into one function."
@@ -2796,15 +2790,15 @@ PROJECT-ROOT is the project root."
            (plist (projectile--related-files-plist project-root file))
            (has-kind? (plist-member plist kind)))
       (let* ((kind-value (plist-get plist kind))
-             (values (if (cl-typep kind-value '(or string function))
+             (values (if (or (stringp kind-value) (functionp kind-value))
                          (list kind-value)
                        kind-value))
-             (paths (delete-dups (cl-remove-if-not 'stringp values)))
-             (predicates (delete-dups (cl-remove-if-not 'functionp values))))
+             (paths (delete-dups (seq-filter 'stringp values)))
+             (predicates (delete-dups (seq-filter 'functionp values))))
         (append
          ;; Make sure that :paths exists even with nil if there is no 
predicates
          (when (or paths (null predicates))
-           (list :paths (cl-remove-if-not
+           (list :paths (seq-filter
                          (lambda (f)
                            (projectile-file-exists-p 
(projectile-expand-file-name-wildcard f project-root)))
                          paths)))
@@ -2812,7 +2806,7 @@ PROJECT-ROOT is the project root."
            (list :predicate (if (= 1 (length predicates))
                                 (car predicates)
                               (lambda (other-file)
-                                (cl-some (lambda (predicate)
+                                (seq-some (lambda (predicate)
                                            (funcall predicate other-file))
                                          predicates)))))))))
 
@@ -2823,7 +2817,7 @@ PROJECT-ROOT is the project root."
     (delete-dups (append
                   paths
                   (when predicate
-                    (cl-remove-if-not predicate 
(projectile-current-project-files)))))))
+                    (seq-filter predicate 
(projectile-current-project-files)))))))
 
 (defun projectile--related-files-kinds(file)
   "Return a list of keywords meaning available related kinds for FILE."
@@ -2878,10 +2872,10 @@ If KIND is not provided, a list of possible kinds can 
be chosen."
 (defun projectile-related-files-fn-groups(kind groups)
   "Generate a related-files-fn which relates as KIND for files in each of 
GROUPS."
   (lambda (path)
-    (if-let* ((group-found (cl-find-if (lambda (group)
+    (if-let* ((group-found (seq-find (lambda (group)
                                         (member path group))
                                       groups)))
-        (list kind (cl-remove path group-found :test 'equal)))))
+        (list kind (remove path group-found)))))
 
 ;;;###autoload
 (defun projectile-related-files-fn-extensions(kind extensions)
@@ -2939,9 +2933,9 @@ Use files with EXTENSION based on TEST-SUFFIX."
   (let ((kinds (projectile--related-files-kinds file)))
     (cond ((member :impl kinds) t)
           ((member :test kinds) nil)
-          (t (or (cl-some (lambda (pat) (string-prefix-p pat 
(file-name-nondirectory file)))
+          (t (or (seq-some (lambda (pat) (string-prefix-p pat 
(file-name-nondirectory file)))
                           (delq nil (list (funcall 
projectile-test-prefix-function (projectile-project-type)))))
-                 (cl-some (lambda (pat) (string-suffix-p pat 
(file-name-sans-extension (file-name-nondirectory file))))
+                 (seq-some (lambda (pat) (string-suffix-p pat 
(file-name-sans-extension (file-name-nondirectory file))))
                           (delq nil (list (funcall 
projectile-test-suffix-function (projectile-project-type))))))))))
 
 (defun projectile-current-project-test-files ()
@@ -3119,7 +3113,7 @@ files such as test/impl/other files as below:
     relative path/paths or predicate as value.  PREDICATE accepts a
     relative path as the input."
     (let* ((existing-project-plist
-            (or (cl-find-if
+            (or (seq-find
                  (lambda (p) (eq project-type (car p))) 
projectile-project-types)
                 (error "No existing project found for: %s" project-type)))
            (new-plist
@@ -3148,7 +3142,7 @@ files such as test/impl/other files as below:
         (setq projectile-project-types
               (if precedence
                   (let ((filtered-types
-                       (cl-remove-if #'project-filter 
projectile-project-types)))
+                       (seq-remove #'project-filter projectile-project-types)))
                     (setq projectile-project-type-cache (make-hash-table))
                     (cond ((eq precedence 'high)
                            (cons project-type-elt filtered-types))
@@ -3270,7 +3264,7 @@ it acts on the current project."
 (defun projectile--cmake-command-presets-shallow (filename command-type)
   "Get CMake COMMAND-TYPE presets from FILENAME."
   (when-let* ((preset (projectile--cmake-read-preset (projectile-expand-root 
filename))))
-    (cl-remove-if
+    (seq-remove
      (lambda (preset) (equal (gethash "hidden" preset) t))
      (gethash (projectile--cmake-command-preset-array-id command-type) 
preset))))
 
@@ -3790,7 +3784,7 @@ on the current project.
 
 Fallback to a generic project type when the type can't be determined."
   (let ((project-type
-         (or (car (cl-find-if
+         (or (car (seq-find
                    (lambda (project-type-record)
                      (let ((project-type (car project-type-record))
                            (marker (plist-get (cdr project-type-record) 
'marker-files)))
@@ -3826,7 +3820,7 @@ The project type is cached for improved performance."
   "Check whether all FILES exist in the project.
 When DIR is specified it checks DIR's project, otherwise
 it acts on the current project."
-  (cl-every #'(lambda (file) (projectile-verify-file file dir)) files))
+  (seq-every-p #'(lambda (file) (projectile-verify-file file dir)) files))
 
 (defun projectile-verify-file (file &optional dir)
   "Check whether FILE exists in the current project.
@@ -4101,7 +4095,7 @@ Fallback to DEFAULT-VALUE for missing attributes."
 
 (defun projectile-group-file-candidates (file candidates)
   "Group file candidates by dirname matching count."
-  (cl-sort (copy-sequence
+  (seq-sort (lambda (a b) (> (car a) (car b)))
             (let (value result)
               (while (setq value (pop candidates))
                 (let* ((key (projectile-dirname-matching-count file value))
@@ -4111,8 +4105,7 @@ Fallback to DEFAULT-VALUE for missing attributes."
                     (push (list key value) result))))
               (mapcar (lambda (x)
                         (cons (car x) (nreverse (cdr x))))
-                      (nreverse result))))
-           (lambda (a b) (> (car a) (car b)))))
+                      (nreverse result)))))
 
 (defun projectile--best-or-all-candidates-based-on-parents-dirs (file 
candidates)
   "Return a list of the best one for FILE from CANDIDATES or all CANDIDATES."
@@ -4233,7 +4226,7 @@ The precedence for determining test files to return is:
     (projectile--related-files-from-plist it))
    ((projectile--test-file-from-test-dir-str impl-file) (list it))
    ((projectile--best-or-all-candidates-based-on-parents-dirs
-     impl-file (cl-remove-if-not
+     impl-file (seq-filter
                 (projectile--impl-to-test-predicate impl-file)
                 (projectile-current-project-files))) it)
    ((projectile--impl-to-test-dir-fallback impl-file)
@@ -4267,7 +4260,7 @@ The precedence for determining implementation files to 
return is:
     (projectile--related-files-from-plist it))
    ((projectile--impl-file-from-src-dir-str test-file) (list it))
    ((projectile--best-or-all-candidates-based-on-parents-dirs
-     test-file (cl-remove-if-not
+     test-file (seq-filter
                 (projectile--test-to-impl-predicate test-file)
                 (projectile-current-project-files))) it)
    ((projectile--test-to-impl-dir-fallback test-file) (list it))))
@@ -4476,7 +4469,7 @@ With REGEXP given, don't query the user for a regexp."
           (vc-git-grep search-regexp (or files "") root-dir)
         ;; paths for find-grep should relative and without trailing /
         (let ((grep-find-ignored-files
-               (cl-union (projectile--globally-ignored-file-suffixes-glob)
+               (seq-union (projectile--globally-ignored-file-suffixes-glob)
                          grep-find-ignored-files))
               (projectile-grep-find-ignored-paths
                (append (mapcar (lambda (f) (directory-file-name 
(file-relative-name f root-dir)))
@@ -4833,7 +4826,7 @@ Use a prefix argument ARG to indicate creation of a new 
process instead."
   (let* ((project (projectile-acquire-root))
          (dir (file-relative-name (expand-file-name directory)
                                   project)))
-    (cl-remove-if-not
+    (seq-filter
      (lambda (f) (string-prefix-p dir f))
      (projectile-project-files project))))
 
@@ -4947,7 +4940,7 @@ files in the project."
                          (projectile--grep-construct-command search-term 
file-ext)))))
         (projectile-files-from-cmd cmd directory))
     ;; we have to reject directories as a workaround to work with git 
submodules
-    (cl-remove-if
+    (seq-remove
      #'file-directory-p
      (mapcar #'(lambda (file) (expand-file-name file directory))
              (projectile-dir-files directory)))))
@@ -5004,7 +4997,7 @@ to run the replacement."
           ;; We can't narrow the list of files with
           ;; `projectile-files-with-string' because those regexp tools
           ;; don't support Emacs regular expressions.
-          (cl-remove-if
+          (seq-remove
            (lambda (f) (or (file-directory-p f) (not (file-exists-p f))))
            (mapcar #'(lambda (file) (expand-file-name file directory))
                    (projectile-dir-files directory)))))
@@ -5043,7 +5036,7 @@ The buffers are killed according to the value of
   (interactive)
   (let* ((project (projectile-acquire-root))
          (project-name (projectile-project-name project))
-         (modified-buffers (cl-remove-if-not (lambda (buf)
+         (modified-buffers (seq-filter (lambda (buf)
                                                (and (buffer-file-name buf)
                                                     (buffer-modified-p buf)))
                                              (projectile-project-buffers 
project))))
@@ -5092,19 +5085,19 @@ directory to open."
   (unless project-root
     (setq project-root (projectile-acquire-root)))
   (let ((vcs (projectile-project-vcs project-root)))
-    (cl-case vcs
-      (git
+    (pcase vcs
+      ('git
        (cond ((fboundp 'magit-status-internal)
               (magit-status-internal project-root))
              ((fboundp 'magit-status)
               (with-no-warnings (magit-status project-root)))
              (t
               (vc-dir project-root))))
-      (hg
+      ('hg
        (if (fboundp 'monky-status)
            (monky-status project-root)
          (vc-dir project-root)))
-      (t (vc-dir project-root)))))
+      (_ (vc-dir project-root)))))
 
 ;;;###autoload
 (defun projectile-recentf ()
@@ -5124,7 +5117,7 @@ directory to open."
        (let ((project-root (expand-file-name (projectile-acquire-root))))
          (mapcar
           (lambda (f) (file-relative-name f project-root))
-          (cl-remove-if-not
+          (seq-filter
            (lambda (f) (string-prefix-p project-root (expand-file-name f)))
            recentf-list)))))
 
@@ -5653,7 +5646,7 @@ An open project is a project with any open buffers."
 (defun projectile--remove-current-project (projects)
   "Remove the current project (if any) from the list of PROJECTS."
   (if-let* ((project (projectile-project-root)))
-      (projectile-difference projects
+      (seq-difference projects
                              (list (abbreviate-file-name project)))
     projects))
 
@@ -5791,7 +5784,7 @@ This command will first prompt for the directory the file 
is in."
 
 (defun projectile-all-project-files ()
   "Get a list of all files in all projects."
-  (cl-mapcan
+  (mapcan
    (lambda (project)
      (when (file-exists-p project)
        (mapcar (lambda (file)
@@ -5821,8 +5814,8 @@ See `projectile--cleanup-known-projects'."
   "Remove known projects that don't exist anymore.
 Return a list of projects removed."
   (projectile-merge-known-projects)
-  (let ((projects-kept (cl-remove-if-not #'projectile-keep-project-p 
projectile-known-projects))
-        (projects-removed (cl-remove-if #'projectile-keep-project-p 
projectile-known-projects)))
+  (let ((projects-kept (seq-filter #'projectile-keep-project-p 
projectile-known-projects))
+        (projects-removed (seq-remove #'projectile-keep-project-p 
projectile-known-projects)))
     (setq projectile-known-projects projects-kept)
     (projectile-merge-known-projects)
     projects-removed))
@@ -5859,7 +5852,7 @@ Return a list of projects removed."
                       :caller 'projectile-read-project)))
   (unless (called-interactively-p 'any)
     (setq projectile-known-projects
-          (cl-remove-if
+          (seq-remove
            (lambda (proj) (string= project proj))
            projectile-known-projects))
     (projectile-merge-known-projects)
@@ -5921,11 +5914,11 @@ overwriting each other's changes."
          (known-on-file
           (let ((data (projectile-unserialize projectile-known-projects-file)))
             (if (proper-list-p data) data nil)))
-         (removed-after-sync (projectile-difference known-on-last-sync 
known-now))
+         (removed-after-sync (seq-difference known-on-last-sync known-now))
          (removed-in-other-process
-          (projectile-difference known-on-last-sync known-on-file))
+          (seq-difference known-on-last-sync known-on-file))
          (result (delete-dups
-                  (projectile-difference
+                  (seq-difference
                    (append known-now known-on-file)
                    (append removed-after-sync removed-in-other-process)))))
     (setq projectile-known-projects result)
@@ -6000,10 +5993,9 @@ is chosen."
   (let ((method `(lambda ()
                    ,@body)))
     `(setq projectile-commander-methods
-           (cl-sort (copy-sequence
+           (seq-sort (lambda (a b) (< (car a) (car b)))
                      (cons (list ,key ,description ,method)
-                           (assq-delete-all ,key 
projectile-commander-methods)))
-                    (lambda (a b) (< (car a) (car b)))))))
+                           (assq-delete-all ,key 
projectile-commander-methods))))))
 
 (def-projectile-commander-method ?? "Commander help buffer."
   (ignore-errors (kill-buffer projectile-commander-help-buffer))
@@ -6161,7 +6153,7 @@ dirty project list."
           (while (and (< counter max-iterations)
                       (not (gethash (current-buffer) other-project-buffers)))
             (apply orig-fun args)
-            (cl-incf counter))))
+            (setq counter (1+ counter)))))
     (apply orig-fun args)))
 
 (defun projectile-next-project-buffer ()
diff --git a/test/projectile-test.el b/test/projectile-test.el
index 2c97762e7c..d896ba3ff5 100644
--- a/test/projectile-test.el
+++ b/test/projectile-test.el
@@ -1064,7 +1064,7 @@ Just delegates OPERATION and ARGS for all operations 
except for`shell-command`'.
             (projectile-grep "hi")))
         (expect 'compilation-start :to-have-been-called-with
                 (concat "-type d \\( -path \\*/IG_DIR \\) -prune -o "
-                        "\\! -type d \\( -name IG_FILE -o -name \\*IG_SUF \\) 
-prune -o "
+                        "\\! -type d \\( -name \\*IG_SUF -o -name IG_FILE \\) 
-prune -o "
                         "\\( -path ./GLOB_IG_DIR -o -path ./GLOB_IG_FILE \\) 
-prune -o ")
                 'grep-mode))))
     (it "excludes project ignores"


Reply via email to