emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 807c341: Add basic xref apropos implementation to e


From: Dmitry Gutov
Subject: [Emacs-diffs] master 807c341: Add basic xref apropos implementation to elisp-mode
Date: Fri, 26 Dec 2014 16:35:09 +0000

branch: master
commit 807c3413c478be964f24b5ecc44712ce3358001e
Author: Dmitry Gutov <address@hidden>
Commit: Dmitry Gutov <address@hidden>

    Add basic xref apropos implementation to elisp-mode
    
    * lisp/progmodes/elisp-mode.el (elisp--xref-find-definitions):
    Filter out nil results.
    (elisp--xref-find-apropos): New function.
    (elisp-xref-find): Use it.
    
    * lisp/progmodes/xref.el (xref--show-xrefs): Use `user-error'.
---
 lisp/ChangeLog               |   11 +++++++++
 lisp/progmodes/elisp-mode.el |   48 ++++++++++++++++++++++++++---------------
 lisp/progmodes/xref.el       |    2 +-
 3 files changed, 42 insertions(+), 19 deletions(-)

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index a2bee14..4c6b23d 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,14 @@
+2014-12-26  Dmitry Gutov  <address@hidden>
+
+       Add basic xref apropos implementation to elisp-mode.
+
+       * progmodes/elisp-mode.el (elisp--xref-find-definitions):
+       Filter out nil results.
+       (elisp--xref-find-apropos): New function.
+       (elisp-xref-find): Use it.
+
+       * progmodes/xref.el (xref--show-xrefs): Use `user-error'.
+
 2014-12-25  Helmut Eller  <address@hidden>
             Dmitry Gutov  <address@hidden>
 
diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el
index e73c20d..ef619f0 100644
--- a/lisp/progmodes/elisp-mode.el
+++ b/lisp/progmodes/elisp-mode.el
@@ -577,27 +577,39 @@ It can be quoted, or be inside a quoted form."
 (declare-function xref-make "xref" (description location))
 
 (defun elisp-xref-find (action id)
-  (when (eq action 'definitions)
-    (let ((sym (intern-soft id)))
-      (when sym
-        (remove nil (elisp--xref-find-definitions sym))))))
+  (pcase action
+    (`definitions
+      (let ((sym (intern-soft id)))
+        (when sym
+          (elisp--xref-find-definitions sym))))
+    (`apropos
+     (elisp--xref-find-apropos id))))
 
 (defun elisp--xref-find-definitions (symbol)
   (save-excursion
-    (mapcar
-     (lambda (type)
-       (let ((loc
-              (condition-case err
-                  (let ((buf-pos (elisp--identifier-location type symbol)))
-                    (when buf-pos
-                      (xref-make-buffer-location (car buf-pos)
-                                                 (or (cdr buf-pos) 1))))
-                (error
-                 (xref-make-bogus-location (error-message-string err))))))
-         (when loc
-           (xref-make (format "(%s %s)" type symbol)
-                      loc))))
-     elisp--identifier-types)))
+    (let (lst)
+      (dolist (type elisp--identifier-types)
+        (let ((loc
+               (condition-case err
+                   (let ((buf-pos (elisp--identifier-location type symbol)))
+                     (when buf-pos
+                       (xref-make-buffer-location (car buf-pos)
+                                                  (or (cdr buf-pos) 1))))
+                 (error
+                  (xref-make-bogus-location (error-message-string err))))))
+          (when loc
+            (push
+             (xref-make (format "(%s %s)" type symbol)
+                        loc)
+             lst))))
+      lst)))
+
+(defun elisp--xref-find-apropos (regexp)
+  (apply #'nconc
+         (let (lst)
+           (dolist (sym (apropos-internal regexp))
+            (push (elisp--xref-find-definitions sym) lst))
+           (nreverse lst))))
 
 (defun elisp--xref-identifier-completion-table ()
   elisp--identifier-completion-table)
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index 02e02de..21c0d6a 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -414,7 +414,7 @@ Return an alist of the form ((FILENAME . (XREF ...)) ...)."
 (defun xref--show-xrefs (id kind xrefs window)
   (cond
    ((null xrefs)
-    (error "No known %s for: %s" kind id))
+    (user-error "No known %s for: %s" kind id))
    ((not (cdr xrefs))
     (xref-push-marker-stack)
     (xref--pop-to-location (xref--xref-location (car xrefs)) window))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]