TAGS ファイルには定義が含まれています
TAGS
ファイルには、関数とクラスが定義されている場所のリストが含まれています。通常、プロジェクトのルートに配置され、次のようになります。
^L
configure,3945
as_fn_success () { as_fn_return 0; }^?as_fn_success^A180,5465
as_fn_failure () { as_fn_return 1; }^?as_fn_failure^A181,5502
as_fn_ret_success () { return 0; }^?as_fn_ret_success^A182,5539
as_fn_ret_failure () { return 1; }^?as_fn_ret_failure^A183,5574
これにより、Emacs は定義を見つけることができます。基本的なナビゲーションは に組み込まれてfind-tag
いetags-select
ますが、複数の一致がある場合により優れた UI を提供します。
コード補完に TAGS ファイルを使用することもできます。たとえば、会社の etags バックエンドは TAGS ファイルを使用します。
TAGS ファイルはさまざまなツールで作成できます
ctags
(以前は「ユニバーサル ctags」または「exuberant ctags」と呼ばれていました) は、TAGS ファイルを生成でき、幅広い言語をサポートします。github で積極的にメンテナンスされています。
etags
Emacs には、 とと呼ばれる TAGS ファイルを生成する 2 つのプログラムが同梱されていますctags
。Emacsctags
はetags
、ユニバーサル ctags と同じ CLI インターフェイスを備えています。混乱を避けるために、多くのディストリビューションではこれらのプログラムの名前を変更しています ( ctags.emacs24
Debian など)。
や など、TAGS ファイルを生成するための言語固有のツールもありjsctags
ますhasktags
。
その他のファイル形式
ebrowse
Emacs に同梱されている C プログラムです。C/C++ コードのインデックスを作成し、BROWSE
ファイルを生成します。ebrowse.el は、通常の検索定義と補完を提供します。Emacs でファイルを直接開いてBROWSE
、コードベースで定義されたクラス/関数の概要を取得することもできます。
GNU GlobalGTAGS
には、GRTAGS
とファイルで構成される独自のデータベース形式がありGPATH
ます。これらのファイルは、gtags
C/C++ コードを解析するコマンドで生成できます。他の言語の場合、GNU Global はユニバーサル ctags によって生成されたファイルを読み取ることができます。
GNU Global は、「この記号はどこで言及されていますか?」のような、より高度な質問をするための CLI インターフェイスも提供します。これには Emacs パッケージ gtags.el が同梱されていますが、 ggtags.elは GNU グローバル データベースへのアクセスにも人気があります。
Cscopeの精神は GNU Global に似ています。C/C++ を独自のデータベース形式に解析します。「この関数のすべての呼び出し元/呼び出し先を見つける」などの質問にも答えることができます。
global と cscope を比較するこの HN ディスカッションも参照してください。
クライアント/サーバー プロジェクト
rtagsは、永続的なサーバーを使用して C/C++ を解析およびインデックス付けします。これは clang パーサーを使用するため、C++ を非常にうまく処理します。サーバーにクエリを実行するための Emacs パッケージが同梱されています。
google-gtagsは、大きな TAGS ファイルがサーバーに保存されるプロジェクトでした。サーバーにクエリを実行すると、検索に関連する TAGS ファイルのサブセットが提供されます。
セマンティック (CEDET)
Semantic は、C/C++ 用のパーサーを含む組み込みの Emacs パッケージであるため、定義も見つけることができます。また、TAGS ファイル、csope データベース、およびその他のソースからデータをインポートすることもできます。CEDET には、クラス階層の UML ダイアグラムの生成など、このデータを使用する IDE スタイルの機能も含まれています。