summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Gutov <dgutov@yandex.ru>2015-08-02 01:01:28 +0300
committerDmitry Gutov <dgutov@yandex.ru>2015-08-02 01:30:36 +0300
commit543bb9bc2023fafdadf697e23484214daac95dee (patch)
treec0abd684296a63de9e1366d1123575e330c001d6
parent08d65696c947b09d4c32606f279c3c2594e99e16 (diff)
Add a second argument to project-ignores
* 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.
-rw-r--r--lisp/progmodes/elisp-mode.el1
-rw-r--r--lisp/progmodes/project.el28
-rw-r--r--lisp/progmodes/xref.el3
3 files changed, 18 insertions, 14 deletions
diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el
index cf34e1a2d47..b7ae3c756de 100644
--- a/lisp/progmodes/elisp-mode.el
+++ b/lisp/progmodes/elisp-mode.el
@@ -655,7 +655,6 @@ It can be quoted, or be inside a quoted form."
(declare-function project-search-path "project")
(declare-function project-current "project")
-(declare-function project-prune-directories "project")
(defun elisp--xref-find-references (symbol)
(cl-mapcan
diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index 27354598f8d..d849f93b5e8 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -78,10 +78,12 @@ It should include the current project root, as well as the roots
of any other currently open projects, if they're meant to be
edited together. The directory names should be absolute.")
-(cl-defgeneric project-ignores (_project)
- "Return the list of glob patterns that match ignored files.
+(cl-defgeneric project-ignores (_project _dir)
+ "Return the list of glob patterns to ignore inside DIR.
+Patterns can match both regular files and directories.
To root an entry, start it with `./'. To match directories only,
-end it with `/'."
+end it with `/'. DIR must be either one of `project-roots', or
+an element of `project-search-path'."
(require 'grep)
(defvar grep-find-ignored-files)
(nconc
@@ -100,16 +102,18 @@ end it with `/'."
(cl-defmethod project-roots ((project (head vc)))
(list (cdr project)))
-(cl-defmethod project-ignores ((project (head vc)))
+(cl-defmethod project-ignores ((project (head vc)) dir)
(nconc
- (let* ((dir (cdr project))
- (backend (vc-responsible-backend dir)))
- (mapcar
- (lambda (entry)
- (if (string-match "\\`/" entry)
- (replace-match "./" t t entry)
- entry))
- (vc-call-backend backend 'ignore-completion-table dir)))
+ (let* ((root (cdr project))
+ backend)
+ (when (file-equal-p dir root)
+ (setq backend (vc-responsible-backend root))
+ (mapcar
+ (lambda (entry)
+ (if (string-match "\\`/" entry)
+ (replace-match "./" t t entry)
+ entry))
+ (vc-call-backend backend 'ignore-completion-table root))))
(cl-call-next-method)))
(defun project-ask-user (dir)
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index 9764bc78b1a..27e56f2f94f 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -791,7 +791,8 @@ to search in, and the file name pattern to search for."
(lambda (_kind regexp)
(cl-mapcan
(lambda (dir)
- (xref-collect-matches regexp files dir (project-ignores proj)))
+ (xref-collect-matches regexp files dir
+ (project-ignores proj dir)))
dirs))))
(xref--show-xrefs regexp 'matches regexp nil)))