(declare-function xref--show-xrefs "xref")
(declare-function xref-query-replace-in-results "xref")
+(declare-function project--files-in-directory "project")
+(declare-function project--find-regexp-in-files "project")
;;;###autoload
(defun dired-do-find-regexp (regexp)
(require 'xref)
(defvar grep-find-ignored-files)
(declare-function rgrep-find-ignored-directories "grep" (dir))
- (let* ((files (dired-get-marked-files nil nil nil nil t))
+ (let* ((marks (dired-get-marked-files nil nil nil nil t))
(ignores (nconc (mapcar
#'file-name-as-directory
(rgrep-find-ignored-directories default-directory))
grep-find-ignored-files))
(fetcher
(lambda ()
- (let ((xrefs (mapcan
- (lambda (file)
- (xref-collect-matches regexp "*" file
- (and (file-directory-p file)
- ignores)))
- files)))
+ (let (files xrefs)
+ (mapc
+ (lambda (mark)
+ (if (file-directory-p mark)
+ (setq files (nconc
+ (project--files-in-directory mark ignores "*")
+ files))
+ (push mark files)))
+ (nreverse marks))
+ (setq xrefs
+ (project--find-regexp-in-files regexp files))
(unless xrefs
(user-error "No matches for: %s" regexp))
xrefs))))