leoliu/ggtags

ggtags doesn't work with xref in Emacs 27.2 since latest update

tttuuu888 opened this issue · 3 comments

First of all, thanks a lot for this great package. And thank for quick update for Emacs 28 as well.
However ggtags doesn't work with xref in Emacs 27.2 since last update(1442ab8).

The error message I see from xref-find-definitions and xref-find-references is as below:

cl-no-applicable-method: No applicable method: xref-location-marker, #s(ggtags-xref-location ... ...)

Thanks.

@tttuuu888 thanks for the report on the breakage. Are you able to test if the following patch works on both 27 and 28? I have only tested Emacs 27 since I don't have 28 built yet. Thanks.

diff --git a/ggtags.el b/ggtags.el
index 85e6fd30..3e9e9bc2 100644
--- a/ggtags.el
+++ b/ggtags.el
@@ -2371,11 +2371,23 @@ (defconst ggtags--xref-limit 1000)
 
 (cl-defstruct (ggtags-xref-location
                (:constructor ggtags-make-xref-location (file line column project-root)))
-  file project-root)
+  file line column project-root)
 
 (cl-defmethod xref-location-group ((l ggtags-xref-location))
   (file-relative-name (ggtags-xref-location-file l) (ggtags-xref-location-project-root l)))
 
+(cl-defmethod xref-location-marker ((l ggtags-xref-location))
+  (let ((buffer (find-file-noselect (ggtags-xref-location-file l))))
+    (with-current-buffer buffer
+      (save-excursion
+        (goto-char (point-min))
+        (forward-line (1- (ggtags-xref-location-line l)))
+        (move-to-column (1- (ggtags-xref-location-column l)))
+        (point-marker)))))
+
+(cl-defmethod xref-location-line ((l ggtags-xref-location))
+  (ggtags-xref-location-line l))
+
 (defun ggtags--xref-backend ()
   (and (ggtags-find-project)
        (let ((tag (ggtags-tag-at-point)))

@leoliu Thank you for the quick patch. I tested it on Emacs 27.2 and 28 and found it works well. Thank you!

Thank you very much for the test!