Il semble que exubérantes-ctags par défaut ajoute que les balises quand il voit une définition , pas une déclaration. Changer votre classe A
à
template<typename TYPE>
class A
{
public:
void test_func(TYPE a)
{
}
void test_func_2(TYPE a);
void test_func_3(TYPE a);
};
fait test_func
apparaître dans le fichier 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.9~svn20110310 //
A a.h /^class A$/;" c namespace:test_space
B a.h /^class B$/;" c namespace:test_space
easy_func a.h /^void easy_func()$/;" f namespace:test_space
test_func a.h /^ void test_func(TYPE a)$/;" f class:test_space::A
test_space a.h /^namespace test_space$/;" n
mais les autres fonctions ne se présentent pas. Je n'utilise pas ctags moi-même, mais il est logique que vous vouliez habituellement pouvoir trouver des définitions, pas des déclarations.
Si vous dites ctags à prototypes d'index, vous pouvez obtenir ce que vous cherchez:
ctags --c-kinds=+p a.h
Pour exemple, cela se traduit par
!_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.9~svn20110310 //
A a.h /^class A$/;" c namespace:test_space
B a.h /^class B$/;" c namespace:test_space
easy_func a.h /^void easy_func()$/;" f namespace:test_space
test_func a.h /^ void test_func(TYPE a);$/;" p class:test_space::A
test_func_2 a.h /^ void test_func_2(TYPE a);$/;" p class:test_space::A
test_func_3 a.h /^ void test_func_3(TYPE a);$/;" p class:test_space::A
test_func_b a.h /^ void test_func_b();$/;" p class:test_space::B
test_space a.h /^namespace test_space$/;" n
Vous pouvez obtenir plus de détails sur les choses sont marqués comme ceci:
$ ctags --list-kinds=c
c classes
d macro definitions
e enumerators (values inside an enumeration)
f function definitions
g enumeration names
l local variables [off]
m class, struct, and union members
n namespaces
p function prototypes [off]
s structure names
t typedefs
u union names
v variable definitions
x external and forward variable declarations [off]
Vous pouvez voir que les prototypes de fonction sont, par défaut, non marqués.