]> git.eshelyaron.com Git - emacs.git/commitdiff
Separate xref-find-definitions' behavior from other commands
authorDmitry Gutov <dgutov@yandex.ru>
Wed, 22 May 2019 22:16:41 +0000 (01:16 +0300)
committerDmitry Gutov <dgutov@yandex.ru>
Wed, 22 May 2019 22:29:33 +0000 (01:29 +0300)
* lisp/progmodes/xref.el (xref-show-definitions-function):
New variable.
(xref--show-defs): Split off from xref--show-xrefs.
(xref--find-definitions): Use it.
(xref--not-found-error): New function.
(xref--show-xrefs): Simplify.  Show the list buffer even when
there is just one item in the list.  Remove the last argument.

* lisp/dired-aux.el (dired-do-find-regexp): Update accordingly.

lisp/dired-aux.el
lisp/progmodes/xref.el

index aae521287e394d538ca71aa5c45a4e81fce4046f..f699b79432bb1e1f82ef82c573318c909a16d396 100644 (file)
@@ -2914,7 +2914,7 @@ REGEXP should use constructs supported by your local `grep' command."
                  files)))
     (unless xrefs
       (user-error "No matches for: %s" regexp))
-    (xref--show-xrefs xrefs nil t)))
+    (xref--show-xrefs xrefs nil)))
 
 ;;;###autoload
 (defun dired-do-find-regexp-and-replace (from to)
index bf999aeb0d1fadf8b793e718d702e0f09fb6c465..3951b9f1dd2af7605f5c5e7f7787906577410346 100644 (file)
@@ -793,30 +793,31 @@ Return an alist of the form ((FILENAME . (XREF ...)) ...)."
         (current-buffer)))))
 
 \f
-;; This part of the UI seems fairly uncontroversial: it reads the
-;; identifier and deals with the single definition case.
-;; (FIXME: do we really want this case to be handled like that in
-;; "find references" and "find regexp searches"?)
-;;
-;; The controversial multiple definitions case is handed off to
-;; xref-show-xrefs-function.
-
 (defvar xref-show-xrefs-function 'xref--show-xref-buffer
-  "Function to display a list of xrefs.")
+  "Function to display a list of search results.")
+
+(defvar xref-show-definitions-function 'xref--show-xref-buffer
+  "Function to display a list of definitions.")
 
 (defvar xref--read-identifier-history nil)
 
 (defvar xref--read-pattern-history nil)
 
-(defun xref--show-xrefs (xrefs display-action &optional always-show-list)
+(defun xref--show-xrefs (xrefs display-action)
+  (unless (region-active-p) (push-mark nil t))
+  (xref-push-marker-stack)
+  (funcall xref-show-xrefs-function xrefs
+           `((window . ,(selected-window))
+             (display-action . ,display-action))))
+
+(defun xref--show-defs (xrefs display-action)
   (unless (region-active-p) (push-mark nil t))
+  (xref-push-marker-stack)
   (cond
-   ((and (not (cdr xrefs)) (not always-show-list))
-    (xref-push-marker-stack)
+   ((not (cdr xrefs))
     (xref--pop-to-location (car xrefs) display-action))
    (t
-    (xref-push-marker-stack)
-    (funcall xref-show-xrefs-function xrefs
+    (funcall xref-show-definitions-function xrefs
              `((window . ,(selected-window))
                (display-action . ,display-action))))))
 
@@ -857,11 +858,19 @@ Return an alist of the form ((FILENAME . (XREF ...)) ...)."
                         (xref-find-backend)
                         arg)))
     (unless xrefs
-      (user-error "No %s found for: %s" (symbol-name kind) input))
+      (xref--not-found-error kind input))
     (xref--show-xrefs xrefs display-action)))
 
 (defun xref--find-definitions (id display-action)
-  (xref--find-xrefs id 'definitions id display-action))
+  (let ((xrefs (funcall #'xref-backend-definitions
+                        (xref-find-backend)
+                        id)))
+    (unless xrefs
+      (xref--not-found-error 'definitions id))
+    (xref--show-defs xrefs display-action)))
+
+(defun xref--not-found-error (kind input)
+  (user-error "No %s found for: %s" (symbol-name kind) input))
 
 ;;;###autoload
 (defun xref-find-definitions (identifier)