xref

Homepage: https://elpa.gnu.org/packages/xref.html

Updated:

Summary

Cross-referencing commands

Commentary

NOTE: The xref API is still experimental and can change in major,
backward-incompatible ways.  Everyone is encouraged to try it, and
report to us any problems or use cases we hadn't anticipated, by
sending an email to emacs-devel, or `M-x report-emacs-bug'.

This file provides a somewhat generic infrastructure for cross
referencing commands, in particular "find-definition".

Some part of the functionality must be implemented in a language
dependent way and that's done by defining an xref backend.

That consists of a constructor function, which should return a
backend value, and a set of implementations for the generic
functions:

`xref-backend-identifier-at-point',
`xref-backend-identifier-completion-table',
`xref-backend-definitions', `xref-backend-references',
`xref-backend-apropos', which see.

A major mode would normally use `add-hook' to add the backend
constructor to `xref-backend-functions'.

The last three methods operate with "xref" and "location" values.

One would usually call `make-xref' and `xref-make-file-location',
`xref-make-buffer-location' or `xref-make-bogus-location' to create
them.  More generally, a location must be an instance of an EIEIO
class inheriting from `xref-location' and implementing
`xref-location-group' and `xref-location-marker'.

There's a special kind of xrefs we call "match xrefs", which
correspond to search results.  For these values,
`xref-match-length' must be defined, and `xref-location-marker'
must return the beginning of the match.

Each identifier must be represented as a string.  Implementers can
use string properties to store additional information about the
identifier, but they should keep in mind that values returned from
`xref-backend-identifier-completion-table' should still be
distinct, because the user can't see the properties when making the
choice.

See the etags and elisp-mode implementations for full examples.

Dependencies

Reverse dependencies