2011-07-25 3 views
9

Y at-il un moyen pour ctags de gérer des prototypes de fonctions multilignes en C?ctags prototypes de fonctions C multi-lignes

J'ai cherché partout et le --fields=+S est censé faire des prototypes multilignes, mais je ne peux pas le faire fonctionner:

ctags -x --c-kinds=pf --fields=+S file 

fichier:

int 
foo(int 
    x, int y 
    ); 

ctags retourne seulement:

foo(int 

(Notez que le type de retour est également manquant)

En fin de compte, je voudrais obtenir une sortie similaire à

int foo(int x, int y); 

ou

int foo(int x, int y 

est --fields=+S pas la bonne façon? Y a-t-il une partie des champs ctags qui me manquent? Des pointeurs en général?

S'il n'y a pas un moyen de le faire dans ctags, des programmes recommandés? (Je suis actuellement en train de regarder uncrustify)

Répondre

0

je ne pouvais pas trouver quoi que ce soit avec ctags j'ai donc écrit un script python pour réarranger mon dossier afin que ctags pourrait capturer les prototypes.

Note: mon code avait des commentaires et beaucoup de ceci prend soin de les supprimer (sinon ils entraveraient les ctags).

ont été fait dans Manipulations cet ordre:

# concat to one line 
file_str = '' 
for line in read_from.readlines(): 
    file_str += line 

# remove all /* */ comments 
file_str = re.sub('/\*(.|[\r\n])*?\*/', '', file_str) 

# remove '//' comments 
file_str = re.sub('//.*', '', file_str) 

# split on '\n' 
file_as_list = file_str.splitlines(True) 

# strip everything 
for index in range(len(file_as_list)): 
    file_as_list[index] = file_as_list[index].strip() 

# add in newlines where appropriate 
for line in file_as_list: 
    # if the line ends in ';' or '}' 
    if line.endswith(';') or line.endswith('}'): 
     # append a newline to the stripped line 
     write_to.write(line.strip() + '\n') 
    else: 
     # append a space to the stripped line 
     write_to.write(line.strip() + ' ') 
-1

Vous pouvez supprimer les sauts de ligne inutiles avec un filtre simple, par ex.

tr '\n' ' ' | sed 's/\([{};]\)/\1\n/g' 
1

J'ai eu le même problème avec mon code, mais je ne pouvais pas le modifier. Lorsque j'utilise le paramètre --fields = + S, cela semble fonctionner car j'obtiens une ligne supplémentaire dans le fichier de balise. La signature: partie contient tous les paramètres de la fonction.

CopyToTX26 D: \ Bisel \ My Dropbox \ Work \ 0_BSW \ PKG_CMD \ memory.c/^ vide CopyToTX26 (uint16 memory_ID, uint32 ** pt_data_address, uint32 nb_recover, $ /; » signature f :(uint16 memory_ID, uint32 ** pt_data_address, uint32 nb_recover, uint32 * nb_copied, uint32 max_length)

0

--_ option xformat peut vous aider.

[[email protected] ~]$ cat /tmp/foo.h 
int 
foo(int 
    x, int y 
    ); 
[[email protected] ~]$ ~/var/ctags/ctags -x --c-kinds=pf --_xformat="%-16N %4n %-16F %C %S" /tmp/foo.h 
foo     2 /tmp/foo.h  foo(int (int x,int y) 
Questions connexes