An identifier is a name of a syntactical subunit of the program: a function, a subroutine, a method, a class, a data type, a macro, etc. In a programming language, each identifier is a symbol in the language's syntax. Program development and maintenance requires capabilities to quickly find where each identifier was defined and referenced, to rename identifiers across the entire project, etc.
These capabilities are also useful for finding references in major modes other than those defined to support programming languages. For example, chapters, sections, appendices, etc. of a text or a TeX document can be treated as subunits as well, and their names can be used as identifiers. In this chapter, we use the term “identifiers” to collectively refer to the names of any kind of subunits, in program source and in other kinds of text alike.
Emacs provides a unified interface to these capabilities, called ‘xref’.
To do its job,
xref needs to make use of information and to
employ methods specific to the major mode. What files to search for
identifiers, how to find references to identifiers, how to complete on
identifiers—all this and more is mode-specific knowledge.
xref delegates the mode-specific parts of its job to a
backend provided by the mode; it also includes defaults for some
of its commands, for those modes that don't provide their own.
A backend can implement its capabilities in a variety of ways. Here are a few examples: