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
(以前は 'universal ctags'または 'exuberant ctags'と呼ばれていました)はTAGSファイルを生成でき、幅広い言語をサポートしています。githubで積極的にメンテナンスされています。
Emacsにはetags
、およびと呼ばれるTAGSファイルを生成する2つのプログラムが付属していますctags
。Emacs ctags
はetags
、ユニバーサルctagsと同じCLIインターフェイスを備えています。混乱を避けるために、多くのディストリビューションはこれらのプログラムの名前を変更しています(ctags.emacs24
Debianなど)。
などTAGSファイルを生成するための言語固有のツールもありますjsctags
とはhasktags
。
その他のファイル形式
ebrowse
Emacsに同梱されているCプログラムです。C / C ++コードのインデックスを作成し、BROWSE
ファイルを生成します。ebrowse.elは、通常の検索定義と補完を提供します。BROWSE
Emacsでファイルを直接開いて、コードベースで定義されたクラス/関数の概要を取得することもできます。
GNU GlobalにはGTAGS
、GRTAGS
とGPATH
ファイルで構成される独自のデータベース形式があります。これらのファイルは、gtags
C / C ++コードを解析するコマンドで生成できます。他の言語では、GNU Globalはユニバーサルctagsによって生成されたファイルを読み取ることができます。
GNU Globalは、「このシンボルはどこに言及されているのですか?」のような、より洗練された質問をするためのCLIインターフェースも提供します。Emacsパッケージgtags.elが同梱されていますが、ggtags.elもGNUグローバルデータベースへのアクセスに人気があります。
Cscopeは、精神的にはGNU Globalに似ています。C/ C ++を独自のデータベース形式に解析します。また、「この関数のすべての呼び出し元/呼び出し先を見つける」などの質問にも答えることができます。
グローバルとcscopeを比較するこのHNディスカッションも参照してください。
クライアント/サーバープロジェクト
rtagsはパーシスタントサーバーを使用してC / C ++を解析およびインデックス付けします。Clangパーサーを使用するため、C ++を非常にうまく処理します。サーバーを照会するためのEmacsパッケージが同梱されています。
google-gtagsは、大きなTAGSファイルがサーバーに保存されるプロジェクトでした。サーバーを照会すると、検索に関連するTAGSファイルのサブセットが提供されます。
セマンティック(CEDET)
セマンティックは組み込みのEmacsパッケージであり、C / C ++のパーサーが含まれているため、定義を見つけることもできます。また、TAGSファイル、csopeデータベース、その他のソースからデータをインポートすることもできます。CEDETには、このデータを使用するIDEスタイルの機能(クラス階層のUML図の生成など)も含まれています。
GTags
リンク先のプロジェクトはかなり死んでいます。誰かがについて話しているのならgtags
、おそらくGNU Globalを参照しているでしょう。