Extagがプロトタイプタグを生成できるように、C構文変更マクロを元に戻します。

Extagがプロトタイプタグを生成できるように、C構文変更マクロを元に戻します。

tagsExtagsを使用してvimファイルを正常に作成できます(活気に満ちたcタグ)。

しかし、タグを生成するとプロトタイプに移動システムヘッダーは次の形式の構文を使用してマクロを変更するため、関数の機能は機能しません。

#define _EXFUN(name, proto)     name proto

たとえば、string.h使用してください。

char    *_EXFUN(strchr,(const char *, int));

_EXFUN代わりにラベルを作成してくださいstrchr

_EXFUN  /somedir/include/string.h   /^char  *_EXFUN(strchr,(const char *, int));$/;"    p

次のコマンドを使用してラベルを作成します。

exctags -f tags.p --language-force=c --c-kinds=p file1 file2 ...

私はextagsのマニュアルページを読んで-Iマクロ拡張に影響を与えるためにさまざまなオプションを試しましたが、役に立ちませんでした。この問題を解決した人はいますか?

答え1

前処理されたファイルを実行し、プリプロセッサのコメント()を見て、ファイルに行番号を書き込むようにectags要求します(または)。--line-directives=yestags-n--excmd=numbers

cc -E prog.c >prog.p
ectags --line-directives=yes --language-force=c --c-kinds=p -n prog.p

例Cファイル:

#define _EXFUN(name, proto)     name proto

char    *_EXFUN(strchr,(const char *, int));

結果tagsファイル:

!_TAG_FILE_FORMAT       2       /extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED       1       /0=unsorted, 1=sorted, 2=foldcase/
!_TAG_PROGRAM_AUTHOR    Darren Hiebert  /[email protected]/
!_TAG_PROGRAM_NAME      Exuberant Ctags //
!_TAG_PROGRAM_URL       http://ctags.sourceforge.net    /official site/
!_TAG_PROGRAM_VERSION   5.8     //
strchr  prog.c  3;"     p       file:

ご覧のとおり、プロトタイプはの 3 行目に表示されるものとしてstrchr記載されていますprog.c

これ欠点これは、前処理マクロのタグ項目を取得できないためです。

ectags元のファイルで前処理されたファイルを実行することで、この問題を解決できます。

ectags --line-directives=yes --language-force=c --c-kinds=pd -n -I _EXFUN prog.p prog.c

生産する

[...]
_EXFUN  prog.c  1;"     d       file:
strchr  prog.c  3;"     p       file:

答え2

この特定のマクロを処理するには、次のオプションがあります--regex-<LANG>

ctags --regex-c='/^[^#]*_EXFUN *\( *([^ ,]+),.*/\1/p/' ...

ファイルを生成しますtags

_EXFUN  test.c     1;"     d       file:
strchr  test.c     /^char    *_EXFUN(strchr,(const char *, int));$/;"      p

関連情報