GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/emacs/Xref.html ・ emacs-doc.conao3.com

30.4 識別子参照の検索

識別子とは、プログラムの構文上のサブユニット(関数、サブルーチン、メソッド、クラス、データ型、マクロなど)の名称のことです。プログラミング言語において、各識別子はその言語の構文における記号となります。識別子はタグとも呼ばれます。

プログラムの開発および保守には、各識別子がどこで定義・参照されているかを迅速に特定したり、プロジェクト全体にわたって識別子をリネームしたりするなどの機能が必要です。こうした機能は、プログラミング言語をサポートするために定義されたモード以外の主要なモードにおける参照箇所を探す際にも有用です。例えば、テキストやTeXドキュメントの章、節、付録などもサブユニットとして扱うことができ、それらの名前を識別子として利用できます。本章では、プログラムソースおよびその他の種類のテキストにおけるあらゆる種類のサブユニットの名称を総称して、「識別子」という用語を用います。

Emacsは、これらの機能への統一的なインターフェースとして「xref」を提供しています。

xrefがその機能を果たすには、情報を活用し、メジャーモード固有の手法を用いる必要があります。どのファイルから識別子を検索するか、識別子への参照をどう見つけるか、識別子をどう補完するか――こうしたすべてがモード固有の知識となります。xrefは、機能のうちモード固有の部分を、モードが提供するバックエンドに委ねます。また、独自のデフォルト値を提供していないモード向けに、一部のコマンドのデフォルト値も組み込んでいます。

バックエンドは、その機能をさまざまな方法で実装できます。以下にいくつか例を挙げます。

  1. 主要なモードの中には、言語シンボルを検索するための機能を標準で備えているものがあります。例えば、Emacs Lispのシンボルは、Emacs Lispインタプリタが保持するパッケージロード履歴の検索や、組み込みのドキュメント文字列の参照によって特定できます。Emacs Lispモードは、バックエンドでこれらの機能を利用してシンボルの定義を検索できるようにしています。(この種のバックエンドの欠点の一つは、インタプリタにロードされたサブユニットしか認識できない点です。)
  2. 現在のバッファのプロジェクト(プロジェクトの操作を参照)および現在のバッファのメジャーモードに対して Eglot が有効化されている場合、Eglot は外部の言語サーバープログラムに問い合わせ、プロジェクト内の識別子の定義に関してサーバーから提供されたデータを表示します。Eglot: The Emacs LSP Client の Eglot の機能 を参照してください。
  3. 外部プログラムは、関連ファイルをスキャンして参照を抽出し、これらの参照のデータベースを構築できます。その後、バックエンドは参照の一覧表示や検索が必要な際に、いつでもこのデータベースにアクセスできます。Emacsディストリビューションには、プログラム内の識別子定義にタグを付けるためのコマンド etags が含まれており、参照を タグテーブル に抽出することで、多くのプログラミング言語やHTMLなどのその他のメジャーモードをサポートしています。etags がサポートする言語のメジャーモードは、タグテーブルをバックエンドの基盤として利用できます。etags-regen-mode を有効にすると、サポートされているファイルタイプについて現在のプロジェクト全体でタグテーブルが生成され、編集時に自動的に更新されます。あるいは、ファイルセットや更新タイミングを制御するために、手動でテーブルを構築することも可能です。詳細は タグテーブルの作成 を参照してください。