[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master 64f2d34 1/2: Move xref-elisp-location to elisp-mode
From: |
Dmitry Gutov |
Subject: |
[Emacs-diffs] master 64f2d34 1/2: Move xref-elisp-location to elisp-mode.el |
Date: |
Tue, 02 Jun 2015 15:48:29 +0000 |
branch: master
commit 64f2d346b762a6e3180eba92b5cc96f82f370687
Author: Dmitry Gutov <address@hidden>
Commit: Dmitry Gutov <address@hidden>
Move xref-elisp-location to elisp-mode.el
* lisp/progmodes/xref.el (xref-elisp-location)
(xref-make-elisp-location, xref-location-marker): Remove here.
(xref--xref): Don't limit the type of the location slot.
* lisp/progmodes/elisp-mode.el (xref-elisp-location):
Define as a cl-struct here.
(xref-location-marker): Move here.
---
lisp/progmodes/elisp-mode.el | 19 ++++++++++++++++++-
lisp/progmodes/xref.el | 27 +--------------------------
2 files changed, 19 insertions(+), 27 deletions(-)
diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el
index bcbf1d5..968bb21 100644
--- a/lisp/progmodes/elisp-mode.el
+++ b/lisp/progmodes/elisp-mode.el
@@ -579,7 +579,6 @@ It can be quoted, or be inside a quoted form."
;;; Xref backend
-(declare-function xref-make-elisp-location "xref" (symbol type file))
(declare-function xref-make-bogus-location "xref" (message))
(declare-function xref-make "xref" (description location))
(declare-function xref-collect-matches "xref" (input dir &optional kind))
@@ -697,6 +696,24 @@ It can be quoted, or be inside a quoted form."
(defun elisp--xref-identifier-completion-table ()
elisp--xref-identifier-completion-table)
+(cl-defstruct (xref-elisp-location
+ (:constructor xref-make-elisp-location (symbol type file)))
+ "Location of an Emacs Lisp symbol definition."
+ symbol type file)
+
+(cl-defmethod xref-location-marker ((l xref-elisp-location))
+ (pcase-let (((cl-struct xref-elisp-location symbol type file) l))
+ (let ((buffer-point
+ (pcase type
+ (`defun (find-function-search-for-symbol symbol nil file))
+ ((or `defvar `defface)
+ (find-function-search-for-symbol symbol type file))
+ (`feature
+ (cons (find-file-noselect file) 1)))))
+ (with-current-buffer (car buffer-point)
+ (goto-char (or (cdr buffer-point) (point-min)))
+ (point-marker)))))
+
;;; Elisp Interaction mode
(defvar lisp-interaction-mode-map
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index c9bffc6..3bc66f8 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -143,38 +143,13 @@ actual location is not known.")
(cl-defmethod xref-location-group ((_ xref-bogus-location)) "(No location)")
-;; This should be in elisp-mode.el, but it's preloaded, and we can't
-;; preload defclass and defmethod (at least, not yet).
-(defclass xref-elisp-location (xref-location)
- ((symbol :type symbol :initarg :symbol)
- (type :type symbol :initarg :type)
- (file :type string :initarg :file
- :reader xref-location-group))
- :documentation "Location of an Emacs Lisp symbol definition.")
-
-(defun xref-make-elisp-location (symbol type file)
- (make-instance 'xref-elisp-location :symbol symbol :type type :file file))
-
-(cl-defmethod xref-location-marker ((l xref-elisp-location))
- (with-slots (symbol type file) l
- (let ((buffer-point
- (pcase type
- (`defun (find-function-search-for-symbol symbol nil file))
- ((or `defvar `defface)
- (find-function-search-for-symbol symbol type file))
- (`feature
- (cons (find-file-noselect file) 1)))))
- (with-current-buffer (car buffer-point)
- (goto-char (or (cdr buffer-point) (point-min)))
- (point-marker)))))
-
;;; Cross-reference
(defclass xref--xref ()
((description :type string :initarg :description
:reader xref--xref-description)
- (location :type xref-location :initarg :location
+ (location :initarg :location
:reader xref--xref-location))
:comment "An xref is used to display and locate constructs like
variables or functions.")