            return (intern (format format tool))))
 
 ;;;###autoload
-(defun +helm/project-search (&optional all-files-p)
+(defun +helm/project-search (&optional arg)
   "Performs a project search from the project root.
 
 Uses the first available search backend from `+helm-project-search-engines'. If

  (interactive "P")
  (funcall (or (+helm--get-command "+helm/%s")
               #'+helm/grep)
           (or all-files-p current-prefix-arg)))

;;;###autoload
(defun +helm/project-search-from-cwd (&optional all-files-p)
  "Performs a project search recursively from the current directory.

Uses the first available search backend from `+helm-project-search-engines'. If


(dolist (engine `(,@(cl-remove-duplicates +helm-project-search-engines :from-end t) grep))
  (defalias (intern (format "+helm/%s" engine))
    (lambda (arg &optional query directory)
      (interactive "P")
      (+helm-file-search engine
        :query query
        :in directory
        :all-files (and (not (null arg))
                        (listp arg))))
    (format "Perform a project file search using %s.

QUERY is a regexp. If omitted, the current selection is used. If no selection is
active, the last known search is used.

ARG is the universal argument. If a number is passed through it, e.g. C-u 3, then

If ALL-FILES-P, search compressed and hidden files as well."
            engine))

  (defalias (intern (format "+helm/%s-from-cwd" engine))
    (lambda (arg &optional query)
      (interactive "P")
      (+helm-file-search engine
        :query query
        :in default-directory
        :all-files (and (not (null arg))
                        (listp arg))))
    (format "Perform a project file search from the current directory using %s.

QUERY is a regexp. If omitted, the current selection is used. If no selection is
