* lisp/progmodes/project.el (project-library-roots): Rename to
project-external-roots.
(project-library-roots-function): Rename to
project-vc-external-roots-function. Only use it in the VC
backend, for now. Update project-external-roots accordingly.
(project-vc-library-roots): Remove.
(project-or-libraries-find-regexp):
Rename to project-or-external-find-regexp.
* lisp/progmodes/elisp-mode.el (elisp-library-roots):
Rename to elisp-load-path-roots.
* lisp/progmodes/etags.el (etags-library-roots): Remove. Use
an anonymous function for the default value of
project-vc-external-roots-function.
* lisp/progmodes/project.el (project-find-functions): Remove
`project-ask-user'.
(project-ask-user): Remove function and the corresponding
`project-roots' implementation.
(project-current): Add a new argument, MAYBE-PROMPT. Prompt the
user in case there's no project in the current directory. Update
all callers.
* lisp/progmodes/project.el (project-find-regexp)
(project--read-regexp)
(project--find-regexp-in): New functions.
* lisp/progmodes/xref.el (xref--find-xrefs): Extract from
xref--show-xrefs. Use in existing callers in place of that
function.
(xref--show-xrefs): Only do the "show" part.
(xref-find-regexp): Rename, more or less, to
project-or-libraries-find-regexp.
* lisp/emacs-lisp/cl-seq.el (cl-set-difference): Retain the order
of the elements from CL-LIST1.
* test/automated/cl-lib-tests.el (cl-lib-test-set-functions):
Update WRT to the above change.
* lisp/progmodes/project.el (project-search-path-function): Rename
to project-library-roots-function, update the documentation and
references.
(project-search-path): Likewise, to project-library-roots.
(project-roots): Clarify documentation.
(project-vc-search-path): Likewise, to project-vc-library-roots.
(project-library-roots): In addition to the renames, thread the
results through file-name-as-directory.
(project-prune-directories): Accept a variable number of
arguments. Rename to project-combine-directories.
(project-subtract-directories): New function.
* lisp/progmodes/elisp-mode.el (elisp--xref-find-references):
Append project-roots and project-library-roots together.
* lisp/progmodes/etags.el (etags--xref-find-references): Ditto.
* lisp/progmodes/project.el (project-vc): New group.
(project-vc-search-path, project-vc-ignores): New variables.
(project--value-in-dir): Utility function.
(project-search-path, project-ignores): Use them.
* lisp/progmodes/xref.el (xref--rgrep-command): Only replace `./'
at bos. Don't add extra `/'. Don't prepend with `*' if replaced.
* lisp/progmodes/project.el (project-ignores): Add a second
argument DIR.
* lisp/progmodes/project.el (project-ignores): Only include the VC
ignores if DIR is the VC root.
* lisp/progmodes/xref.el (xref-find-regexp): Update accordingly.
* lisp/progmodes/project.el (project-search-path-function)
(project-search-path): Update the docstring.
(project-directories): Rename to `project-roots', update all
callers and implementations accordingly.
(project-root): Remove.
* lisp/progmodes/xref.el (xref-find-regexp): Use * instead of *.*
as the default file mask.
* lisp/progmodes/project.el (project-ignores): New generic
function, and an implementation for the VC project type.
* lisp/progmodes/xref.el (xref--rgrep-command): Split, as a
variant of rgrep-default-command that handles a generic list of
ignores.
(xref-collect-matches): Use it, and pass through to it the value
of the newly added argument.
(xref-find-regexp): Handle ignored paths within the project.
Remove outdated comment.
* lisp/vc/vc.el (vc-default-ignore-completion-table):
Skip the comments and the empty lines.
* lisp/progmodes/project.el: New file.
* lisp/cedet/ede.el: (project-try-ede): New function.
(project-root): New implementation.
* lisp/progmodes/elisp-mode.el (emacs-lisp-mode):
Set project-search-path-function.
(elisp--xref-find-references): Delegate some logic to
project-search-path.
(elisp-search-path): New function.
(elisp-xref-find): Don't implement `matches' anymore.
* lisp/progmodes/etags.el: Don't implement `matches'.
Delegate some logic to project-search-path.
(etags-search-path): New function.
* lisp/progmodes/xref.el (xref-find-function):
Remove `matches' from the API.
(xref-find-regexp): Move whatever common logic was in elisp and
etags implementations, and search the directories returned by
project-directories and project-search-path.