bug-gnu-emacs
[Top][All Lists]
Advanced

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

bug#66683: 30.0.50; xref-find-references returns duplicates


From: Dmitry Gutov
Subject: bug#66683: 30.0.50; xref-find-references returns duplicates
Date: Mon, 23 Oct 2023 22:11:51 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0

On 22/10/2023 18:29, Petteri Hintsanen wrote:
[This is a bug report from an old issue discussed in
help-gnu-emacs@gnu.org  (dated 19 Dec 2022, Message-ID
<7ac4ca06-cbbb-1c8d-0f59-2ccd5d3232f2@iki.fi>).  Dmitry Gutov asked me
to file a bug, which I unfortunately forgot to do that time.  Hence
filing now.]

I discovered a somewhat peculiar case where xref-find-references returns
duplicate references for elisp symbols.

Recipe:

1. Create a file ~/foo/bar/bar.el with contents:

   (defun bar-f ())

   (defun bar-g ()
     (bar-f))

   (provide 'bar)

2. Create a git repo in ~/foo/bar and commit bar.el.  This is just to
set up a project that Emacs can recognize.

3. Start emacs -Q and eval

   (add-to-list 'load-path "~/foo")
   (add-to-list 'load-path "~/foo/bar")
   (require 'bar)

4. C-x C-f ~/foo/bar/bar.el

5. M-x xref-find-references RET bar-f RET

On my machine I get

   bar.el
   1: (defun bar-f ())
   4:   (bar-f))
   1: (defun bar-f ())
   4:   (bar-f))

i.e. references are duplicated.  The issue seems to be in load-path: if
I remove (add-to-list 'load-path "~/foo") from step (3) above, then I
don't see any duplicates.

Hi! Thanks for the report and the reminder.

Could you try this little patch below?

diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index fd788ec8f32..81618428bf3 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -281,9 +281,10 @@ xref-backend-references
          (xref-references-in-directory identifier dir)
        (message "Searching %s... done" dir)))
    (let ((pr (project-current t)))
-     (cons
-      (xref--project-root pr)
-      (project-external-roots pr)))))
+     (project-combine-directories
+      (cons
+       (xref--project-root pr)
+       (project-external-roots pr))))))

 (cl-defgeneric xref-backend-apropos (backend pattern)
   "Find all symbols that match PATTERN string.






reply via email to

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