Function: magit-todos--scan-with-find|grep
magit-todos--scan-with-find|grep is a natively compiled function
defined in magit-todos.el.
Signature
(magit-todos--scan-with-find|grep &key MAGIT-STATUS-BUFFER DIRECTORY DEPTH HEADING SYNC CALLBACK)
Documentation
Scan for to-dos with find|grep.
Then calls CALLBACK. MAGIT-STATUS-BUFFER is what it says. DIRECTORY
is the directory in which to run the scan. DEPTH should be an
integer, typically the value of magit-todos-depth. HEADING is
passed to CALLBACK.
When SYNC is nil, the scanner process is returned, and CALLBACK is a function which is called by the process sentinel with one argument, a list of match items.
When SYNC is non-nil, match items are returned.
Source Code
;; Defined in /nix/store/xy37aj9089qvbs5clw0qszpi3hrh3mxx-emacs-packages-deps/share/emacs/site-lisp/elpa/magit-todos-20250928.1611/magit-todos.el
(magit-todos-defscanner "find|grep"
;; NOTE: The filenames output by find|grep have a leading "./". I don't expect this scanner to be
;; used much, if at all, so I'm not going to go to the trouble to fix this now.
:availablep (lambda ()
(string-match "--perl-regexp" (shell-command-to-string "grep --help")))
:allow-exit-codes (0 1)
:command (let* ((grep-find-template (progn
(unless grep-find-template
(grep-compute-defaults))
(->> grep-find-template
(s-replace " grep " " grep -b -E ")
(s-replace " -nH " " -H "))))
(_ (when depth
(setq grep-find-template
(s-replace " <D> " (concat " <D> -maxdepth " (1+ depth) " ")
grep-find-template)))))
;; Modified from `rgrep-default-command'
(list "find" directory
(list (when grep-find-ignored-directories
(list "-type" "d"
"(" "-path"
(-interpose (list "-o" "-path")
(-non-nil (--map (cond ((stringp it)
(concat "*/" it))
((consp it)
(and (funcall (car it) it)
(concat "*/" (cdr it)))))
grep-find-ignored-directories)))
")" "-prune"))
(when grep-find-ignored-files
(list "-o" "-type" "f"
"(" "-name"
(-interpose (list "-o" "-name")
(--map (cond ((stringp it) it)
((consp it) (and (funcall (car it) it)
(cdr it))))
grep-find-ignored-files))
")" "-prune"))
(when magit-todos-exclude-globs
(list "-o" "("
(-interpose (list "-o")
(--map (list "-iname"
;; Arguments to "-iname" must not end in "/".
(replace-regexp-in-string (rx "/" eos) "" it))
magit-todos-exclude-globs))
")" "-prune"))
(unless magit-todos-submodule-list
(when (magit-list-module-paths)
(list "-o" "("
(--map (list "-ipath" it)
(magit-list-module-paths))
")" "-prune"))))
(list "-o" "-type" "f")
;; NOTE: This uses "grep -P", i.e. "Interpret the pattern as a
;; Perl-compatible regular expression (PCRE). This is highly
;; experimental and grep -P may warn of unimplemented features." But it
;; does seem to work properly, at least on GNU grep. Using "grep -E"
;; with this PCRE regexp doesn't work quite right, as it doesn't match
;; all the keywords, but pcre2el doesn't convert to "extended regular
;; expressions", so this will have to do. Maybe we should test whether
;; the version of grep installed supports "-P".
;; NOTE: For some reason, when "-execdir" is used, the callback function is never
;; called, even though the process terminates and its buffer has the correct
;; output. It works correctly when "-exec" is used, so we use that.
(list "-exec" "grep" "-bPH"
(when magit-todos-ignore-case
"--ignore-case")
extra-args
search-regexp-pcre "{}" "+"))))