識別子(identifier)とは、プログラムの構文的なサブユニットの名前であり、関数(function)、サブルーチン(subroutine)、メソッド(method)、クラス(class)、データ型(data type)、マクロ(macro)などが該当します。プログラミング言語では、識別子はその言語の構文をもつシンボルです。識別子はタグ(tags)という名前でも知られています。
プログラムの開発と保守では、プロジェクト全体を横断して識別子をリネームする等から、識別子がどこで定義されているか(defined)、どこから参照されているか(referenced)を素早く見つける能力が求められます。これらの能力は、プログラミング言語をサポートするよう定義されたモード以外のメジャーモードでも、リファレンスを見つけるために有用です。たとえばテキストやTeXドキュメントのチャプター(chapters)、セクション(sections)、アペンディクス(appendices)も同様にサブユニットとなり得るし、それらの名前も識別子として使用できます。このチャプターでは、プログラムのソース、同様に他の種類のテキストの中の、任意の種類のサブユニットの名前を正確に参照するために、“識別子(identifiers)”という用語を使用します。
これらの能力のために、Emacsは‘xref’と呼ばれる統一されたインターフェースを提供します。
xref
が処理を行なうには、そのメジャーモード特有の情報とメソッドを使用する必要があります。どのファイルから識別子を検索するか、識別子にたいするリファレンス(references:
参照)を探す方法、識別子を補完する方法、これら(およびそれ以上のこと)は、モード固有の知識です。xref
は処理のモード固有な部分を、そのモードにより提供されるバックエンド(backend)に委託します。これには、いくつかのコマンドにたいするデフォルトや、そのモード自体が提供しないモードにたいするデフォルトも含まれます。
バックエンドはこれらの能力をさまざまな方法で実装できます。いくつかの例を示します:
etags
が含まれています。これはプログラム中の識別子の定義にタグ付けするコマンドで、リファレンスをタグテーブル(tags
tables)に抽出することにより、多くのプログラミング言語、およびHTMLのようなその他のモードをサポートします。タグテーブルの作成を参照してください。etags
によりサポートされた言語にたいするメジャーモードは、そのバックエンドの基準でタグテーブルを使用できます(この種のバックエンドの不利な点の1つは、タグテーブルは有効性を維持するために最新である必要があり、度々リビルドしなければならないことです)。